基于51的爱心水流灯源码
基于51的爱心流水灯源码
32颗LED的心形流水灯,是接触51跟C语言初期栋神送的,代码对新手来说还好,对高手貌似略乱点(目前没时间重写),不过影响不大~
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delays(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void main() { uint i,j,n; uchar a,b,c,d; for(i=0;i<1;i++) // 所有灯闪1下 { P0=P1=P2=P3=0x00;delays(1000); P0=P1=P2=P3=0xff;delays(1000); } P3=P2=0xff; //两边一起向下流水 for(j=0;j<=8;j++) { P1=0xff<<j;P0=0xff<<j;delays(40); } for(j=0;j<=8;j++) { P3=0xff<<j; P2=0xff>>j;delays(40); } P0=P1=P2=P3=0x00;delays(500); for(j=0;j<8;j++) {P3=0xff<<(7-j);P2=0xff>>(7-j);delays(40); } for(j=0;j<8;j++) { P0=0xff<<(7-j);P1=0xff<<(7-j);delays(40); } P3=P2=0xff; //两边 杂乱 闪烁 for(j=0;j<=8;j++) {P1=0xff<<j; P0=0xff<<j; delays(40); } for(j=0;j<=8;j++) {P3=0xff>>j;P2=0xff<<j; delays(40); } P0=P1=P2=P3=0x00;delays(500); for(j=0;j<8;j++) {P1=0xff>>(7-j);P0=0xff>>(7-j);delays(40); } for(j=0;j<8;j++) {P2=0xff>>(7-j);P3=0xff<<(7-j);delays(40); } P0=P1=P2=P3=0xff; //一边向下流水 for(j=0;j<=8;j++) { P1=0xff<<j;delays(30); } for(j=0;j<=8;j++) { P3=0xff<<j;delays(30); } for(j=0;j<=8;j++) { P2=0xff<<j;delays(30); } for(j=0;j<=8;j++) { P0=0xff>>j;delays(30); } P0=P1=P2=P3=0x00; delays(500) ; for(j=0;j<8;j++) { P0=0xff>>(7-j);delays(30); } for(j=0;j<8;j++) { P2=0xff<<(7-j);delays(30); } for(j=0;j<8;j++) { P3=0xff<<(7-j);delays(30); } for(j=0;j<8;j++) { P1=0xff<<(7-j);delays(30); } P0=P1=P2=P3=0xff; for(j=0;j<=8;j++) { P0=0xff<<j; delays(30); } for(j=0;j<=8;j++) { P2=0xff>>j; delays(30); } for(j=0;j<=8;j++) { P3=0xff>>j;delays(30); } for(j=0;j<=8;j++) { P1=0xff>>j;delays(30); } P0=P1=P2=P3=0x00; delays(500) ; for(j=0;j<8;j++) { P1=0xff>>(7-j);delays(30); } for(j=0;j<8;j++) { P3=0xff>>(7-j);delays(30); } for(j=0;j<8;j++) { P2=0xff>>(7-j);delays(30); } for(j=0;j<8;j++) { P0=0xff<<(7-j);delays(30); } //2 P0=P2=P3=0xff ; for(i=0;i<=8;i++) { P1=0xff<<i;delays(50); } delays(800); for(i=0;i<8;i++) { P1=0xff>>(7-i);delays(50); } P0=P1=P2=0xff; for(i=0;i<=8;i++) { P3=0xff<<i;delays(50); } delays(800); for(i=0;i<8;i++) { P3=0xff>>(7-i);delays(50); }P0=P1=P3=0xff; for(i=0;i<=8;i++) { P2=0xff<<i;delays(50); } delays(800); for(i=0;i<8;i++) { P2=0xff>>(7-i);delays(50); } P1=P2=P3=0xff; for(i=0;i<=8;i++) { P0=0xff>>i;delays(50); } delays(800); for(i=0;i<8;i++) { P0=0xff<<(7-i);delays(50); } P2=P3=0xff;for(i=0;i<=8;i++) { P0=0xff<<i;P1=0xff<<i;delays(50); }delays(800); for(i=0;i<8;i++) { P0=0xff>>(7-i);P1=0xff>>(7-i);delays(50); }P0=P1=0xff; for(i=0;i<=8;i++) { P3=0xff<<i;P2=0xff>>i;delays(50); }delays(800); for(i=0;i<8;i++) { P3=0xff>>(7-i);P2=0xff<<(7-i);delays(50); } for(i=0;i<3;i++) { P1=P3=P2=0xcc;P0=0x33;delays(500);P1=P3=P2=0x33;P0=0xcc;delays(500); } P1=P3=P2=0xcc; P0=0x33; //首先逆时针 for(i=0;i<120;i++) { delays(100);P0=_cror_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_crol_(P2,1); } delays(1500) ; for(i=0;i<120;i++) { delays(100); P0=_crol_(P0,1);P1=_cror_(P1,1);P3=_cror_(P3,1);P2=_cror_(P2,1); } delays(1000); P1=P3=P2=0x0f; P0=0xf0; //首先逆时针 for(i=0;i<80;i++) { delays(120);P0=_cror_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_crol_(P2,1); } delays(1500) ; for(i=0;i<80;i++) { delays(120); P0=_crol_(P0,1);P1=_cror_(P1,1);P3=_cror_(P3,1);P2=_cror_(P2,1); } P1=P3=P0=0x77;P2=0xee; for(i=0;i<50;i++) //四口来回转 { delays(100);P0=_crol_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_cror_(P2,1); } P0=P3=0xff;P1=P2=0xfe; for(i=0;i<8;i++) { delays(30); P1=_crol_(P1,1);P2=_crol_(P2,1); }P1=P2=0xff;P3=0xfe;P0=0x7f; for(i=0;i<8;i++) { delays(30); P3=_crol_(P3,1);P0=_cror_(P0,1); }P0=0xfe;P3=0x7f;a=0x7f; b=0xfe; for(j=1;j<8;j++) { c=0xff<<j;d=0xff>>j; P1=P2=0xfe; for(i=0;i<=7;i++) { delays(30); P1=_crol_(P1,1);P2=_crol_(P2,1); }P1=P2=0xff; for(i=0;i<7;i++) { P0=a&c;P3=b&d;delays(30); a=_cror_(a,1);b=_crol_(b,1); } } P0=P3=0x00;b=0xfe; for(j=1;j<8;j++) { d=0xff>>j; for(i=0;i<7;i++) { P1=b&d;P2=b&d;delays(30);b=_crol_(b,1); } } n=2; while(n) { P1=P2=P3=0x7f;P0=0xfe; for(i=0;i<7;i++) { delays(100);P1=_cror_(P1,1);P2=_cror_(P2,1);P3=_cror_(P3,1);P0=_crol_(P0,1); } delays(100); c=0xfe;d=0x7f;a=0x7f;b=0xfe; for(j=0;j<9;j++) { for(i=0;i<=8;i++) { P1=P2=P3=c&a;P0=b&d;delays(100); a=_cror_(a,1);b=_crol_(b,1); } c=_cror_(c,1);d=_crol_(d,1); a=c;b=d; }n--; } P3=P2=0xff; //两边一起向下亮 for(j=0;j<=8;j++) { P1=0xff<<j;P0=0xff<<j;delays(40); } for(j=0;j<=8;j++) { P3=0xff<<j; P2=0xff>>j;delays(40); } while(1) //一心调频率接近的跳动 { P0=P1=P2=P3=0x00;delays(800); P0=P1=P2=P3=0xff;delays(800); } }