单片机LED点阵流水灯的制作 附视频(2)
时间:2014-06-08 19:07 来源:未知 作者:admin 点击:次
再将那10路光源也就是显示面板连接至驱动电路板:
软件设计: 对于此作品,软件上除了实现流水灯的功能就没有其他技巧,但为了尽量使彩灯好看一些,不得不挖空心思想一些新花样。既便如此,一个51芯片也绰绰有余。 /*************************************************** 程序名称:单片机流水灯 简要说明:P0口、P2.0、P2.1输出10路彩灯信号 编 写:JiangX.net ***************************************************/ #include<AT89X52.h> #define uchar unsigned char #define uint unsigned int sbit lie1=P0^6; sbit lie2=P0^5; sbit lie3=P0^4; sbit lie4=P0^3; sbit lie5=P0^2; sbit lie6=P0^1; /*****(n)ms延时子程序*****/ void delayms(uint n) { while(n--) { uchar i; for(i=0;i<125;i++); } } /*****开机画面*****/ void kaiji(void) { P0=P2=0xff; delayms(2000); P0=P2=0x00; delayms(200); P0=P2=0xff; delayms(200); P0=P2=0x00; delayms(200); P0=P2=0xff; delayms(200); P0=P2=0x00; delayms(200); P0=P2=0xff; delayms(200); P0=P2=0x00; delayms(200); P0=P2=0xff; delayms(200); P0=P2=0x00; delayms(200); P0=P2=0xff; delayms(200); P0=P2=0x00; delayms(200); } /*****流水显示*****/ void liushui1(void) { uchar temp0,i; temp0=0x01; for(i=0;i<7;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui2(void) { uchar temp0,i; temp0=0x03; for(i=0;i<6;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui3(void) { uchar temp0,i; temp0=0x07; for(i=0;i<5;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui4(void) { uchar temp0,i; temp0=0x0f; for(i=0;i<4;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui5(void) { uchar temp0,i; temp0=0x1f; for(i=0;i<3;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui6(void) { uchar temp0,i; temp0=0x3f; for(i=0;i<2;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui7(void) { uchar temp0,i; temp0=0x7f; for(i=0;i<1;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui8(void) { uchar temp0,i; temp0=0x05; for(i=0;i<5;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui9(void) { uchar temp0,i; temp0=0x15; for(i=0;i<3;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void liushui10(void) { uchar temp0,i; temp0=0x55; for(i=0;i<1;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } /*****闪烁1*****/ void shanshuo1(void) { uchar i; for(i=0;i<5;i++) { P2=0xff; P0=0x80; delayms(200); P0=0x7f; P2=0x00; delayms(200); } delayms(500); P0=P2=0x00; delayms(200); } /*****跑马显示*****/ void paoma(uchar sudu) { uchar i,j; uchar temp1=0x01; uchar temp2=0x40; for(i=0;i<6;i++) { P0=temp1; delayms(sudu); temp1=temp1*2; } for(j=0;j<6;j++) { P0=temp2; delayms(sudu); temp2=temp2/2; } } /*****闪烁2*****/ void shanshuo2(void) { uchar i; for(i=0;i<7;i++) { P2=0xff; P0=0x80; delayms(200); P2=0x00; P0=0x00; delayms(200); } delayms(500); } /*****堆积显示子程序*****/ void duiji1(void) { uchar temp0=0x01,i; for(i=0;i<7;i++) { P0=temp0; delayms(200); temp0=temp0*2; } } void duiji2(void) { uchar temp0=0x01,i; for(i=0;i<6;i++) { P0=temp0; lie1=1; delayms(200); temp0=temp0*2; } } void duiji3(void) { uchar temp0=0x01,i; for(i=0;i<5;i++) { P0=temp0; lie1=1; lie2=1; delayms(200); temp0=temp0*2; } } void duiji4(void) { uchar temp0=0x01,i; for(i=0;i<4;i++) { P0=temp0; lie1=1; lie2=1; lie3=1; delayms(200); temp0=temp0*2; } } void duiji5(void) { uchar temp0=0x01,i; for(i=0;i<3;i++) { P0=temp0; lie1=1; lie2=1; lie3=1; lie4=1; delayms(200); temp0=temp0*2; } } void duiji6(void) { uchar temp0=0x01,i; for(i=0;i<2;i++) { P0=temp0; lie1=1; lie2=1; lie3=1; lie4=1; lie5=1; delayms(200); temp0=temp0*2; } } void duiji7(void) { uchar temp0=0x01,i; for(i=0;i<1;i++) { P0=temp0; lie1=1; lie2=1; lie3=1; lie4=1; lie5=1; lie6=1; delayms(200); temp0=temp0*2; } } /*****闪烁3*****/ void shanshuo3(void) { uchar i; for(i=0;i<7;i++) { P0=0x55; delayms(200); P0=0x7f; delayms(200); } delayms(500); } /*****主程序*****/ void main(void) { P0=P2=0x00; while(1) { kaiji(); liushui1(); liushui2(); liushui3(); liushui4(); liushui5(); liushui6(); liushui7(); delayms(500); shanshuo1(); paoma(200); paoma(150); paoma(100); paoma(80); paoma(50); paoma(40); paoma(40); paoma(30); paoma(30); paoma(30); paoma(30); paoma(20); paoma(20); paoma(20); paoma(20); paoma(20); paoma(20); P0=0x41; delayms(1000); shanshuo2(); duiji1(); duiji2(); duiji3(); duiji4(); duiji5(); duiji6(); duiji7(); delayms(500); liushui8(); liushui8(); liushui8(); liushui9(); liushui9(); liushui9(); liushui10(); liushui10(); liushui10(); shanshuo3(); } } (责任编辑:admin) |
- 上一篇:51单片机最小系统的制作
- 下一篇:PIC16F628单片机频率计数器的制作