数字时钟程序/**************************************************程序名称:数字时钟程序全局变量:tt,shi,fen,miao等参数说明:无返回说明:无版本:1.0功能说明:通过数码实现时钟的显示,通过键盘实现时间的调整其中k1是开始调整,k2是增加,k3是减小,k5是实现定时屏幕的切换,k4是定时设置的开始。
带闹铃功能。
作者邮箱:****************(欢迎交流)**************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^3;sbit dula=P2^6;sbit wela=P2^7;sbit k1=P3^0;sbit k2=P3^1;sbit k3=P3^2;sbit k4=P3^3;sbit k5=P3^4;sbit rd=P3^7;uchartt,shi_s,shi_g,shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g,fen_s,fen_g,miao_s,miao_g,k1num,k 4num,flag;char shi,fen,miao=20,shi1,fen1,miao1;/*********************************函数名称:延时程序设计全局变量:无参数说明:z传递给内部,是实现75*z条空指令延迟返回说明:无版本:1.0功能说明:约Z*75us延时程序设计作者邮箱:****************(欢迎交流)*********************************/void delay(uint z){uchar x;uint y;for(x=z;x>0;x--)for(y=75;y>0;y--);}/********八段数码管编码**********/uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*********************************函数名称:初始化函数全局变量:无参数说明:无返回说明:无版本:1.0功能说明:定时器装初值,开总中断,定时中断,并写定时中断函数作者邮箱:****************(欢迎交流)*********************************/void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==20){tt=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}}}}}/*********************************函数名称:6个数码管显示函数全局变量:shi fen miao 的个十位分离参数说明:将个十位的分离分别传递到各个数码管中并显示返回说明:无版本:1.0功能说明:实现时钟的数码管显示,动态扫描。
作者邮箱:****************(欢迎交流)*********************************/void display(uchar shi_s,uchar shi_g,uchar fen_s,uchar fen_g,uchar miao_s,uchar miao_g) {P0=0xfe;wela=1;wela=0;dula=1;P0=table[shi_s];dula=0;delay(2);wela=1;P0=0xfd;wela=0;dula=1;P0=table[shi_g]+0x80;dula=0;delay(2);wela=1;P0=0xfb;wela=0;dula=1;P0=table[fen_s];dula=0;delay(2);wela=1;P0=0xf7;wela=0;dula=1;P0=table[fen_g]+0x80;dula=0;delay(2);wela=1;P0=0xef;wela=0;dula=1;P0=table[miao_s];dula=0;delay(2);wela=1;P0=0xdf;wela=0;dula=1;P0=table[miao_g];dula=0;delay(2);}/*********************************函数名称:键盘控制时钟调节函数全局变量:已说明参数说明:已声明了返回说明:无版本:1.0功能说明:通过键盘的选择,和数码管进行结合并显示所调节的时间及定时的时间作者邮箱:****************(欢迎交流)*********************************/void keyscan(){rd=0;if(k5==0){delay(5);if(k5==0){flag++;while(!k5);while(k5&&flag%2==1){shi1_s=shi1/10;shi1_g=shi1%10;fen1_s=fen1/10;fen1_g=fen1%10;miao1_s=miao1/10;miao1_g=miao1%10;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);if(k4==0){delay(5);if(k4==0){k4num++;while(!k4);if(k4num==4)k4num=0;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}}if(k4num!=0){if(k2==0){delay(5);if(k2==0){while(!k2);if(k4num==1){miao1++;if(miao1==60)miao1=0;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}if(k4num==2){fen1++;if(fen1==60)fen1=0;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}if(k4num==3){shi1++;if(shi1==60)shi1=0;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}}}if(k3==0){delay(5);if(k3==0){while(!k3);if(k4num==1){miao1--;if(miao1==-1)miao1=59;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}if(k4num==2){fen1--;if(fen1==-1)fen1=59;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}if(k4num==3){shi1--;if(shi1==-1)shi1=23;display(shi1_s,shi1_g,fen1_s,fen1_g,miao1_s,miao1_g);}}}}}}}if(k1==0){delay(5);if(k1==0){ k1num++;while(!k1);if(k1num==1){TR0=0;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}}if(k1num==4){k1num=0;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);TR0=1;}}if(k1num!=0){if(k2==0){delay(5);if(k2==0){while(!k2);if(k1num==1){miao++;if(miao==60)miao=0;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}if(k1num==2){fen++;if(fen==60)fen=0;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}if(k1num==3){shi++;if(shi==24)shi=0;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}}}if(k3==0){delay(5);if(k3==0){while(!k3);if(k1num==1){miao--;if(miao==-1)miao=59;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}if(k1num==2){fen--;if(fen==-1)fen=59;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}if(k1num==3){shi--;if(shi==-1)shi=23;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);}}}}}/*********************************函数名称:数字时钟程序主程序全局变量:在程序开头已声明了参数说明:已说明了返回说明:无版本:1.0功能说明:程序的入口,且停留在函数内部作者邮箱:****************(欢迎交流)*********************************/void main(){init();while(1){shi_s=shi/10;shi_g=shi%10;fen_s=fen/10;fen_g=fen%10;miao_s=miao/10;miao_g=miao%10;display(shi_s,shi_g,fen_s,fen_g,miao_s,miao_g);keyscan();if(shi1==shi&&fen1==fen&&miao1==miao){beep=0;}}}。