|
本帖最后由 5之蒲公英 于 2016-10-22 10:44 编辑
朋友过生日,没啥送的,搞个小玩意送给他和周年纪念的女朋友。 做了个心型流水灯,各路大神不要喷我哈哈哈。原理图和PCB我上传上来大家有需要自己拿走哈,骗到妹子来告诉我声哈哈哈
PCB预览图
代码大概就是下面的这个样子大家自己根据需要自己修改哈。
其实我就是受女神指派来水贴的(你看不到我)
- #include<reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7
- uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0
- uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7
- uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0
- /***********************************************************/
- void delay(uint t); //延时
- void zg(uint t,uchar a);//两边逐个亮
- void qs(uint t,uchar a);//全部闪烁
- void zgxh(uint t,uchar a); // 逆时针逐个点亮
- //void zgxh1(uint t,uchar a); // 顺时针逐个点亮
- void djs(uint t,uchar a); //对角闪
- void lbzgm(uint t,uchar a);//两边逐个灭
- //void sszgm(uint t,uchar a); // 顺时针逐个灭
- void nszgm(uint t,uchar a); // 逆时针逐个灭
- void sztl(uint t,uchar a);//顺时逐个同步亮
- void nztl(uint t,uchar a);//逆时逐个同步亮
- void sztm(uint t,uchar a);//顺时逐个同步灭
- void nztm(uint t,uchar a);//逆时逐个同步灭
- void hwzjl(uint t,uchar a); //横往中间亮
- void hwzjm(uint t,uchar a); //横往中间灭
- //void swzjl(uint t,uchar a); //竖往中间亮
- //void swzjm(uint t,uchar a); //竖往中间灭
- void nzdl(uint t,uchar a); //逆时逐段亮
- void nzdgl(uint t,uchar a); //逆时逐段一个点亮
- void jgs(uint t,uchar a); //间隔闪
- /**********************************************************/
- void zg(uint t,uchar a)//两边逐个亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- P0=0x7f;delay(t);
- for(i=0;i<7;i++)
- {
- P0=table1[i+1];
- P2=table1[i];
- delay(t);
- }
- P2=0x00;P1=0xfe;
- delay(t);
- for(i=0;i<7;i++)
- {
- P1=table[i+1];
- P3=table1[i];
- delay(t);
- }
- P3=0x00;delay(t);
- }
- }
- void qs(uint t,uchar a) //全部闪烁
- {
- uchar j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- delay(t);
- P0=P1=P2=P3=0x00;
- delay(t);
- }
- }
- void zgxh(uint t,uchar a) // 逆时针逐个点亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for (i=0;i<8;i++)
- {
- P0=table1[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P1=table[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P3=table[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P2=table[i];
- delay(t);
- }
- }
- }
- void nszgm(uint t,uchar a) // 逆时针逐个灭
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for (i=0;i<8;i++)
- {
- P0=table3[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P1=table2[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P3=table2[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P2=table2[i];delay(t);
- }
- }
- }
- /*
- void zgxh1(uint t,uchar a) // 顺时针逐个点亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for (i=0;i<8;i++)
- {
- P2=table1[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P3=table1[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P1=table1[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P0=table[i];
- delay(t);
- }
- }
- }
- */
- /*
- void sszgm(uint t,uchar a) // 顺时针逐个灭
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for (i=0;i<8;i++)
- {
- P2=table3[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P3=table3[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P1=table3[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P0=table2[i];delay(t);
- }
- }
- }
- */
- void djs(uint t,uchar a) //对角闪
- {
- uchar j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- P0=P3=0x00;
- delay(t);
- P0=P1=P2=P3=0xff;
- P1=P2=0x00;
- delay(t);
- }
-
- }
- void lbzgm(uint t,uchar a)//两边逐个灭
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P2=0x00;
- P3=0x01;delay(t);
- for(i=7;i>1;i--)
- {
- P1=table[i-1];P3=table1[i-2];
- delay(t);
- }
- P1=0xfe;P3=0xff;delay(t);
- P1=0xff;P2=0x01;delay(t);
- for(i=7;i>1;i--)
- {
- P0=table1[i-1];
- P2=table1[i-2];
- delay(t);
- }
- P0=0x7f;P2=0xff;delay(t);
- P0=0xff;delay(t);
- }
- }
- void sztl(uint t,uchar a)//顺时逐个同步亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=table[i];
- P1=P2=P3=table1[i];
- delay(t);
- }
- }
- }
- void nztl(uint t,uchar a)//逆时逐个同步亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=table1[i];
- P1=P2=P3=table[i];
- delay(t);
- }
- }
- }
- void sztm(uint t,uchar a)//顺时逐个同步灭
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=table2[i];
- P1=P2=P3=table3[i];
- delay(t);
- }
- }
- }
- void nztm(uint t,uchar a)//逆时逐个同步灭
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=table3[i];
- P1=P2=P3=table2[i];
- delay(t);
- }
- }
- }
- void hwzjl(uint t,uchar a) //横往中间亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=P2=P1=table1[i];
- P3=table[i];delay(t);
- }
- }
- }
- void hwzjm(uint t,uchar a) //横往中间灭
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=P2=P1=table3[i];
- P3=table2[i];delay(t);
- }
- }
- }
- /*
- void swzjl(uint t,uchar a) //竖往中间亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=P2=P1=table[i];
- P3=table1[i];delay(t);
- }
- }
- }
- void swzjm(uint t,uchar a) //竖往中间灭
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=P2=P1=table2[i];
- P3=table3[i];delay(t);
- }
- }
- }
- */
- void nzdl(uint t,uchar a) //逆时逐段亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=table1[i];
- delay(t);
- }
- P0=0xff;
- for(i=0;i<8;i++)
- {
- P1=table[i];
- delay(t);
- }
- P1=0xff;
- for(i=0;i<8;i++)
- {
- P3=table[i];
- delay(t);
- }
- P3=0xff;
- for(i=0;i<8;i++)
- {
- P2=table[i];
- delay(t);
- }
- P2=0xff;
- }
- }
- void nzdgl(uint t,uchar a) //逆时逐段一个点亮
- {
- uchar i,j,k,l;
- for (j=0;j<a;j++)
- {
- k=table1[0];
- P0=k;l=table[0];
- P1=P2=P3=l;delay(t);
- for(i=0;i<8;i++)
- {
- k=_crol_(k,-1);
- P0=k;
- l=_crol_(l,1);
- P1=P2=P3=l;
- delay(t);
- }
- }
- }
- void jgs(uint t,uchar a) //间隔闪
- {
- uchar j;
- for (j=0;j<a;j++)
- {
- P0=0x55;P1=P2=P3=0xaa;
- delay(t);
- P0=0xaa;P1=P2=P3=0x55;
- delay(t);
- }
- }
- void main()
- {
- uchar i;
- while(1)
- {
- zg(100,1); //两边逐个亮
- lbzgm(100,1); //两边逐个灭
- jgs(300,10);
- djs(100,20); //对角闪
- ////////////////////////////////////////////
- P1=P2=P3=0xff;
- for(i=0;i<3;i++)
- {
- P0=0x00;delay(800);
- P0=0xff;delay(800);
- }
- P0=0x00;
- for(i=0;i<3;i++)
- {
- P1=0x00;delay(800);
- P1=0xff;delay(800);
- }
- P1=0x00;
- for(i=0;i<3;i++)
- {
- P3=0x00;delay(800);
- P3=0xff;delay(800);
- }
- P3=0x00;
- for(i=0;i<3;i++)
- {
- P2=0x00;delay(800);
- P2=0xff;delay(800);
- }
- qs(500,3);
- /////////////////////////////////////////////
- for(i=0;i<6;i++)
- {
- zgxh(50,1);
- nszgm(50,1);
- }
- djs(100,20); //对角闪
- for(i=0;i<3;i++)
- {
- zg(100,1); //两边逐个亮
- lbzgm(100,1); //两边逐个灭
- }
- qs(200,10);djs(100,50);
- for(i=0;i<5;i++)
- {
- sztl(200,1); //顺时逐个同步亮
- nztm(200,1);
- nztl(200,1);
- sztm(200,1); //顺时逐个同步灭
- }
- djs(300,10); //对角闪
- nzdgl(300,10); //逆时逐段一个点亮
- jgs(300,10); //间隔闪
- for(i=0;i<3;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- /*
- for(i=0;i<5;i++)
- {
- zgxh1(100,1);
- sszgm(100,1);
- }
- */
- nzdl(200,3); //逆时逐段亮
- jgs(50,100); //间隔闪
- /*/////////////////////////////////////////////////////
- P0=P1=P2=P3=0xff;
- for (i=0;i<8;i++)
- {
- P0=table1[i];
- delay(200);
- }
- for (i=0;i<8;i++)
- {
- P1=table[i];
- delay(200);
- }
- for(i=0;i<3;i++)
- {
- P0=P1=0x00;delay(200);
- P0=P1=0xff;delay(200);
- }
- for (i=0;i<8;i++)
- {
- P2=table1[i];
- delay(200);
- }
- for (i=0;i<8;i++)
- {
- P3=table1[i];
- delay(200);
- }
- for(i=0;i<3;i++)
- {
- P2=P3=0x00;delay(200);
- P2=P3=0xff;delay(200);
- }
- *///////////////////////////////////////////////////
-
- nzdgl(50,40); //逆时逐段一个点亮
- for(i=0;i<4;i++)
- {
- zg(100,1);qs(100,10);
- lbzgm(100,1);
- }
- // djs(50,100); //对角闪
-
- for(i=0;i<3;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- djs(1000,10);
- for(i=0;i<10;i++)
- {
- hwzjl(200,1); //横往中间亮
- hwzjm(200,1); //横往中间灭
- }
- djs(300,10); //对角闪
- /* for(i=0;i<10;i++)
- {
- swzjl(200,1); //竖往中间亮
- swzjm(200,1); //竖往中间灭
- }
- */
- for(i=0;i<5;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- djs(100,20); //对角闪
- zg(300,1);
- lbzgm(300,1);
- /*
- for(i=0;i<5;i++)
- {
- zgxh1(100,1);
- sszgm(100,1);
- }
- */
- for(i=0;i<5;i++)
- {
- sztl(200,1); //顺时逐个同步亮
- nztm(200,1);
- nztl(200,1);
- sztm(200,1); //顺时逐个同步灭
- }
- djs(500,20); //对角闪
- djs(100,30); //对角闪
- djs(50,50); //对角闪
- // djs(10,100); //对角闪
- delay(1000);
- }
-
- }
- void delay(uint t)
- {
- uint x,y;
- for (x=t;x>0;x--)
- {
- for (y=120;y>0;y--);
- }
- }
复制代码
|
|