历史上的今天
今天是:2025年04月02日(星期三)
2018年04月02日 | 基于AT89S52单片机的多功能电子万年历设计
2018-04-02 来源:eefocus
随着生活节奏的日益加快,人们的时间观也越来越重,同时对电子钟表、日历的需求也随之提高。因此,研究实用电子时钟及其扩展应用,有着非常现实的意义,具有很大的实用价值。
本系统程序由主程序、中断服务函数和多个子函数构成。主函数主要完成各子函数和中断函数的初始化。定时中断函数主要完成时钟芯片的定时扫描及键盘扫描。时钟芯片的读写函数主要是将时间、日历信息读出来,并把要修改具体值写入时钟芯片内部。
系统的硬件设计与电路原理
电路设计框图
系统硬件概述
本电路是由AT89S52单片机为控制核心,具有在线编程功能、低功耗、能在3V的超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长、精度高和低功耗等特点,同时具有掉电自动保存功能。
主控制模块
单片机主控制模块的设计
AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
时钟电路模块
时钟电路模块的设计
DS1302的引脚排列如图3所示,其中VCC1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

图1 整体电路框图

图2 主控制系统

图3 时钟控制系统
时钟电路模块工作原理
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如图4所示。表1为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。
DS1302的控制字节
DS1302的控制字如表1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如图4所示。
表1 DS1302的控制字格式


图4 DS1302读/写时序图
DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
时钟模块实现功能
该模块为系统提供精准的秒、分、时、日、月、年等实时时间信息,星期则由编程计算得到。
温度采集模块
温度采集模块设计
如图5所示。采用数字式温度传感器DS18B20,它具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P1.7与DS18B20的I/O口连接加一个上拉电阻,Vcc1接电源,Vcc2接地。
DS18B20的测温原理
低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。
表2 DS1302的日历、时间寄存器


图5 DS18B20温度采集
显示模块的设计
本次设计采用的是LED动态显示方式,由于PROTEUS内没有LED,故用LCD代替LED进行仿真,与主控制芯片AT89C52相连。如图6所示。
系统的软件设计

图6 LED动态扫描显示

图7 主程序流程图
主程序流程框图
Keil C与Proteus的联调与测试结果
Proteus7.6是目前最好的模拟单片机外围器件的工具,可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件等),使用Proteus7.6和Keil C可以像使用仿真器一样调试程序。
Proteus的工作过程
运行Proteus的ISIS程序后,进入该仿真软件的主界面如图8所示。在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。通过工具栏中的p(从库中选择元件命令)命令,在pick devices窗口中选择电路所需的元件,放置元件并调整其相对位置、元件参数设置、元器件间连线、编写程序;在source菜单的Define code generation tools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/remove source files命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。

图8 Proteus的启动界面
Proteus软件所提供的调试手段
Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。对于单片机硬件电路和软件的调试,Proteus提供了两种方法:一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。
软件和硬件结合的应用系统
软件和硬件的结合,就是一个单片机的应用系统了。在这一阶段,硬件电路的设计已经不是最为关键的了,而软件系统的设计、调试和运行才是实验的主要内容。因此可以以建议性的意见给出具体的硬件电路,并提出该电路所需要完成的具体工作,进行软件的设计和调试。
Keil C的介绍
keil C的运行界面
运行Keil C后的运行界面如图9所示。

图9 keil C的运行界面
Keil C与proteus联调测试
1、安装keil与proteus7.6;
2、打开proteus,画出相应电路。在proteus的tools菜单中选中use remote debug monitor;
3、在keil中编写MCU的程序;
4、进入keil的project菜单option for target '工程名'。在DEBUG选项中右栏上部的下拉菜选中Proteus VSM Monitor-51 Driver;
5、在keil中进行debug,同时在proteus中查看直观的结果,LCD显示;
6、把keil里的文件编译后输出hex的文件,在proteus中把单片机的加载程序文件换成keil中的hex文件,然后运行。
运行结果
结果显示
由图1整体电路框图可知,LED显示结果,如图10所示。

图10 结果显示
调节显示
日期和时间的修改由4个按键构成。键P0为调节;P2^0,模式切换键(向左移)向左移;键P2^1,加法按钮;键P2^2,减法按钮;键P2^3,立刻跳出调整模式按钮。
按动PO时秒闪烁进入调节系统,如图11所示。
按动P2^0向左移,对分进行调节,如图12所示。
按动P2^1向左移,对时进行加调节,如图13所示。

图11 秒调节

图12 分调节

图13 时加调节
图14所示,是未调之前的显示,按动P2^2向左移,对年进行减调节,如图15所示
按动P2^3向左移,退出调节恢复如图16所示。

图14 未调之前显示

图15 年减调节

图16 退出调节系统
总结
本文设计了一个多功能的电子万年历。电路是由AT89S52单片机为控制核心,与时钟芯片DS1302、温度芯片DS18B20、按键、LED显示等模块组成硬件系统。在硬件系统中设有3个独立按键,根据使用者的需要可以随时对时间进行校准、选择时间、温度显示等,综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
史海拾趣
|
听一个论坛的朋友讲:“加大光耦限流电阻,实际上是减小光耦电流,增大了占空比,让输出电压稍有提高;” 我一直以为,IC框图是个比较器,那么它输出Vout应该是2种状态高或低电平;那么光耦就应该是导通和截至的状态的; j就是输出电压达到参考 ...… 查看全部问答> |
|
串口通信问题,CE 5.0 + Evc 4.0 + Sp4 + API 我参照Msdn+网上资料写一个串口通信的类。 如下: // CeSeriapPort.cpp: implementation of the CCeSerialPort class. // ////////////////////////////////////////////////////////////////////// #include \"stdafx.h\" #include \"CeSeri ...… 查看全部问答> |
|
一台新买的功放机,后级采用功率管是C3281对管.用DVD播放碟片时声音大小正常..但是用话筒输入时,声音很小.几乎没有.如果将话筒靠近嘴巴距离很近,用手掌紧围住话筒口时说话.此时,音箱的输出声音大小正常. 请教各位大侠,这是什么原因呢? ...… 查看全部问答> |
|
单稳触发器接收来自S430F1101 的P1.3 端口输出的40ms 脉冲波,经过触发器的电压提升和脉宽控制输出频率不变、高电平宽度为 160us 的方波,方波周期为40ms [3]。此脉冲信号作为555 振荡器的置位脉冲。在置位期问,555 定时产生40kHz 的振荡信号。 ...… 查看全部问答> |
|
TMS320F28035是TI新推出的Piccolo系列DSP之一,它具有很高的性价比和出色的DSP控制性能。对于入门来说,它比2812更适合:单电源供电,主频适中(60MHZ),附带一个浮点运算核,价格也没有2812那样有时贵得离谱。同样具有增强型eCAN、SPI,SCI等 ...… 查看全部问答> |
|
ISE VHDL rising edge 和clk'event and clk='1'有什么区别?? rising edge 是上升沿检测。。后面这个也是上升沿检测。。。。有区别没?? 或者我理解错了? … 查看全部问答> |




