STC89C52单片机控制的数码万年历及温湿度计 下载本文

内容发布更新时间 : 2024/10/19 15:42:37星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

STC89C52单片机控制的数码万年历及温湿度计

作者:胡建波

来源:《环球市场信息导报》2011年第02期

摘要:利用STC89C52单片机设计一款万年历及温湿度显示系统,显示方式为LED数码显示,可显示年、月、日、时、分、秒、温度、湿度、漏点及星期,能进行时间调整、闹铃设置,并具有整点报时等功能,断电后时钟电路由备用电池供电。 关键词:STC89C52 单片机;MAX7219;DS1302;万年历

1. 系统功能

利用STC89C52单片机设计一款万年历及温湿度显示系统,显示方式为24位LED数码显示,可显示年、月、日、时、分、秒、温度、湿度、漏点及星期,能进行时间调整、闹铃设置,并具有整点报时等功能,断电后时钟电路由备用电池供电。 2. 硬件系统总体结构

如图1,硬件系统主要有电脑主控部分STC89C52单片机、LED数码显示模块接口MAX7219、时钟电路接口DS1302、数字温湿度计模块SHTl0、按键模块及闹铃电路六大模块。

2.1系统主控模块

如图2,系统主控模块主要有上电复位电路、晶振电路和STC89C52单片机组成。STC89C52单片机的P1.0~P1.2分别用做时钟电路DS1302的数据I/O、移位时钟和RESET信号;P1.4~P1.5分别用做温湿度传感器SHT10的数据I/O和移位时钟;P3.2、P3.3和P3.7别用做LED数码显示接口芯片MAX7219的数据I/O、移位时钟和数据锁存信号;P2.4用做整点报时或闹铃信号;P1.3、P1.7、P3.4~P3.5分别用做闹铃设置、时间设置保存、时间设置、+1和闹铃设置保存按键输入信号。 2.2显示模块接口MAX7219

MAX7219是一个采用3线串行接口的8位共阴极7段LED显示驱动器,只需LOAD、DIN、CLK三个管脚便可实现数据传送。DIN管脚上的16位串行数据包在每个CLK的上升沿被移入到内部16位移位寄存器中,MAX7219的16位串行数据的低8位表示显示数据本身,

龙源期刊网 http://www.qikan.com.cn

最高4位D15~D12未使用,D11~D8用于选择14个内部寄存器,其中的8个数字寄存器用于存放8位LED数码管的段显码或BCD码,6个控制寄存器(无操作、译码方式、亮度调整、扫描位数、睡眠模式和显示器测试控制寄存器)用于设置MAX7219的工作方式。图3中用3片MAX7219采用级连方式驱动24位LED数码管,三组电容用做3片MAX7219的电源滤波。 2.3时钟电路接口DS1302模块

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节的静态RAM,采用SPI三线接口与CPU进行同步通信,SCLK引脚为串行移位时钟输入,I/O引脚为双向数据线,RST引脚为控制逻辑。DS1302可提供秒、分、时、日、月、星期和年,并具有闰年补偿功能。采用双电源供电(主电源和备用电源),可允许或禁止对备用电源进行涓电流充电。DS1302有关日历、时间的寄存器共有12个,其中地址80H~8CH 的7个寄存器分别存放秒、分、时、日、月、星期和年,偶地址用于写,奇地址用于读。 2.4数字温湿度计模块SHTl0

SHT10是瑞士Sensirion传感器公司推出的新型集成数字式温湿度传感器,该传感器采用CMOSens专利技术将温度湿度传感器、A/D转换器及数字接口无缝结合,使传感器具有体积小、响应速度快、接口简单、性价比高等特点。图5中SHTlO与CPU之间采用两线串行接口,SCK引脚是MCU与SHTlO之间通信的同步时钟;DATA引脚是用于MCU与SHTlO之间的数据传输。DATA的状态在串行时钟SCK的下降沿之后发生改变,在SCK的上升沿有效。在数据传输期间,当SCK为高电平时,DATA数据线上必须保持稳定状态。瓷片电容104用做SHT10的高频滤波电容。 2.5按键模块及闹铃电路

如图6,系统采用5个独立式按键用于调整时间和闹铃,分别为进入时间设置键、+1键、进入闹铃设置键、退出时间设置并保存、退出闹铃设置并保存。闹铃采用5V有源源蜂鸣器由PNP三极管9012驱动,可减少焊接难度。 3. 软件系统

软件程序用C语言实现,主要包括MAX7219初始化子程序、STC89C52单片机E2PROM读写子程序、读取DS1302时钟子程序、读取SHT10温湿度子程序、定时器0中断服务程序和主程序。程序下载地址:http://download.csdn.net,文件名:数码电子万年历_温湿度计。 定时器0中断服务程序:主要用于实现时间或闹铃设置时使被调整的对象(如秒、分等)闪烁,以选择确认调整对象。当主程序检测到时间设置或闹铃设置键后,置位时间设置或闹铃设置标志,并允许定时器0中断。

龙源期刊网 http://www.qikan.com.cn

主程序:首先对定时器0、MAX7219、DS1302和SHT10初始化,然后读取保存在EEPROM的闹铃时间并转存到单片机内部RAM,最后进入while(1)循环(图7),执行按键检测、读取系统时钟和温湿值并送显示缓冲区、显示缓冲区数据送MAX7219显示输出、重置看门狗。 4. 焊接与调试

对电子爱好者来说,能独自焊接调试出一件产品是一激动人心的事,最初的酸甜苦辣最终转化为甜美的甘泉真是莫大的幸福和欣慰。网络上提供了很多焊接方面的经验、心得或注意事项,但不同的工程师可能有不同焊接经验,多是在于提高工作效率,但有时会欲速则不达。对于本项目来说,我认为先调试出单片机最小系统比较好,即首先确认单片机能够正常工作,比如用一个I/O口控制发光二极管闪烁或驱动蜂鸣器发声,这当然也包括要正确书写测试程序;然后再焊接max7219数码管显示驱动电路,不要试图一下把三个max7219和数码管全部焊完,这样做的可能是当焊接出现问题时,我们很难找到问题出在那儿。在焊接过程中可边焊接边测试(无短路),或者每焊接一次加电试运行,以确保每一次焊接的正确性。先完成数码显示部分的测试我认为是非常重要的,后面的DS1302时钟和SHT10湿湿度计都要用到输出显示,当然在后序阶段是先完成DS1302时钟电路还是SHT10湿湿度计电路没有先后顺序。值得注意的是在焊接过程中,不同的阶段我们可能要书写不同的测试程序,仅用以保证每一阶段硬件电路的正确既可,之所以不能使用最终的应用程序测试是因为有些硬件在我们的实验板上还没有完成。

上面我们成功完成了所有硬件的测试,但每一块程序是分散的,要将其整合到一起可能还有些困难,这就要求我们要熟练应用不同的程序调试方法,比如单步、断点等,有时可能还要借助外部的仪器设备。 参考文献

[1]郑 琪.基于51单片机的万年历及温度显示系统 硅谷.2010.07