数字电子钟,很基础的,用得共阳数码管显示,四个按键,分别是开启关闭键,调时调分调秒键。和大家一起学习。
完整的代码下载:
Practice1--要求1.zip
(73.99 KB, 下载次数: 34)
- /*******************************************************************
- 程 序 名:数字电子时钟模块化程序(缓冲数组)
- 编 写 者:龙皓明
- 指导老师:王韧
- 时 间 :2016.8.12
- 功 能 :显示时分秒,设有四个功能键:启动/停止,调时,调分,调秒
-
- 使用说明:将单片机的P2口用排线连于J31即73ls573位选(P20对I11),P0口
- 连于J32即数码管段选(P00对O11),P1口连接J16(P10--P7...S1--S7)
-
- ********************************************************************/
- #include <reg52.h>
- #include "delay.h" //延时头文件
- #include "display.h" //显示函数头文件
- #include "set_find_code.h" //设置缓冲数组文件
- #include "key.h" //键扫描函数文件
- uchar find_code[8];
- bit sign=0;
- uchar i,hour,minute,second,keyzhi,c=0;
- /*****************主函数****************/
- void main()
- { hour=8; //设置小时初始值
- minute=30; //设置分钟初始值
- second=0; //设置秒钟初始值
- TMOD=0x01; //设置定时器0为工作方式1
- TH0=(65536-50000)/256; //定时50ms高8位求模
- TL0=(65536-50000)%256; //定时50ms低8位求模
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- //TR0=1;
- set_find_code(12,12,12,12,12,12,12,10);//显示系统提示符“P.”
- while(1)
- {
- display(find_code);
- keyzhi=key_scan(); //键扫函数,提取返回值(即键值)
- if(keyzhi==0x01)
- {
- sign=~sign; //取反,判定开启/暂停
- if(sign==1) //判定开启电子钟
- {
- TR0=1; //开启定时器0,电子钟运行
- display(find_code); //电子钟显示
- }
- if(sign==0) //判定暂停电子钟,进入调节模式
- {
- TR0=0; //关闭定时器0,电子钟停止运行
- keyzhi=key_scan();
- while(keyzhi!=0x01) //如果开启/暂停键没有按下
- {
- keyzhi=key_scan();//读取键值
- switch(keyzhi) //进入调时/分/秒模式
- {
- case 0x02: hour++;if(hour==24) //调时键按下并释放后时钟+1
- {
- hour=0; //调到24时时清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- case 0x04: minute++;if(minute==60)//调分键按下并释放后分钟+1
- {
- minute=0; //调到60分时清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- case 0x08: second++;if(second==60)//调秒键按下并释放后秒钟+1
- {
- second=0; //秒调到60时清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- default : display(find_code);break; //稳定显示所有数据
- }
- }
- }
- }
- }
- }
- void timer0() interrupt 1 //定时器0中断入口
- {
- TH0=(65536-50000)/256; //定时器重赋初值
- TL0=(65536-50000)%256;
- c++; //中断次数
- if(c==20)
- {
- c=0;
- second++;
- if(second==60) //计时一分钟后清零
- {
- second=0;
- minute++; //秒钟每计时一分钟,分钟自+1
- if(minute==60) //计时一小时后清零
- {
- minute=0;
- hour++; //分钟每计时一小时,时钟自+1
- if(hour==24) //24小时倒计时到
- {
- hour=0; //清零
- }
- }
- }
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- } //送显示数据
复制代码
|