数字电子时钟程序与仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电子时钟程序
【闹铃(持续5s),整点报时(几点报几下,每两下之间隔间2s,每声持续2s)】
程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
//此表为LED 的字模, 共阴数码管0-9 -
uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制
/*定义并初始化变量*/
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit buzz=P1^3;
uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1
uchar seconde1=0;
uchar bjcs;
uchar minite1=0;
uchar hour1=7;
uchar seconde2=0;
uchar minite2=0;
uchar hour2=8;
uchar temp1=0;
uchar temp2=0;
uchar count1,flag,temp;
/*函数声明*/
void delay(uint z); //延时子程序
void time_pro( ); //时间处理子程序
void display(uchar hour,uchar minite,uchar seconde); //显示子程序
void keyscan( ); //键盘扫描子程序
void zhengdian();
void dinshi();
void delay(uint z)
{
uint x,y;
for(x=0;x for(y=0;y<110;y++); } void time_pro(void) /*时间处理子程序*/ { if(seconde1==60) { seconde1=0; minite1++; if(minite1==60) { minite1=0; hour1++; if(hour1==24) { hour1=0; } } } } void display(uchar hour,uchar minite,uchar seconde) /*显示子程序*/ { uchar h1,h2,m1,m2,s1,s2; s2=seconde/10; s1=seconde%10; m2=minite/10; m1=minite%10; h2=hour/10; h1=hour%10; P2=0XFE; //1111 1110 if(temp1==1) //功能选项,通过点提醒来调节相应位的时间P0=dispcode[s1]|0x80; //点提醒 else P0=dispcode[s1];//秒个位 delay(1); P2=0XFD;//1111 1101 P0=dispcode[s2];//秒十位 delay(1); P2=0XFB; //1111 1011 P0=dispcode[10];//间隔符- delay(1); P2=0XF7; //1111 0111 if(temp1==2)// P0=dispcode[m1]|0x80; else P0=dispcode[m1];//分个位 delay(1); P2=0XEF; //1110 1111 P0=dispcode[m2];//分十位 delay(1); P2=0XDF; //1101 1111 P0=dispcode[10];//间隔符- delay(1); P2=0XBF; //1011 1111 if(temp1==3) P0=dispcode[h1]|0x80;//时个位 else P0=dispcode[h1]; delay(1); P2=0X7F; //0111 1111 P0=dispcode[h2];//时十位 delay(1); } void keyscan(void) /*键盘扫描子程序*/ { if(key1==0) { delay(10); if(key1==0) { //TR0=0; temp1++; if(temp1==4) { temp1=0; TR0=1; } while(!key1) switch(temp2) { case 0:display(hour1,minite1,seconde1);break; case 1:display(hour2,minite2,seconde2);break; } } } if(key2==0) { delay(10);