还记得刚来大一那会对电子产品研究特感兴趣,后来就加入了学院里面的大学生科技协会的课题部,紧接着改变了我的大学生活,从此我就开始了对这方面的研究................当然一开始我们学的是用51来写流水灯,还没上手的C语言的我们随之就先自己焊接了自己的第一块板子流水灯
后面又加进去了代码,虽然过程中遇到了许多的问题,比如虚焊,连错,但是后面还是成功的点亮了我的第一块单片机流水灯..............................
- 让我认识到了好多,最小51系统板,还有各引脚的功能,来分享给你们的流水灯吧,从一灯大师开始学单片机
心形花样LED流水灯(带程序)
使用89C52做的,原理图如下:
总共有32个LED灯,4个I/O全部用上了。
我在这里不加有LED保护电阻,用200的也可以
晶振用12M的或11.0592M也行,C1,C2用30PF。
PCB图如下:
作品效果录像:http://www.tudou.com/programs/view/z0bjKg_3Cd4/
程序是用C语言写的;
如下:
1 #include<reg52.h> 2 #include <intrins.h> 3 #define uint unsigned int 4 #define uchar unsigned char 5 uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7 6 uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0 7 uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7 8 uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0 9 10 /***********************************************************/ 11 void delay(uint t); //延时 12 void zg(uint t,uchar a);//两边逐个亮 13 void qs(uint t,uchar a);//全部闪烁 14 void zgxh(uint t,uchar a); // 逆时针逐个点亮 15 //void zgxh1(uint t,uchar a); // 顺时针逐个点亮 16 void djs(uint t,uchar a); //对角闪 17 void lbzgm(uint t,uchar a);//两边逐个灭 18 //void sszgm(uint t,uchar a); // 顺时针逐个灭 19 void nszgm(uint t,uchar a); // 逆时针逐个灭 20 void sztl(uint t,uchar a);//顺时逐个同步亮 21 void nztl(uint t,uchar a);//逆时逐个同步亮 22 void sztm(uint t,uchar a);//顺时逐个同步灭 23 void nztm(uint t,uchar a);//逆时逐个同步灭 24 void hwzjl(uint t,uchar a); //横往中间亮 25 void hwzjm(uint t,uchar a); //横往中间灭 26 //void swzjl(uint t,uchar a); //竖往中间亮 27 //void swzjm(uint t,uchar a); //竖往中间灭 28 void nzdl(uint t,uchar a); //逆时逐段亮 29 void nzdgl(uint t,uchar a); //逆时逐段一个点亮 30 void jgs(uint t,uchar a); //间隔闪 31 /**********************************************************/
下面是子函数代码部分
-
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++) {