文章目录概要使用流程程序设计小结概要主控芯片为AT89C51锁存器74HC573控制数码管点亮。注免费源码链接评论区使用流程开启仿真按下按键5显示时间按键5可选择修改时间模式增减闹钟模式。按键123为修改时间闹钟定时精度为分钟。程序设计#includeregx52.h#includeBUZZER.h#includeKey.h#includeDelay.hvoid_yuanze();void_shu_ma_guan();//自定义时间初始量#defineS13#defineF57#defineM58#defineN2//闹钟响铃时长sbit duanP2^0;//段选sbit weiP2^1;//位选sbit K1P2^3;//按键1 小时自增sbit K2P2^4;//按键2 分钟自增sbit K3P2^5;//按键3 秒自增sbit K4P2^6;//按键4 时间暂停sbit BUZZERP2^7;sbit K5P3^2;//按键5显示 闹钟/时间//段选的断码数码管显示的数字 0 1 2 3 4 5 6 7 8 9unsignedduan_[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedgong_neng[]{0xff,0xfe,0xfd,0xfb};unsignedintmiaoM,fenF,shiS,Keynum;unsignedinta0,x,y;//闹钟提示音voidnao_z(){if(shixfenymiaoN){BUZZER1;BUZZER0;}elseBUZZER1;}//按键控制 自增函数voidyuanze(){KeynumKey();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum){case3:miao;Keynum0;if(miao60)miao0;break;case2:fen;Keynum0;if(fen60)fen0;break;case1:shi;Keynum0;if(shi24)shi0;break;case4:Keynum0;TR0~TR0;break;//按键K4停止定时器,启动定时器}}//按键控制自减函数voidyuanze1(){KeynumKey();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum){case3:miao--;Keynum0;if(miao0)miao59;break;case2:fen--;Keynum0;if(fen0)fen59;break;case1:shi--;Keynum0;if(shi0)shi23;break;case4:TR0~TR0;break;//按键K4停止定时器,启动定时器}}unsignedintshi_S,fen_F-3,miao_,Keynum_;//数码管显示。voidshu_ma_guan(){//位选读入数据/第一个数码管/锁存数据 /段选读入数据/小时的十位/锁存数据/防止篡位 /消影wei1;P00xfe;wei0;duan1;if(a3)P0duan_[shi_/10];elseP0duan_[shi/10];duan0;Delay(1);P00xff;//小时的个位wei1;P00xfd;wei0;duan1;if(a3)P0duan_[shi_%10];elseP0duan_[shi%10];duan0;Delay(1);P00xff;//分隔符wei1;P00xfb;wei0;duan1;P00x40;duan0;Delay(1);P00xff;//分的十位wei1;P00xf7;wei0;duan1;if(a3)P0duan_[fen_/10];elseP0duan_[fen/10];duan0;Delay(1);P00xff;//分的个位wei1;P00xef;wei0;duan1;if(a3)P0duan_[fen_%10];elseP0duan_[fen%10];duan0;Delay(1);P00xff;//分隔符wei1;P00xdf;wei0;duan1;P00x40;duan0;Delay(1);P00xff;//秒的十位wei1;P00xbf;wei0;duan1;if(a3)P0duan_[miao_/10];elseP0duan_[miao/10];duan0;Delay(1);P00xff;//秒的个位wei1;P00x7f;wei0;duan1;if(a3)P0duan_[miao_%10];elseP0duan_[miao%10];duan0;Delay(1);P00xff;}voidmain(){TMOD0x01;//选择定时器工作模式T0 0000 0001TH0(65535-50000)/256;//高位寄存器 TH015535/256;//65535-5000050000us50msTL0(65535-50000)%256;//低位寄存器 TL015535%256;//中断系统EA1;//总中断开关ET01;//中断允许控制位 计数器T0溢出中断允许控制位TF00;//中断请求位//外部中断EX01;IT01;while(1){nao_z();if(a1){yuanze();shu_ma_guan();}//按键控制自增模式if(a2){yuanze1();shu_ma_guan();}//按键控制自减函数if(a3){_yuanze();shu_ma_guan();}//按键闹钟定时模式}}//中断服务子程序 定时器0voidTimer1_Routine()interrupt1{staticunsignedintn;//静态储存//进行中断重新赋值下次运行也为1msTR01;TH0(65535-50000)/256;//高位寄存器TL0(65535-50000)%256;//低位寄存器n;if(n20)//每隔一秒运行{n0;miao;//秒自增if(miao60)//秒为60秒清零分自增1{miao0;fen;if(fen60)//分为60分清零小时自增1{fen0;shi;Buzzer_Time(100);//整点提醒蜂鸣器工作if(shi24)//小时为24时小时清零{shi0;}}}}}//中断服务程序 外部中断0voidInit0_Routine()interrupt0{a;if(a4)a1;P1gong_neng[a];}//unsigned int shi_S,fen_F-3,miao_,Keynum_;//按键控制闹钟 自增函数void_yuanze(){Keynum_Key();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum_){case2:fen_;Keynum_0;if(fen_60)fen_0;break;case1:shi_;Keynum_0;if(shi_24)shi_0;break;}xshi_;yfen_;}小结本章节就到此结束了需要下载资源的话点击这里AT89C51数字时钟后期还会分享相关学习可以关注一下博主让我们一起学习成长。
AT89C51数字电子时钟和proteus仿真(74HC573)
发布时间:2026/5/27 10:27:31
文章目录概要使用流程程序设计小结概要主控芯片为AT89C51锁存器74HC573控制数码管点亮。注免费源码链接评论区使用流程开启仿真按下按键5显示时间按键5可选择修改时间模式增减闹钟模式。按键123为修改时间闹钟定时精度为分钟。程序设计#includeregx52.h#includeBUZZER.h#includeKey.h#includeDelay.hvoid_yuanze();void_shu_ma_guan();//自定义时间初始量#defineS13#defineF57#defineM58#defineN2//闹钟响铃时长sbit duanP2^0;//段选sbit weiP2^1;//位选sbit K1P2^3;//按键1 小时自增sbit K2P2^4;//按键2 分钟自增sbit K3P2^5;//按键3 秒自增sbit K4P2^6;//按键4 时间暂停sbit BUZZERP2^7;sbit K5P3^2;//按键5显示 闹钟/时间//段选的断码数码管显示的数字 0 1 2 3 4 5 6 7 8 9unsignedduan_[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedgong_neng[]{0xff,0xfe,0xfd,0xfb};unsignedintmiaoM,fenF,shiS,Keynum;unsignedinta0,x,y;//闹钟提示音voidnao_z(){if(shixfenymiaoN){BUZZER1;BUZZER0;}elseBUZZER1;}//按键控制 自增函数voidyuanze(){KeynumKey();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum){case3:miao;Keynum0;if(miao60)miao0;break;case2:fen;Keynum0;if(fen60)fen0;break;case1:shi;Keynum0;if(shi24)shi0;break;case4:Keynum0;TR0~TR0;break;//按键K4停止定时器,启动定时器}}//按键控制自减函数voidyuanze1(){KeynumKey();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum){case3:miao--;Keynum0;if(miao0)miao59;break;case2:fen--;Keynum0;if(fen0)fen59;break;case1:shi--;Keynum0;if(shi0)shi23;break;case4:TR0~TR0;break;//按键K4停止定时器,启动定时器}}unsignedintshi_S,fen_F-3,miao_,Keynum_;//数码管显示。voidshu_ma_guan(){//位选读入数据/第一个数码管/锁存数据 /段选读入数据/小时的十位/锁存数据/防止篡位 /消影wei1;P00xfe;wei0;duan1;if(a3)P0duan_[shi_/10];elseP0duan_[shi/10];duan0;Delay(1);P00xff;//小时的个位wei1;P00xfd;wei0;duan1;if(a3)P0duan_[shi_%10];elseP0duan_[shi%10];duan0;Delay(1);P00xff;//分隔符wei1;P00xfb;wei0;duan1;P00x40;duan0;Delay(1);P00xff;//分的十位wei1;P00xf7;wei0;duan1;if(a3)P0duan_[fen_/10];elseP0duan_[fen/10];duan0;Delay(1);P00xff;//分的个位wei1;P00xef;wei0;duan1;if(a3)P0duan_[fen_%10];elseP0duan_[fen%10];duan0;Delay(1);P00xff;//分隔符wei1;P00xdf;wei0;duan1;P00x40;duan0;Delay(1);P00xff;//秒的十位wei1;P00xbf;wei0;duan1;if(a3)P0duan_[miao_/10];elseP0duan_[miao/10];duan0;Delay(1);P00xff;//秒的个位wei1;P00x7f;wei0;duan1;if(a3)P0duan_[miao_%10];elseP0duan_[miao%10];duan0;Delay(1);P00xff;}voidmain(){TMOD0x01;//选择定时器工作模式T0 0000 0001TH0(65535-50000)/256;//高位寄存器 TH015535/256;//65535-5000050000us50msTL0(65535-50000)%256;//低位寄存器 TL015535%256;//中断系统EA1;//总中断开关ET01;//中断允许控制位 计数器T0溢出中断允许控制位TF00;//中断请求位//外部中断EX01;IT01;while(1){nao_z();if(a1){yuanze();shu_ma_guan();}//按键控制自增模式if(a2){yuanze1();shu_ma_guan();}//按键控制自减函数if(a3){_yuanze();shu_ma_guan();}//按键闹钟定时模式}}//中断服务子程序 定时器0voidTimer1_Routine()interrupt1{staticunsignedintn;//静态储存//进行中断重新赋值下次运行也为1msTR01;TH0(65535-50000)/256;//高位寄存器TL0(65535-50000)%256;//低位寄存器n;if(n20)//每隔一秒运行{n0;miao;//秒自增if(miao60)//秒为60秒清零分自增1{miao0;fen;if(fen60)//分为60分清零小时自增1{fen0;shi;Buzzer_Time(100);//整点提醒蜂鸣器工作if(shi24)//小时为24时小时清零{shi0;}}}}}//中断服务程序 外部中断0voidInit0_Routine()interrupt0{a;if(a4)a1;P1gong_neng[a];}//unsigned int shi_S,fen_F-3,miao_,Keynum_;//按键控制闹钟 自增函数void_yuanze(){Keynum_Key();//接引按键扫描模块“Key.c”函数的返回值Keynumber//通过分支语句对不同按键对 秒K1 分K2 时K3 启动计时器K1 关闭计时器K4 实行调节switch(Keynum_){case2:fen_;Keynum_0;if(fen_60)fen_0;break;case1:shi_;Keynum_0;if(shi_24)shi_0;break;}xshi_;yfen_;}小结本章节就到此结束了需要下载资源的话点击这里AT89C51数字时钟后期还会分享相关学习可以关注一下博主让我们一起学习成长。