基于单片机的智能数字钟系统的设计与研究

2012-12-28 13:03王洪丽
中国新技术新产品 2012年20期
关键词:数码管计时闹钟

王洪丽

(福州职业技术学院电子信息工程系,福建 福州 350108)

现在社会上各行各业和单片机相关的联系越来越紧密,单片机的应用在各个行业得到了广泛的应用。采用单片机实现数字钟的智能化能最大限度地满足了各种消费者的不同需求,为人们的日常生活提供了比旧式闹钟更多更好更实用的方便功能,具有明显的经济利益和社会效益,它必将受到消费者的普遍欢迎。我们可以通过单片机程序设计,来完成实现诸多的操作功能要求。本文就基于单片机的智能数字钟系统的设计与研究概况作一一介绍。

1 工作流程

当电源接通时,通过整流滤波稳压电路向各个电路送电,启动各电路工作。发光二极管是用来指示当前数码管显示的是何种状

态,数码管是用来显示时钟和闹钟的秒、分、时和显示脉冲周期的个十百千位和闹钟状态。通过按键S1顺序切换显示时钟和闹钟的秒、分、时和切换显示脉冲周期的个十百千位和闹钟状态,通过按键S2改变闹钟开关状态和设置时钟和闹钟的秒、分、时和脉冲周期的个十百千位的数值。

2 硬件设计与分析

2.1 数码管显示电路

本设计的数码显示电路是由两个共阳极的数码管组成。本设计的两个数码管的数据端 a,b,c,d,e,f,g,dp 各经过一个 560 的限流电阻与 AT89C51芯片 P0口的 P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7 顺序对 应连接。数码管是采用共阳极的接法,用P2.0,P2.1分别控制两个数码管亮灭,可以方便地用软件实现动态扫描显示的功能。用两个9012的三极管和两个1K的电阻做驱动和限流的作用。由于驱动和数据端都有限流保护电阻,可以防止因电流过大而击穿或烧毁三极管、数码管和AT89C51芯片。由于数码管是采用共阳极的接法,所以AT89C51芯片是用灌电流点亮和控制数码管的,对AT89C51芯片来说可以减轻芯片驱动的负担。

2.2 发光二极管控制电路

8 个发光二极管的正极直接与5V的电源连接,负极各连接一个560限流电阻与AT89C51芯片P1口的P1.0~P1.7对应连接,可以方便地对每一个发光二极管进行亮灭控制。由于是用灌电流驱动发光二极管和都带有限流保护电阻,所以可以减轻AT89C51芯片的驱动负担和因电流过大而击穿或烧毁发光二极管和AT89C51芯片的现象。每个发光二极管都可以被单独或同时电亮,可以指示多种不同的操作状态。

2.3 按键输入电路

用两个机械按键一端与AT89C51芯片P2口的P2.2,P2.3连接,一端与地连接。通过按键按下和松开可以实现低电平和高电平的输入,再与软件对端口置1和延时输入等抗干扰措施。按键输入可以完成多种不同控制操作,可以改变操作数和状态。

2.4 蜂鸣器电路

控制端与AT89C51芯片的P2口的P2.4连接,由一个9012三极管进行驱动。蜂鸣器可以操作或系统运行中,经过配合软件控制可以发出不同响声或音乐铃音,完成定时报警或错误操作报警,完成听觉指示的功能。

3 软件设计与分析

3.1 系统资源分配

(1)定时器:定时器0用作时钟定时,按方式1工作,每隔50MS溢出中断一次。定时器1用作脉冲定时,按方式2工作,每隔50uM溢出中断一次。

(2)片内RAM及标志位的分配与定义:0C_RN:R0,R1,R2,R3,R4,R5,R6,R7:寄存器0区

R0,R1:做指针使用;R3:做长延时 DELAY1 中使用;R4:用做响铃次数;R5,R6:做延时2.5MS延时DELAY中使用;R7:做长按键延时使用

1 C_RN:R3,R4,R5,R6,R7:寄存器1区R3,R4:脉冲周期个十位百千位存储单元;R5,R6:闹钟懒人模式LANREN再响延时;R7:做时钟1秒计数使用

RAM:20H.0,20H.1,20H.2:20H.0 为 闹 钟开关标志,20H.1为响铃标志;20H.2为闹钟懒人模式中间标志

30 H,31H,32H,33H:发光二极管指示目前数码管显示秒,分,时,闹钟状态;34H,35H,36H,37H:时钟秒,分,时,闹钟状态存储单元;38H,39H,3AH:闹钟秒,分,时存储单元;40H:按键中间储存单元;41H,42H:S1,S2散转处理偏移值储存单元

3.2 软件流程

(1)主程序:初始化与键盘监控 ,还有内存自检。

(2)计时:为定时器0、1中断服务子程序,完成刷新计时缓冲区的功能。

系统计时是采用定时器与软件循环相结合的方法。定时器0每隔50MS溢出中断一次,则循环20次延时时间为1S,重复60次为1分,分再计时60次为1小时,小时计时24次则时间重新回到 00:00:00。

系统使用12MHZ的晶振,定时器0工作在方式1,则计算50MS定时初值为:定时时间=(2E16-定时器0初值)*(12/Fosc)。因此,定时器0初值为3CB0H,即TH0=3CH,TL0=0B0H。在计算时还应该考虑的两个问题:第一,定时器溢出产生中断请求,CPU并不一定立即响应中断,而可能需要一个中断响应时间之后才能响应中断,中断响应时间大约为3~8个机器周期。所以将初值重设为3CB7H~3CBFH可以满足精度要求。第二,时间是按十进制递增,而单片机只有二进制加法指令,因此加法指令计时必须进行二-十进制转换。初始化程序入口:置R0和R1指针指向时钟的秒,R0和R1指针是指向当前显示的单元,FR0存放R0指针的首地址,LR1是存放超出显示范围。JPBM_S1和JPBM_S2是存放S1和S2按键的散转指令的偏移值。

(3)时钟设置和闹钟设置:由键盘输入设置当前时间与定时启闹时间。

将R0和R1指针重置指向秒,并初始化程序入口。对S1和S2的散转指令的偏移值一样,但FR0首地址不一样,闹钟FR0=38H,时钟FR0=34H。为了能够达到期望设定的时间开始走时,在时钟设置中应先停止定时器计时。在退出设置时应重新启动定时器开始计时。

(4)显示:完成两位的动态显示。

(5)键盘扫描:判断是否有按键按下,并做相应处理。

动态显示是将两个数码管轮流点亮的,这是由于人眼存在视觉暂留效应,所以只要每位显示间隔时间足够短就可以给人同时显示的感觉,一般是取2.5MS的延时时间。按键结构与特点:本设计是用机械式的按键。在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来.抖动时间的长短与开关的机械特性有关,一般为 5~10ms。

(6)定时比较响铃:判断是否启闹时间到否,如时间到,则启动蜂鸣。

结语

本论文主要论述数字闹钟的软、硬件设计的方法。能计时显示时、分、秒和闹钟状态,能重新设定时间参数。有闹钟提示和脉冲方波输出功能。使用汇编语言程序编程实现其设计的各项功能。本数字闹钟设计可以使用多种风格的程序来实现,主要是对按键输入和显示输出的处理,本设计风格对按键输入和显示输出处理是使用散转的方式处理的,散转方式的处理易于地址化,模块化,统一化和扩展。

[1]陈忠平.基于proteus的51系列单片机设计与仿真[M].北京:电子工业出版社,2012.

[2]陈明荧.8051单片机课程设计实训教材[M].北京:清华大学出版社,2004.

[3]吴金戊.8051单片机实践与应用[M].北京:清华大学出版社,2002.

猜你喜欢
数码管计时闹钟
多彩创意闹钟
畅游计时天地
腕表计时2.0
12时计时法与24时计时法的互化
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
小闹钟的提醒
能帮我设个闹钟不等四则
基于Qt的数码管数字编码系统的设计与实现