当前位置:文档之家› 多功能智能电子钟的设计

多功能智能电子钟的设计

文章编号:1006-1576(2005)04-0082-03多功能智能电子钟的设计何宏森(西南科技大学信息工程学院,四川绵阳 621010)摘要:多功能智能电子钟以AT89C2051芯片为核心,采用静态与动态相结合的扫描方式显示。

系统软件包括主程序和中断模块,基本时间、总天数、星期、公历、阴历等日历算法模块。

其显示模块采用单片机串行输出,以分时动态扫描方式点亮21块LED数码管和4个发光二极管。

关键词:电子钟;单片机;日历算法;动态显示中图分类号:TP216.2 文献标识码:ADesign of Intellectual Electronic-Clock of MultifunctionHE Hong-sen(College of Information Engineering, Southwest University of Science & Technology, Mianyang 621010, China)Abstract: The chip of AT89C2051 is based on as the core of intellectual electronic-clock, and the scanning mode is applied to display by combining dynamic scan with static scan. The system software includes: main program, interrupt program and the programmed algorithm about calendar of basic time, total days, week, the Gregorian calendar and the lunar calendar. The displaying module is designed with serial output of one chip computer, 21 pieces of LED nixie light and 4 pieces of LBDs were lighted up by the way of dynamic time-sharing scan.Keywords: Electronic-clock; Chip computer; Calendar algorithm; Dynamic display1 引言万年历阴历算法以往都使用数据表。

通过查询实现,但所占空间较大。

故从公农历间的关系入手,设计电子万年历,时间长度是100年(即从2000~2100年)。

2 硬件电路设计图1 电子钟的硬件框图采用AT89C2051芯片为核心,具有自动计算和显示公农历日历、星期、时间和气温。

显示部分用分时动态扫描方式点亮LED数码管,单片机通过P1口发出位码并经PNP三极管驱动对需显示的LED供电,显示数据由单片机从串口发出经74LS164进行串并转换,采用静态与动态相结合的扫描方式显示。

温度监测电路采用热敏电阻和555定时器及辅助电路构成多谐振荡器,根据热敏电阻阻值随温度变化的曲线,单片机可以根据1s内555定时器输出的方波个数来计算气温值。

3 软件实现3.1 主程序及中断模块主程序对各单元初始化,计数器溢出后进入中断程序。

调用子程序,中断返回后又继续计数,再次溢出后再进入中断程序,如此周而复始执行。

进入中断程序(图2)后,先重新对T0赋初值,再调用各算法子程序,记数初值保证子程序执行完后不发生第二次中断。

3.2 日历算法(1) 基本时间算法设定4ms中断一次,即一秒要中断250次。

通过判断预定数据缓冲单元的值,此值一到250,秒单元就加一,否则中断返回继续计数。

判断秒单元,只要秒单元到60,分单元就加一,否则中断返回继续计数。

再判断分单元,只要分单元到60,小时单元就加一,否则中断返回继续计数。

然后再判断小时单元,小时单元一满24,那么天单元就加一,否则中断返回继续计数。

如循环计算如图3。

(2) 总天数算法为实现公历向农历的转换须进行总天数计算。

公历收稿日期:2005-02-19;修回日期:2005-03-25作者简介:何宏森,作者未提供。

·82·计算定义2000年1月1日为起始年,总天数计为Day1。

农历计算中定义农历1999年1月1日为起始年(即公历1999年2月16日,相差319天),总天数计为Day2=Day1+319天。

图3 基本时间的程序流程如要计算今天2004.6.1距2000.1.1的总天数,只要从内存单元提出年份的十位和个位的信息,用它减去0(00年)。

得X1=04。

提取月份信息X2=6-1=5。

可算出前5个月经过的天数X2。

日信息X3=1-1=0。

还需要考虑闰年的年份信息和月份信息,如果有闰年就需要把多出的天数加上。

因此,总天数TOTLE=(X1×365+X11)+X2(每年基本上是一样的只有闰年和非闰年差一天)+X3。

用年份信息除以4,令商为K,余数为M。

M=0时为闰年,那么X11=K。

如果M≠0,说明不是闰年,那么X11=K+1。

这样Day1就求得。

设计中预留两个内存单元(即高8位和低8位)存放总天数。

(3) 公历算法公历算法基本上和农历一样都用逐月递减法(每减12个月存放年份信息的单元的内容就加1)。

这个年份信息加上“起始年信息”就是现在的年份信息,月和日的信息在根据公农历不同而得到不同的结果。

每年各月份的天数基本上是固定的如下表,除了2月可能有28天或者29天。

设置两个标识,一个R1内存放即将减的月号,一个R0存放当前年信息,当R1到12时R0就加1。

当R1为2时,判断当时的R0内的年份信息是否闰年了。

如果是闰年就减29天,反之则减28天。

其余月份则就减相应的30和31。

(4) 星期算法星期算法有两种。

一种是当小时信息满24时,存放星期信息的内存单元就加1,满7归1,如此循环获得某天为星期几。

另外一种算法是:[总天数+(初始值-1)]/7的余数,就是当天的星期信息,见表1。

但该算法要考虑除法的高8位借位问题,当低8位不够除的时候,就要向高8位借位。

此时,高8位减1,低8位就可以加4再除7(因为256/7余4),同时要判断高8位是不是小于0。

如果是则完成除法,如果不是则继续除到真正不够除为止。

表1 余数与星期信息对照表余数0 1 2 3 4 5 6 星期信息 6 7 1 2 3 4 5(5) 农历算法农历算法基本上和公历一样,也是逐月递减的方法(此处是减一个的天数,比如29天或者30天)。

要保存一年的信息,只要三个信息:农历每月,是否有闰月,闰几月以及闰月的大小。

用相邻的两个内存单元来保存这些信息。

农历算法如图4。

图4 农历算法流程3.3 显示模块显示部分用分时动态扫描方式点亮LED数码管,故需分时点亮21块LED数码管和4个发光二极管。

用单片机串行输出,一次传送数据给三块74LS164(一组点亮三块LED),74LS164再并行输出进行动态扫描。

三块74LS164首尾相接,前面164的Q7脚连接在下一个164的A,B输入脚。

扫描一次就需要送三组数据到三块164中,前8个周期送最后一块164的信息,中间8个周期送中间一块164的信息,最后一个8个周期就完成排在最前面的164的信息的传送。

此时再通过单片机的P1口给相应要点亮的LED的驱动电路的三极管的基极送低电平即可。

在每组LED点亮后稍微的延时·83··84·(如延时80us ),然后立即关断以解决残影问题。

表2是程序中用到的内存单元中对应的信息表2 显示程序中用到的内存单元内存单元 信息 内存单元 信息 30H 公历年的前两位 31H 公历年的后两位 32H 公历月 33H 公历日 34H 公历星期 35H 算出的总天数高位36H 算出的总天数高位 37H 356的高位(1H )38H 356的低位(6DH ) 40H 天的进位42H 运算时月份信息高位 43H 运算时月份信息高低位44H 运算时日信息 45H 作乘法暂用 46H 运算时年份信息低位 47H 作乘法暂用 48H 运算时年份信息高位 4AH 319的高位(1H )4BH 319的低位(3FH ) R0 显示移位指针(60H )50H 农历月 51H 农历日53H 小时 54H 分 55H 秒56H 百分秒57H 运算时总天数高位58H 运算时总天数低位60H 温度高位61H 小时的高位 62H公历年前两位高位63H温度低位64H 小时低位 65H 公历年前两位低位66H 农历月高位 67H 星期 68H 公历年后两位高位69H 农历月低位 6AH 分高位 6BH 公历后两位低位6CH 农历日高位6DH 分低位6EH 公历月高位 6FH 农历日低位70H 秒高位 71H 公历月低位 72H 随机数 73H 秒低位 74H 公历日高位 75H 随机数 76H 四个二极管 77H 公历日低位4 结论在电子钟硬件电路基础上,用汇编语言编写程序写入芯片后,成品已交付使用,达到了预期效果。

参考文献:[1] 李朝青. PC 机与单片机&DSP 数据通信技术选编2[M].北京: 北航出版社, 2003.[2] 吕能元, 孙育才. MCS-51单片机原理/接口技术/应用实例[M]. 北京: 科学出版社, 1996.***************************************************************************************************(上接第81页)图7 2通道方式字若写驱动板地址为300H ~30FH ,8253端地址为300~303H ,要求定时0通道输出端OUT 。

得到250Hz 的方波信号,并输出65535个脉冲,震荡器提供0通道计数脉冲频率为125kHz 。

★ 确定工作方式:要求OUT0端输出的是连续方波,所以定时器0通道应工作在方式3。

OUT1输出接0通道GATE0,OUT0输出65535个脉冲后就由OUT1封锁,停止输出。

所以1通道计数器设置初始值为65535,工作方式为0。

★ 计算初值:8253的0通道工作在方式3,OUT0端输出信号的频率是由CLK0端的信号经定时器分频得到的,而分频系数就是从计数器初值开始减1时所计得的时钟周期数。

因此初值=分频系数=f clk /f out 。

采用二进制计数,定时器0:N =f clk0/f out0=125000/250=500。

化为十六进制数01F4H ,控制字如图8。

相关主题