工作原理
本设计的主体思路是本着掉电后计时无需重设、走时精度高、屏幕大等特点。利用实时时钟芯片DSl302与单片机AT89C51构成了整个电路的核心。它采用具有2000年到2099年的闰年、大小月、星期自动跟踪计时,并输出年、月、日、时、分、秒数据的一种实时时钟芯片DSl302,其时钟频率为32.768kHz,它是保证时钟准确的重要器件。此芯片可为掉电保护电源提供可编程充电功能,只需外加一只可充电池,便可保证掉电后时钟不问断工作3—4天。另外,DSl302内有用户可读写操作的RAM,设置的所有数据均可通过它存储而不需要外加EEPROM,它采用串行数据传输,只需3根线就能与单片机构成读写操作。而作为主控芯片的AT89C51,一是对通过I/O口组成的键盘进行定期扫描,并执行相应键处理;二是定时读取时钟芯片数据,使之在各位LED中显示;三是对设置的闹钟时间与实时时间比较,如时间相同且闹铃开启,则蜂鸣器将会以1秒的周期鸣响1分钟。若要停闹。只须按一次相应的闹铃开关键即可;四是利用驱动与缓冲器保证了大屏幕LED显示时的足够亮度。
硬件电路
1、电源:220V交流电压经过变压器降压后次级输出10V左右交流电,经桥式整流、滤波及三端稳压后输出5V直流电压。若LED显示选2英寸左右,变压器功率应考虑5瓦。若还想增大LED显示尺寸,可调整驱动器ULN2003输出电阻,并根据实际情况增加变压器功率,还必须在三端稳压W7805上加装散热器。若选用的LED显示尺寸小于0.8英寸,可不考虑驱动与缓冲器,显示程序稍加调整,并调整PO口上拉电阻RRl就可满足显示亮度。
2、复位及晶体振荡电路:采用上电复位电路,由一只10μF电解与一只10k电阻组成,同时反向接一只保护二极管。两只30P电容与一只12MHZ晶体组成振荡电路。
3、实时时钟电路:DSl302的2、3脚外接32.768kHz晶体,8脚接3.6V备用可充电池或者法拉级的电解。电解容量的大小直接影响断电后的实时时钟数据保存时间,5脚RST,6脚I/O、7脚SCLK分别接单片机的P1.7、P3.6与P3.7脚。
4、按键电路:由P3.O—P3.5组成行列式键盘矩阵,共9个键,TO-T8分别是闹1、设置、左移、右移、增加、减少、显示、初始、闹2。
5、L印显示及驱动电路:此处全部选用红色高亮度共阴LED,时、分、秒显示(E1-E6)可考虑选用3只2英寸双位LED;年、月、日(E8-E13)用3只1.5英寸双位LED;星期(E7)用一只2.5英寸单LED,因年的最高两位(E14、E15)是固定显示“20”,所以选两只1.5英寸单LED .P2.O—P2.6通过一只ULN2003驱动器(输入端接上拉排阻5K)分别作为星期、时、分、秒LED显示的位控制;P1.0-P1.5也通过一只ULN2003驱动器作为年、月、日LED显示的位控制;因年的最高两位是固定显示“20”,所以将两位显示“20”的段位接地,而位控制经ULN2003接于P2.7脚。此两位在除年设置与显示关闭时不显示。其余时间均正常显示。除年的最高两位外,其余的LED段位均经过一只8位3态缓冲器接于单片机PO口上,并在缓冲器输入端接上拉排阻RRl(5K)。
6、秒闪烁:时分秒之间的闪烁点用4只大小φ3的红色发光二极管,其负极分别接小时个位、分钟个、十位、秒钟十位的位选位,正极分别接相应时、分、秒LED显示的dP段选位。因为LED小时个位、分钟个、十位、秒钟十位的dP段选位是作为秒闪烁点显示。所以不能与其它dp位相连。秒个位的dP位代表闹钟1,日个位的dP位代表闹钟2。
7、闹铃电路:P1.6闹铃输出接5V峰鸣器并串一只200Ω左右的电阻接于5V电源上。
操作方法
1、初始化
插上电源,首先按“初始”键进入初始化设置,初始化后时间显示为“2004年12月09日00:00:00星期四”。
2、时间设置
按“设置”键进入设置状态,此时只显示设置项(小时),按“增加”、“减少”键调整数值,按“右移”或“左移”键将按以下顺序进入其它设置项。只要在设置状态下再次按“设置”键将退出设置。
右移顺序:时一分一秒一闹1时-闹1分--闹2时-闹2分-年-月-日-星期
左移顺序:时-星期-日-月-年-闹2分-闹2时-闹1分-闹1时-秒-分
3、闹铃设置
设置闹铃时间时,为了便于与正常时间、日期区分,其数字是以1秒钟为周期闪烁的。闹钟1的设置时间在正常小时与分钟显示位置显示;闹钟2的设置时间在正常月与日显示位置显示。设置方法见第2项。设置好闹钟时间后。必须打开相应的闹铃开关,设定的闹钟时间到时候才响闹。按“闹1”键,在正常秒钟显示位置右下角有一园点点亮即表示闹钟1打开;同样,按“闹2”键,在正常日显示位置右下角有一园点点亮表示闹钟2打开。当再次按“闹1'’或“闹2”键。相应园点熄灭即表示闹钟关闭。
4、显示开关
在任意时刻按“显示”键,将关闭或开启显示。
软件系统
软件主要是通过读取DSl302的时钟数据,译码后送到显示部分显示,同时读按键,若有键按下则转去执行相应操作,通过定时器O溢出中断控制秒闪动以及闹钟设置时的闪动。部分程序,汇编语言源程序如下。
1、键盘扫描子程序
采用3×3行列式查询法,方法是对P3.0-P312行线口分别置0,然后读入P3.3-P315口的值。若不为111则说明有键按下,根据读入的P3口值与键号表进行查表对照,从而取得按键键号值。
2、显示子程序
包括全显示、设置显示与关闭显示。通过判断各标志位确定是设置还是显示状态与不显示状态。
3、增加、减少键处理子程序
先判断各设置标志位,若是设置小时时。则对小时数进行加减1处理并发给DSl302中。
4、左、右移子程序
判断各设置标志位,若是设置小时时,则转分钟处理,即设置小时标志位清O,设置分钟标志位置1。
5、串行通讯程序及进制转换
包括连续发送-地址和-数据(包括单字节写入子程序)、连续读出RAM。