基于51单片机的简单计时时钟

一、简介:

通过定时器的使用、按键检测及数码管的动态显示,以STC89C2RC单片机为核心控制,设计一个简单的计时时钟,这里我们使用到的是6位LED数码管,分别显示“时分秒”。显示范围从0小时0分0秒到23小时59分59秒,通过定时器来定时一秒钟,每过一秒刷新一次显示时间。这里设置了三个按键SW1,SW2,SW3,在程序中设置好小时、分钟和秒数的初值。将调时按键SW1按下后开始进入调整时间模式,通过按键SW2和SW3进行新一次的时间调整,SW2键实现时分秒数值的增加,SW3键时分秒数值的减小。

二、功能需求分析:

(1)对时间显示进行设计,显示格式为:“时”(第1,2位)“分”(第3,4位)“秒”(第5,6位)。
(2)当调整时间按键SW1被按下时自动进入调整时间模式,时钟不再刷新时间,通过按键SW2和SW3的按下从右至左依次可以进行时间更改。
(3)将时间模式分为时调整模式,分调整模式,秒调整模式,正常显示模式 

(4)按下按键SW1,在模式间切换,当切换到调整时间模式,数码管显示自动停止刷新时间,对应的时,分,秒开始以1秒的频率闪烁。

(5)通过点击按键SW2和SW3进行新一次的时间调整,SW2键实现时分秒数值的增加,SW3键时分秒数值的减小。 

三、系统开发环境、工具需求分析与选择
PROTUES软件进行仿真、keil软件、PC机。

四、主要硬件。
硬件系统是指构成微机系统的实际装置,本设计中由单片机、数码管显示、定时器计数、按键等组成。单片机芯片选择AT89C51,显示区域使用6位LED共阴极数码管。

多位数码管
即两个或两个以上单个数码管并列集中在一起形成一体的数码 管。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线 (a-dp)全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码 管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后, 通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。
五、运行效果展示:

六、软件设计:

     将 51 单片机的头文件包含进来,将共阴数码管 0-F段码数据使用数组定义好。以及定义时分秒,sec,min,hour,修改状态变量model,数码管闪烁标志变量sign。定义了一个key_scan函数。函数带一个形参 mode,该参数用来设定是否连续扫描按键,如果 mode 为 0,只能操作一次按键,只有当按键松开后才能触发下次的扫描,这样做的好处是可以防止按下一次出现多次触发的情况。当按下某个按键,会一直返回这 个按键的键值,这样做的好处是可以很方便实现连按操作。函数内的 delay_10us(1000)即为软件消抖处理,通常延时10ms即可。key_scan 函数还带有一个返回值,如果未有按键按下,返回值即为KEY UNPRESS,否则返回值即为对应按键的键值,如 KEY1 PRESS、KEY2 PRESS、 KEY3 PRESSKEY4 PRESS,这都是程序开头定义好的宏,函数内还定义了一个 static 变量 key,相当于全局变量。

       另外定义函数keyy,根据修改状态变量的值,在四个状态切换,并在被选中的时分秒状态下,利用按键SW2和SW3实现时间的修改,对时分秒进行加减,用6位数码管实现时、分、秒的更新。函数display_number,根据对修改状态变量model的判断,对数码管闪烁标志变量sign除二求余,不断改变对应的段码。实现被选中时分秒的闪烁。

       然后定义定时器0中断配置函数 time0_init,该函数配置内容就是按照使用手册所写,即选择定时器工作模式 0、工作方式 1、设置定时 1ms 初值、打开定时器计数功能和开启总中断功能。然后进入 while 循环,在循环体内,当定时时间到达即会进入定时器0中断,在中段服务函数内,重新赋初值准备下次计数,并且定义一个静态变量来累计定时 1ms 次数,当变量等于 1000 时,表示定时时间达1秒,然后清零变量以及控制 数码管闪烁标志变量sign+1。并且每秒sec加1,等于时60清零,同时min加1,等于60时清零,同时hour加1,等于24时清零。执行完成后退出中断返回主函数,当时间到达又进入中断,如此循环。利用定时器的定时功能,用6位数码管实现时、分、秒的显示。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值