创作原由:
大多电子爱好者朋友用的40Pin的51单片机做心形流水灯,需要的led量多,焊接时间长,所以本人想着用20Pin的STC11F02E做一个迷你版的心形流水灯。所需led数量少,易焊接,布线。下面给大家介绍这个小制作。有不足的地方可以提出,还望大神指点。(不喜勿喷)
从图中可以看出所需元器件:
1.STC11F02E单片机一片
2.LED灯14个,颜色随意。
3.1K电阻14个(上拉电阻,单片机IO口输出很小)
4.电位器(不要也可以,加了调节电压能调节灯亮度,但是电压过小,单片机无法正常工作)
5.USB母口(也可以用DC插座,不过不好焊)
6.自锁开关
7.USB转TTL (PL2302或者CH340)
8.洞洞板7×9cm
9.面包板(用来测试灯泡好坏,加了上拉之后电阻调整)
10.杜邦线(图中没有)
11.漆包线(后面飞线,也可以用杜邦线飞,就是太粗)
大概就这么点元器件,其他焊接工具就不需要说了吧。
STC11F02E引脚图:
LED和引脚对应关系:
使用P1.0-1.7和P3.0-3.5一共14个引脚。P1.0对应上面中间的LED,其他一次逆时针焊接。也就是下面中间为P1.7。下面中间右边一个为P3.0,继续逆时针。焊接最外圈为GND,VCC在里面。
/**********************/ /******心形流水灯******/ /**********************/ #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table1[]={ 0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80}; uchar code table2[]={ 0x01,0x02,0x04,0x08, 0x10,0x20}; uchar code table3[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table4[]={ 0x00,0x01,0x03,0x07, 0x0f,0x1f,0x3f}; void loudou_0(); //左右流水递增 void loudou_1(); //左右流水 void loudou_2(); //左右流水 void shanshuo(); //加减速闪烁 void quanliang(); //全量 void banshan(); //左右半闪 void liushui_vleft(); //逆时针加速转 void liushui_vright(); //顺时针加速转 void liushui_left(); //逆时针 void liushui_right(); //顺时针 void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void main() { while(1) { loudou_0(); loudou_1(); loudou_2(); loudou_0(); banshan(); quanliang(); shanshuo(); liushui_right(); liushui_vright(); liushui_left(); liushui_vleft(); } } /**********************/ /*半闪*/ void banshan() { uint x; for(x=0;x<=3;x++) { P1=0xff; P3=0x00; delay(1000); P1=0x81; P3=0x3f; delay(1000); } } /**********************/ /**********************/ /*流水左右分往下*/ void loudou_0() { uint i,j,z; for(z=1;z<=8;z++) { i=1; for(j=6;j>=z;j--) { P1=(table1[i])|(table3[z-1]); P3=(table2[j-1])|(table4[z-1]); delay(800); i++; } } } /**********************/ /**********************/ /*流水左右分往下*/ void loudou_2() { uint i,j,z; for(z=0;z<=1;z++) { i=1; P1=0x01; delay(600); for(j=6;j>=1;j--) { P1=table1[i]; P3=table2[j-1]; delay(600); i++; } P3=0x00; P1=0x00; P1=0x80; delay(600); } } /**********************/ /**********************/ /*流水左右分往下*/ void loudou_1() { uint i,j,z; for(z=0;z<=2;z++) { i=1; P1=0xfe; delay(600); for(j=6;j>=1;j--) { P1=~table1[i]; P3=~table2[j-1]; delay(600); i++; } P3=0xff; P1=0xff; P1=0x7f; delay(600); } } /**********************/ /**********************/ /*流水右转*/ void liushui_right() { uint i,j; // for(x=0;x<=1;x++) // { for(j=6;j>=1;j--) { P3=~table2[j-1]; P1=0xff; delay(800); } P3=0x00; for(i=8;i>=1;i--) { P1=~table1[i-1]; P3=0xff; delay(800); } P1=0x00; // } } /**********************/ /**********************/ /*流水左转*/ void liushui_left() { uint i,j; // for(x=0;x<=1;x++) // { for(i=0;i<=7;i++) { P1=~table1[i]; P3=0xff; delay(800); } P1=0x00; for(j=0;j<=5;j++) { P3=~table2[j]; P1=0xff; delay(800); } P3=0x00; // } } /**********************/ /**********************/ /*流水加速*/ void liushui_vleft() { uint i,j,y; // for(x=0;x<=1;x++) // { y=900; for(i=0;i<=7;i++) { P1=~table1[i]; P3=0xff; delay(y); y=y-100; } P1=0x00; for(j=0;j<=5;j++) { P3=~table2[j]; P1=0xff; delay(y); y=y+150; } P3=0x00; // } } /**********************/ /**********************/ /*流水加速*/ void liushui_vright() { uint i,j,y; // for(x=0;x<=1;x++) // { y=900; for(j=6;j>=1;j--) { P3=~table2[j-1]; P1=0xff; delay(y); y=y-100; } P3=0x00; for(i=8;i>=1;i--) { P1=~table1[i-1]; P3=0xff; delay(y); y=y+150; } P1=0x00; // } } /**********************/ void quanliang() { P1=0xff; P3=0xff; delay(1000); } /**********************/ void shanshuo() { uint i,j=1000; uchar aa=0xff; for(i=20;i>0;i--) { P1=aa; P3=aa; delay(j); j=j-50; aa=~aa; } for(i=20;i>0;i--) { P1=aa; P3=aa; delay(j); j=j+50; aa=~aa; } } /**********************/
有什么问题,评论区解答。