《基于51单片机的数码管时钟(带闹钟调时秒表)15页》由会员分享,可在线阅读,更多相关《基于51单片机的数码管时钟(带闹钟调时秒表)15页(15页珍藏版)》请在金锄头文库上搜索。
1、/* * * * * * * * * * * *基于51单片机的数码管时钟程序 * * * * * * * * * * * * * */#include#define uint unsigned int #define uchar unsigned charsbit dula=P26;/申明u1锁存器的锁存端sbit wela=P27;/申明u2锁存器的锁存端sbit key1=P30; /功能键sbit key2=P31;/增大键sbit key3=P32;/减小键sbit key4=P33;/秒表查看键sbit beep=P23;/蜂鸣端uchar num,num1,num2,numm;u
2、char numf,num,nums,num;uchar s,s1,f,f1,m,m1;uchar ns,ns1,nf,nf1;uchar numns,numnf;uchar dingshi;void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1);void display1(uchar nf,uchar nf1,uchar ns,uchar ns1);void key();void key1();void alram();void di();void delayms(xms);void T0_time() interrup
3、t 1;void miaobiao();uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x77,0x7c,0x39,0x5e,0x79,0x71;/*主函数void main()*/int main() TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;EA=1;ET0=1;TR0=1;nums=12;numf=0;num2=0;num=0;while(1) if(dingshi=0) keyscan(); display(m,m1,f,f1,s,s1); alarm(); else mi
4、aobiao(); keyscan1(); display1(nf,nf1,ns,ns1); return 0;/*蜂鸣器函数 di()*/void di() beep=0; delayms(100); beep=1;/*按键调时函数key()*/void keyscan() if(key1=0) delayms(10);if(key1=0) nums+;if(nums=24);nums=0;while(!key1);di();display(m,m1,f,f1,s,s1); if(key2=0) delayms(10);if(key2=0) numf+;if(numf=24);numf=0;
5、while(!key2);di();display(m,m1,f,f1,s,s1); if(key3=0) delayms(10);if(key3=0)dingshi=dingshi; while(!key1);di();display(m,m1,f,f1,s,s1); /*按键设定闹钟函数keyscan1();*/void keyscan1() if(key1=0) delayms(10);if(key1=0) numns+;if(numns=24);numns=0;while(!key1);di();display1(nf,nf1,ns,ns1); if(key2=0) delayms(1
6、0);if(key2=0) numnf+;if(numnf=24);numnf=0;while(!key2);di();display1(nf,nf1,ns,ns1); if(key3=0) delayms(10);if(key3=0)dingshi=0; while(!key1);di();display1(nf,nf1,ns,ns1); /*闹钟函数alram()*/void alram() if(nums=numns)&(numnf=numf) beep=0; /*秒表函数miaobiao()*/void miaobiao() if(key4=0) delayms(100);if(key
7、4=0) while(!key4); di(); displaym(uchar m,uchar m1); /*正常显示函数display()*/void display(uchar m,uchar m1,ucharf,uchar f1,uchar s,uchar s1) dula=1;P0=tablem1/秒位第1位dula=0;PO=0xff;/ 送入位选信号前关闭所有显示,防止打开位选锁存时wela=1;P0=0xef;wela=0;delayms(10);dula=1;P0=tablem; /秒第2位dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delayms
8、(100)dula=1;P0=tablef1; /分第1位 dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delayms(100)dula=1;P0=tablef; /分第2位 dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delayms(10) dula=1;P0=tables1; /时第1位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delayms(100) dula=1;P0=tables; /时第2位 dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(10)/* 调时闹钟显示函数display1()*/void display1(uchar nf,uchar nf1,uchar ns,uchar ns1) nf1=numnf/10; nf=numnf%10; ns1=nums/10; ns=nums%10;