资源描述:
《diy制作led数码管定时器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、从构思到实体出来花了我一个月的课外时间,大家支持一下我的DIY精神吧。。。。由于只有一个数码管,只能显示0到15,所以这个定时器可以定时0到15分,0到15个小时,0到15天,0到15个星期,本来想在程序中加上定时0到15个月,但想想在实际情况中定时15个月都有一年多了,估计好少用到,就不写了。这个定时器我加上了继电器,所以可以控制220V交流电,且定时误差在几个毫秒内,还算精确吧。。。先来几张初期的原理图:下面是单片机的源程序:#include#defineuintunsignedint#defineucharunsignedcharsbitledg=P1^0;//秒闪烁(
2、一秒钟亮一秒钟灭)sbitledb=P1^1;//分闪烁(一分钟亮一分钟灭)sbitfmq=P3^3;//蜂鸣器sbitledx=P3^4;//定时星期指示灯sbitledt=P3^6;//定时天指示灯sbitledf=P3^5;//定时分钟指示灯sbitleds=P3^7;//定时小时指示灯sbitkey1=P1^6;//启动
3、暂停sbitkey2=P1^5;//调整定时分钟sbitkey3=P1^4;//调整定时小时sbitkey4=P1^3;//调整定时天sbitkey5=P1^2;//调整定时星期sbitjdq=P1^7;//继电器uinti,j,num,num1,num2,num3,
4、num4,num5,num6;ucharshi,temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,dsf,dss,dst,dsx;ucharcodeshuju[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};voiddelayms(uintxms){for(i=xms;i>0;i--)for(j=110;j>0;j--);}voiddisplay(shi){P2=shuju[shi];}voidkeyscan(){uchari;i
5、f(key1==0){delayms(10);if(key1==0){ledb=0;//把分闪烁指示灯调用来指示启动
6、暂停while(i==0&&P2!=0xC0){TR0=~TR0;//启动
7、暂停i++;}if(TR0==1){ledb=1;//把分闪烁指示灯调用来指示启动
8、暂停}else{TR0=0;}}}if(key2==0&&TR0==0){dss=0;//定时小时清零dst=0;//定时天数清零dsx=0;//定时星期清零temp1=1;//进入switch-casedelayms(10);}if(key3==0&&TR0==0){dsf=0;dst=0;dsx=0;temp2=1;
9、delayms(10);}if(key4==0&&TR0==0){dsf=0;dss=0;dsx=0;temp3=1;delayms(10);}if(key5==0&&TR0==0){dsf=0;dss=0;dst=0;temp4=1;delayms(10);}switch(temp1){case1:if(key2==0){leds=1;//关闭定时小时指示灯ledt=1;//关闭定时天指示灯ledx=1;//关闭定时星期指示灯ledf=0;//打开定时分钟指示灯ledg=1;//关闭秒闪烁ledb=1;//关闭分闪烁jdq=0;//关闭继电器dsf++;//分钟加加shi=dsf;//把分送
10、去显示if(dsf==16){shi=0;dsf=0;}while(!key2);temp1=2;temp5=1;num2=dsf;temp6=2;temp7=2;temp8=2;}break;}switch(temp2){case1:if(key3==0){ledf=1;ledt=1;ledx=1;leds=0;jdq=0;ledg=1;ledb=1;dss++;shi=dss;if(dss==16){shi=0;dss=0;}while(!key3);temp2=2;temp6=1;num4=dss;temp5=2;temp7=2;temp8=2;}break;}switch(temp3)
11、{case1:if(key4==0){ledf=1;leds=1;ledx=1;ledt=0;jdq=0;ledg=1;ledb=1;dst++;shi=dst;if(dst==16){shi=0;dst=0;}while(!key4);temp3=2;temp7=1;num5=dst;temp5=2;temp6=2;temp8=2;}break;}switch(temp4){case1:if(k