资源描述:
《51单片机设置的电子闹钟(可调时间和闹钟)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#defineuintunsignedint#defineucharunsignedchar#defineLEDP0//数码管的段选#defineLIGHTP1//时分秒位的指示灯#defineWSP2//数码管的位选sbitkey1=P3^0;//时间暂停/开始sbitkey2=P3^1;//时间/闹钟设置sbitkey3=P3^2;//增加sbitkey4=P3^3;//减少sbitalarm=P3^6;//闹铃uchartab[10]={0x3f,0x06,
2、0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9uchartab_dp[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//0.-9.(带小数点)uchardata1[]={0,0,0,0,0,0};uchardata2[]={0,0,0,0,0,0};uintt,k,kk,k1,flag;uintbbh,bbm,bbs,bbh1,bbm1,bbs1;uintsec,min,hour,sec
3、1,min1,hour1;//定义秒,分,时voidinit();voiddisplay();voiddisplay_bb();voiddelay(uint);voidkeyscan();voidmain(){init();while(1){keyscan();if(k1==0
4、
5、k1==1
6、
7、k1==2
8、
9、k1==3)//显示调节时间{display();第9页}if(k1==4
10、
11、k1==5
12、
13、k1==6)//显示调节闹钟{display_bb();}if((bbh==hour)&&(bbm=
14、=min)&&data1[4]==0&&data1[5]==5)//5s报时{alarm=~alarm;delay(1);}if((bbs==sec)&&(bbm==min)&&(bbh==hour))//可调报时{alarm=~alarm;delay(1);}}}voidinit(){WS=LIGHT=flag=0;sec=min=hour=0;//将0赋给时分秒TMOD=0x01;//方式1P129(见课本)TH0=0x3c;//65536-50000=15536=0x3cb0(50ms)P1
15、28(见课本)TL0=0xb0;EA=1;//开总中断P161(见课本)TR0=1;//定时/计数器0开启ET0=1;//定时器/计数器0溢出中断启动P161(见课本)}voiddelay(unsignedintt)//延时函数{unsignedinti;while(t--)for(i=0;i<125;i++);}voiddisplay()//显示时间函数{if(TF0==1)//定时器/计数器溢出P130(见课本){TF0=0;//清中断标志位t++;第9页if(t==20)//(50ms*20
16、=1s){t=0;sec++;//秒加1if(sec==60)//秒为60,则清零,分加1{sec=0;min++;}if(min==60)//分为60,则清零,时加1{min=0;hour++;}if(hour==24)//时为24,则清零{hour=0;}}}data1[5]=sec%10;data1[4]=sec/10;data1[3]=min%10;data1[2]=min/10;data1[1]=hour%10;data1[0]=hour/10;WS=0xdf;//11011111,低电
17、平显示LED=tab[data1[5]];delay(1);WS=0xef;//11101111LED=tab[data1[4]];delay(1);WS=0xf7;//11110111LED=tab_dp[data1[3]];delay(1);WS=0xfb;//11111011LED=tab[data1[2]];delay(1);第9页WS=0xfd;//11111101LED=tab_dp[data1[1]];delay(1);WS=0xfe;//11111110LED=tab[data1[
18、0]];delay(1);}voiddisplay_bb()//显示闹钟函数{data2[5]=bbs%10;data2[4]=bbs/10;data2[3]=bbm%10;data2[2]=bbm/10;data2[1]=bbh%10;data2[0]=bbh/10;WS=0xdf;//11011111,低电平显示LED=tab[data2[5]];delay(1);WS=0xef;//11101111LED=tab[data2[4]];delay(1);WS=0xf7;//11