无聊的时候,总要找点事情做,就有了想做个灯的想法,板子是用AD18画的,,用STC15F104W,实物PCB 下载程序 线画错了,上传的PCB文件改正优化了, 程序呢,由于水平太低, 时间有限,用了最笨的方法,写的程序有很多可以精简的,待优化,懒的搞了,运行效果还是挺好的,分享给新手。谢谢。
一个按键控制全部灯光效果,长按2秒 关灯
制作出来的实物图如下:
亮了之后
3D图
整体实体样
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
- #include <STC15F2K60S2.H>
- sbit w=P3^3;
- sbit nw=P3^4;
- sbit b=P3^2;
- sbit g=P3^1;
- sbit r=P3^0;
- sbit k=P3^5;
- void ys();
- unsigned char a,c,d,v;
- unsigned int js;
- void yss(unsigned int u);
- void main()
- {
- k=1; r=g=b=w=nw=0; a=b=c=d=0; P3M1=0X00; P3M0=0X1F;//设置P3.0-3.4口为强推模式
- EA=1; // IE 第7位 打开总中断
- // TF0=0; 清除定时器溢出标志位
- ET0=1; // IE的 第1位 打开定时器中断
- TR0=0; // TCON的4位 开启定时0
- TMOD=0X01;//设置定时器方式1,16位定时器。 tmod 是设置定时器工作方式用的定时或计数 ,高4位是定时器1寄存器
- //低4是定时器0 7 GATE,6 C/T,5 M1,4 M0 ,3 GATE,2 C/T ,1,M1 0,M0
- TH0=(65536-922)/256; //装定时器初值,现在是延时1MS的初值
- TL0=(65536-922)%256;
- // TH0 = 0x0FC;
- // TL0 = 0x66;
- while(1)
- {
- aa: if(k==0){ ys();
- if(k==0&&a==0){a=1;c++;TR0=1;if(c==12){r=0;g=0;b=0;w=0;nw=0;c=0;
-
-
-
-
-
-
-
-
- }
-
-
- switch(c)
-
- { case 0:r=0;g=0;b=0;w=0;nw=0; break;
- case 1: r=0;g=0;b=0;w=1;nw=0;break;
- case 2: r=0;g=0;b=0;w=0;nw=1;break;
- case 3: r=0;g=0;b=0;w=1;nw=1;break;
- case 4: r=1;g=0;b=0;w=0;nw=0;break;
- case 5: r=0;g=1;b=0;w=0;nw=0;break;
- case 6: r=0;g=0;b=1;w=0;nw=0; break;
- case 7: r=1;g=1;b=0;w=0;nw=0; break;
- case 8: r=1;g=0;b=1;w=0;nw=0;break;
- case 9: r=1;g=1;b=1;w=0;nw=0; break;
- case 10: r=1;g=1;b=1;w=1;nw=1 ;break;
-
- }
-
- } }
-
-
- if(c==11&&k==1){
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=1;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=1;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=1;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=1; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=1;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=1;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=1;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=0;b=0;w=0;nw=0; yss(1500); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=0;w=0;nw=0; yss(1500); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=0;nw=0; yss(1500); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=0; yss(1500); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
-
- r=0;g=0;b=0;w=0;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=1;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=1;w=1;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
- r=0;g=1;b=1;w=1;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1500); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- r=1;g=1;b=1;w=1;nw=1; yss(1000); if(k==0) {c=0; goto aa;}
- r=0;g=0;b=0;w=0;nw=0; yss(1000); if(k==0) {c=0; goto aa;}
- c=11;
-
- }
- if(a==1&&k==1) {a=0;TR0=0;js=0;v=0;}
- // r=g=b=w=nw=1;
- }
- }
- void ys()
- { unsigned char d,f;
- for(d=0;d<100;d++)
- for(f=0;f<20;f++);
- }
- void dingshi()interrupt 1// 定时器0 优先级是1
- {
-
- TH0=(65536-922)/256; //装定时器初值,现在是延时1MS的初值
- TL0=(65536-922)%256;
-
- js++; if(js==1000){js=0;v++;if(v==1){r=g=b=w=nw=0;TR0=0;v=0;c=0;}if(v==6){v=0; }
-
-
-
- }
-
- }
- void yss(unsigned int u)
- { unsigned int d,f;
- for(d=0;d<u;d++)
- for(f=0;f<150;f++);
-
- }
复制代码
所有资料51hei提供下载:
led.rar
(1.03 MB, 下载次数: 30)
850ad7c8f94eaa4bc3699e9276356e76.rar
(1.56 MB, 下载次数: 30)
|