"景先生毕设|www.jxszl.com

基于单片机的电子万年历的设计

2023-02-23 22:20编辑: www.jxszl.com景先生毕设
基于单片机的电子万年历的设计
智能电子万年历系统是由硬件与软件相结合而设计,而它是以AT89C55单片机作为 主控核心与时钟电路、显示电路、复位电路、振荡电路、报警闹铃电路、温度检测电 路、独立键盘电路等模块组成硬件系统,其中时钟电路釆用了时钟芯片DS12887,显示 电路釆用了 LCD 1602液晶显示,温度检测电路采用了 DS18B20温度传感器;而软件使用 了 Keil软件进行C语言编程、Proteus软件进行仿真测试,Altium Designer软件进行 原理设计。系统采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和 温度等信息,且具有整点报时、时间校准及设置闹钟等功能。
关键词:单片机AT89C55 ;时钟电路;电子万年历;液晶显示

第一章引言
1.1发展状况
随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计 时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年 历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的 机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游 丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电 子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的 应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指 针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自 动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求! 因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。近些年,随着科技的发展 和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。 多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等 等。单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序 都非常熟悉。但是却很少知道它的内部结构以及工作原理。由单片机作为数字钟的核心 控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出, 利用显示器显示出来,通过按键可以进行定时、校时功能。输出设备显示器可以用液晶 显示技术和数码管显示技术。当然随着技术的不断提高,用嵌入式系统来设计电子万年 历会越来越多,用嵌入式系统设计的万年历的功能将是更加强大,而目前常用的是使用 单片机来设计日常生活中常见的小型电子产品,其形式多种多样,小到带有日期的电子 腕表,大到公共场所悬挂的大型电子日历,此外,眼下我们还常能在宾馆、饭店等场所 见到一种带有年、月、日、时、分、秒、星期甚至节气等信息的电子日历牌。
1.2选题意义与目的
现在是一个知识爆炸的新时代,新产品、新技术层出不穷,电子技术的发展更是日 新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们 的生活,改变着我们的世界,改变着我们的观念,传统的时钟已不能满足人们的需求。 而数字化的钟表给人们带来了极大的方便。由于单片机具有灵活性强、成本低、功耗 低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来 实现。而随着科学技术的高速发展,微电子技术的突飞猛进,人们设计出更加便捷和更 加精确的电子万年历。它不仅能对年、月、日、时、分、秒、星期进行计时,更能进行
闰年补偿、温度显示、整点报时、时间校准以及闹钟设置等多种功能,而且产生的误差 极小,使用寿命极长。因此采用电子时钟(万年历)是一种趋势,更是一种时尚。
本系统釆用了以广泛使用的单片机技术为核心,软硬件结合,并釆用独立键盘电 路、LCD显示电路、时钟电路、温度检测电路,使硬件部分大为简化,提高了系统稳定 性,能显示丰富的信息,此万年历具有功能多样、电路简洁、读取方便、显示直观、电 路简洁、操作容易、功耗低、成本低廉等多项优点,适合批量生产,符合电子仪器仪表 的未来发展趋势,具有广阔的市场前景。
1.3功能要求
1.系统采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒温度等 信息,且具有时间校准等功能(设计要求)。
2.利用PROTEL软件进行电路设计及用Proteus进行电路仿真(设计要求)。
3.具有响铃及整点通知功能(创新要求)。
4.具有上电各模块自检及高温二级报警功能(创新要求)。
第二章设计方案分析与选择
万年历的设计有多种方法,可供选择的元器件丰富多样,可运用的技术也有很多 种。所以,系统总体设计方案应在满足功能要求的前提下,充分的考虑系统的使用环 境,所选的结构要操作方便、易于实现,元器件的选用着重于合适的参数、稳定的性 能、较低的功耗以及低廉的成本等多种因素,同时紧跟时代脚步。因此,本文提出了基 于AT89系列单片机的智能电子万年历设计的方案,此次设计以单片机作为主控核心, 与温度芯片、时钟芯片、显示等模块组成硬件系统。针对这四大主要模块,对一下芯片 进行分析与选择。
2.1主控核心(单片机)
本方案在主控核心方面采用的是AT89系列,AT89系列是美国Atmel公司生产的emos 单片机,片内含有可多次擦写的只可读取程序存储器(PEROM)和随机的可存取数据的 存储器(RAM),器件采用的生产技术是Atmel公司高密度的、非易失的存储技术,兼容 了标准的mcs-51指令系统;其内部含有通用的8位(中央)处理器CPU和存储器(Flash 存储单元)功能强大AT89系列单片机可以生产高性价比的产品用于各种场合,因其灵 活性强常常应用于多种控制领域。在AT89系列单片机中首先考虑用AT89C51,它是一款 优秀的、功能强大单片机,但是只读程序数据存储器(ROM)只有4K,而本次设计的程序 比较大超过了 10K,若要用它就要接 扩展储存器,这必定会增加产品的费用,也会使设 计的电路变得复杂,因此,不符合我的设计要求,从设计的程序看可以选择AT89C53和 AT89C54,然考虑的Proteus仿真元器件库中没有这两款单片机,综合考虑可以釆用 AT89C55,从表2—1来看,这款单片机完全符合设计要求。
这个AT89C55是一种低功耗,高性能的8位CMOS单片机,提供以下标准功能:20k 字节Flash闪速存储器,256字节内部RAM, 4个(P0、Pl、P2、P3) 8字节端口,三个 16位定时/计数器,6向量两级中断结构,一个全双工串行通信口,片内振荡器及时 钟电路。同时,AT89C55可降至零频率的静态逻辑操作,并支持两种软件可选的节电工 作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系 统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作 直到下一个硬件复位。它有多种封装方式,本设计采用DIP-40直插式封装的 AT89C55o
表2—1两种单片机的比较
    AT89C51单片机    AT89C55单片机
相同的主要性能参数    1.MCS-51产品指令系统完全兼容
2.1000次擦写周期
3.32个可编程I/O 口线
4.低功耗空闲和掉电模式
5.一级加密程序存储器
6.可编程串行UART通道
不通的主要性能参数    1.全静态操作:0Hz-24MHz
2.6个中断源
3.128X8字书内部RAM
4.4k子节可重擦与Flash 闪速存储器
5.两个16位定时/计数器    1.全静态操作:0Hz—33MHz
2.8个中断源
3.256X8字吊内部RAM
4.20k字节可重擦写Flash闪速存储 器
5.三个16位定时/计数器

2. 2温度芯片
温度是常见的测量与控制量之一,其实时测控遍布各行各业。它通常是通过温度传 感器来测量,在众多的温度传感器中,可分两类即模拟温度传感器与数字温度传感器, 本次设计的电子万年历为了简洁硬件电路简洁、系统稳定性、易于实现。可釆用数字温 度传感器,DS18B20是美国Dallas公司推出的数字温度传感器之一,采用3脚(或8 脚)TO—92封装形式,DQ (2脚)为数字信号输入/输出端,GND (1脚)为电源地,VDD (3脚)为外接供电电源输入端。与传统的热敏电阻等测温元件相比,它能直接读出被 温度。不需用A/D转换电路,减少了硬件成本,感温特性曲线是严格线性的,不会产生 较大的测量误差。提供9位(二进制)温度读数指示器件的温度信息经过单线接口送入 DS18B20或从DS18B20送出,因此,从主机CPU到DS18B20仅需一条线。主要特点:不 需要备份电源,可通过DQ供电;单线接口,只有一根信号线与CPU连接,电路简单; 传送串行数据;用户可设定报警上下限值;零功耗待机;多个DS18B20可以很方便地以 串行方式与PC或单片机连接,实现多点检测;抗干扰性强,适合于恶劣环境的现场温 度测量。因此,DS18B20完全满读取方便、电路简洁、功耗低、成本低廉的设计要求。
2. 3时钟芯片
万年历的设计可以直接釆用单片机定时计数器的定时它能提供比较精确秒信号,使 用程序实现年、月、日、时、分、秒、星期计数以及时间的校准,闹钟的设置。采用此 种方案虽然减少芯片的使用,达到电路简洁、节约成本,但是,实现的时间误差较大, 不符合实际情况。所以不釆用此方案。本设计将釆用DS2887时钟芯片来实现时钟, DS12887为DALLAS公司最新推出的的实时时钟芯片,除具有实时钟功能外,它还具有 128字节的通用RAM其中14个作为字节时钟和控制寄存器,114字节为通用RAM,所有 ARAM单元数据都具有掉电保护功能。釆用CMOS技术制成,把时钟芯片所需的晶振和外 部锂电池相关电路集于芯片内部,计秒、分、时、天、星期、日、月、年,并有闰年补 偿功能,二进制数码或BCD码表示时间、日历和定闹。12小时或24小时制,12小吋时 钟模式带有PM和AM指导,有夏令时功能。屮断信号输出(IRQ)和总线兼容,定闹中断、 周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试。采用 DS12887芯片设计的时钟电路勿需其它外围电路并具有良好的微机接口。DS12887芯片具 有微功耗、外围接口简单、精度高、工作稳定可靠等优点,这些就是釆用它的主要原 因。
2. 4显ZF器件
数据的显示有多种方式可使用(点阵式的或LED的动态扫描)数码管或(LCD)液晶 来显示,点阵式的数码管由64个发光的二极管(八行八列)构成,用于显示一些文字 会很适合,而用来显示数字实在浪费,并且价格是较高,故不使用它来显示。而(LED数码 管)动态扫描的显示,使用简单,操作方便,显示直观,并且(LED)数码管的价格也比 较适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线 少,但是,由于显示的位数比较多,若釆用它将要使用4块74HC573芯片,这无疑会增 加成本,重点是会使电路复杂化,操作繁琐,不满足设计要求。所以也不采用了 LED数 码管作为显示。釆用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图 形,显示多样,清晰可见,易于控制,电路简洁,缺点是价格比较贵,但总的来说,是最符 合设计要求,所以在此设计中釆用LCD液晶显示屏。
第三章系统硬件设计
本系统的硬件设计釆用的是自顶向下设计模式,顶层开始,连续地逐层向下分解,起 到系统的所有模块都小到便于掌握为止。因此,本系统设计了 9大模块,分别是主控核 心(AT89C55)模块、DS12887模块、DS18B20模块、LCD显示模块、复位电路模块、报 警响铃模块、电源模块、独立键盘模块、振荡电路模块。通过AT89C55读取时钟芯片的 时间和温度芯片的温度,用LCD1602来显示,并可以通过初始化时钟芯片和键盘设置闹 铃时间.系统总框图如:图3—lo原理图见附录一。
图3-1系统总框图

3. 1单片机最小系统设计
3.1.1单片机最小系统原理图
单片机的最小系统是指由最基本的电路元器件组成,外接部分简单的电路就能独立 完成一定的工作任务的单片机系统。55单片机的最小系统包括单片机芯片、电源、时钟 电路和复位电路组成,如图3—2。
3.1.2主控核心的功能
主控核心AT89C55单片机总共有40个引脚,其中包含4组8位的I/O 口; RST、
ALE/PROG. XTAL1、XTAL2、VSS、GND、EA/VPP. PSEN 各一个。各引脚的功能说明如 下:XTAL1/XTAL2:放大器的输入端/输出端;PSEN:程序存储允许(PSEN)输出是外部 程序存储器的读选通信号,此设计中没有用到片外存储器,因此不用管;RST引脚出现 两个机器周期以上的高电平将使单片机复位;EA:双功能控制端口,下设计中没用片外
图3-2单片机最小系统的原理图

振荡频率的1/6输出固定的正脉冲信号,故它可以对外输出时序或用于定时。P0 口即可 用地址/数据总线复用口,有可作通用的I/O 口使用。它是一组8位漏极开路型双向I /0 口作为输出口用时。P2是一个带内部上拉电阻的8位双向I/O端口,它即可作通 用的I/O 口使用,也可与P0 口相配合,作为片外存储器的高8位地址总线。它可以根 据系统要求,可全部当做于I/O 口使用,也可以全部当做地址总线使用,或者部分作地
表3-1单片机第二功能图
端口引脚    第二功能
P3.0    RXD (串行输入)
P3.1    TXD (串行输出)
P3.2    INTO (外中断0)
P3.3    INT1 (外中断1)
P3.4    T0 (定时/计数器0外部输入)
P3.5    T1 (定时/计数器1外部输入)
P3.6    WR (外部数据存储器写选通信号出口)
P3.7    RD (外部数据存储器读选通信号出口)
P1.0    T2 (定时/计数器2外部计数输入)
P1.1    T2 EX (定时/计数器2外部触发输入)

址总线使用部分作I/O 口使用,用户自己灵活使用。P1主要用于单片机的用户的控制量 的输入或数据的输岀,它是一个通用准双向I/O 口,但它与AT89C51略有区别,它的 P1.0与Pl. 1有第二功能。P3 口即可作通用的I/O 口使用,但常使用的是其第二功能。 其第二功能如表3-1所示。
3.1.3最小系统的晶振电路
此电路用来产生时钟信号,以提供单片机内部各种数字逻辑电路的工作的时间基 准。55单片机可内部振荡方式和外部振荡方式两种电路形式,本设计采用的是内部振荡 方式。单片机的内部XTAL1 (19脚)与XTAL2 (18脚)之间有一个高增益的放大器,在 19脚和18脚外接谐振电路,就构成内部振荡方式的自激振荡器,并产生时钟脉冲,本 次设计的单片机工作频率为12MHz,振荡频率由晶振的谐振频率来确定,电容器Cl、C2 起稳定频率、快速起振的作用,其电容值为30pF,设计电路时应将Cl、C2尽量靠近单 片机芯片,由于内部振荡方式电路简单,信号稳定,是独立的单片机系统首选。
3.1.4最小系统的复位电路和电源
单片机的复位电路的设计,其第9引脚为复位输入端,20引脚为接地端,40引脚为电 源端.此系统的的复位电复位路设计两种情况,一为上电复位电路,一为手动复位。这 种设计比单一的上电复位更符合实际,也是操作方便。电源的连接』把单片机20引脚 接地,单片机40引脚接+5V电压,完成电源的连接。
3. 2温度电路的设计
3.2.1. DS18B20 测温原理
测温原理如图3-3所示,由于DS18B20的晶振的振荡频率是低温度系数的,因此在 受到温度的影响时变化较小,故它可用于当作稳定频率,而减法计数器1的脉冲信号可 以由它可提供,由于它的的晶振的振荡频率在高温系数时随温度变化很明显,故产生的 脉冲信号可作为减法计数器2的脉冲信号输入,从原理图看,还含有计数门,当计数门 打开时,DS18B20温度传感器就对低温度系数振荡器生成的时钟脉冲进行计数,从而实 现环境温度的检测。计数门开启的时间是由(高温系数)振荡器来确定,在每次检测之 前,先将基准温度-55 °C存入温度的寄存器和减法计数器1中,使温度寄存器与减法计 数器1被初始化,低温系数的晶振产生的脉冲信号由减法计数器1进行减法计数,当其 值减至0时,温度寄存器中的数值将进行加1操作,而减法计数器1将重新赋值,它又 重新开始对低温系数振荡器产生的信号脉冲进行计数,一直重复下去直到(减法)计数 器2中的值减到0时,终止温度寄存器中的数值的增加,此时它内部的数值就是所检测 的温度值。测温过程产生的非线性变化就靠其内部的斜率累加器进行修正和补偿,对减
法计数器的预置温度实行修改。只要没有关闭计数门就一直重复上述处理,直到(温 度)寄存器中的温度值达到被检测的温度值,此来DS18B20温度检测原理。

图3-3 DS18B20测温原理图
3.2.2. DS18B20与单片机的接口电路
DS18B20与单片机的连接有两种接法,一种是寄生电源供电,另一种是外部电源供 电。寄生电源供电时,VDD、GND接地,DQ接单片机的I/O 口,为了确保在有效的 DS18B20时钟周期内提供足够的电流,一般要用一个MOSFET来完成对总线的上拉;外部 电源供电时,VDD接电源,在它和电源之间接一个4. 7K的电阻,GND接地,DQ接单片机 的I/O 口。此设计采用的是后者即外部电源供电方式,DQ (2脚)接AT89C55单片机的 Pl. 1脚进行通信。如图3—4所示:

图3—4DS18B20测温模块的原理图
3. 3时钟电路的设计
3.3.1.DS12887芯片的引脚功能
管脚功能:GND接地,VCC接+5V的电源,当+5V电压在正常范围内,数据能读写; 当VCC低于4. 25V,读写操作被禁止,计时功能正常进行;当VCCT降至3V以下时,随 机存储器RAM和计时器的供电被切换到内部锂电池;MOT(模式选择)接VCC时,选择 Motorola Df序,当接GND时,选择Intel时序;SQW(方波信号同)能从RTC内部15级分 频器的13个分频中选择一个输出,其输出频率通过对寄存器A编程来控制;ADO— AD7(双向地址/数据复用线)总线接口,可与Motorola各种类型的微机和Intel各种类型 的微机接口 AS即地址信号选通的输入端口用来实现信号的分离,可在AD/ALE下降沿把 地址写入DS12887芯片;DS脚表示数据的选择端或读信号的输入,它有两种类型的操作 模式,它由MOT的电平决定的,当MOT接高电平时,DS为正脉冲,出现于总线周期之 后,称作数据选通,在读周期时,DS指示芯片双向驱动总的时刻,在写周期时,DS的 下降沿使芯片写入数据,当MOT接低屯平时,DS (RD)当作与储存器的信号允许(0E) 有相同的定义;R/W(读/写输入)的操作模式有两种。当MOT管脚接高电平时,R/W是电 平信号,表明当前周期为读信号周期或者为写信号周期,当DS为1时,R/W高电平1 表明是读信号周期,R/W为低电平。表明写信号周期;当MOT管脚接低电平时,R/W信 号是低电平信号,与通用RAM的写允许信号(WE)有相同的含义;CS表示片选信号输入 端,它访问DS12887时钟芯片总线的周期内,片选信号只能保持为低;IRQ表示的是中 断输入端,它在低电平有效,通常作为单片机的外部中断的输入。在无中断产生时, IRQ 一直保持为高阻态,由于IRQ端口内部的结构是漏极开路,故它工作时要求接上拉 电阻;RESET表示复位端它复位时低电平的持续时间应大于200ms,才能使DS12887实时 时钟芯片复位成功。
3.3.2.DS12887芯片与单片机的接口电路
本设计釆用的是Intel总线时序,故MOT脚直接接地地。其它引脚的连接如下:GND 接地;RESET和VCC接电源,选择DS12887时钟芯片的地址总线AS端口和AT89C55单片 机的P3.6直接相联;而IRQ、R/W、DS、CS读写控制线分别与单片机的P3. 2、P3. 3、 P3.4、P3.5 口相连;DS12887芯片的SQW端口可编程产生方波输出信号,在本设计中 没有使用,NC不接;ADO—AD7(双向地址/数据复用线)总线接口与AT89C55单片机的P2 口相接。所以DS12887时钟芯片和AT89C55单片机的接口电路如图3—5所示。

3. 4显示电路的设计
3.4.1.LCD 1602芯片的引脚功能
LCD1602采用标准16脚接口,分别为:VSS (1脚)为电源地;VDD (2脚)接+5V 电源;V0 (3脚)为对比度调整端,使LCD1602液晶显示器显示达到最佳效果,在接电 源正极时对比度是最弱的,在接电源负极时对比度是最高的,对比度不宜过高也不宜过 低,过高会 产生“鬼影”,过低会很模糊,使用时可接一个10K的可变电阻调整对比 度;RS (4脚)为寄存器功能选择,在高电平时表示选择了操作存放数据的寄存器,在 低电平时表示选择了指令代码寄存器;RW (5脚)表示读/写信号选择端,高电平时表 示读操作,而低电平表示写操作;EN或E端(6脚)为使能端;第DBO〜DB7 (7〜14 脚)为8位I/O 口(一字节的双向数据端);15〜16脚为背景灯光电源接口,当为背景 灯光电源时,15脚为背景灯光电源正极,16为脚为背景灯光电源负极。
3.4.2.LCD 1602与单片机的接口电路
本设计没有对LCD1602的寄存器进行过读操作,因此,可以简化电路,把RW直接接
地,低电平时是对寄存器进行写操作,显示器的背灯电源与电源按要求接好即可,对比 度V0通过可变电阻与地连接,RS、E分别与AT89C55单片机的Pl. 2、P1. 3相接, DB0〜DB7与AT89C55单片机的P0 口按顺序连接。如图3—6所示
LCD1 LCD1602

图3—6显示模块的原理图
3. 5键盘电路的设计
键盘根据它是硬件编码,还是软件编程实现可分两类,一为编码键盘,一为非编码 键盘,编码键盘是指键的闭合识别是由专用的硬件电路实现,并产生键值或编码,例如 电脑键盘;非编码键盘是指键的闭合由软件编程的方式来识别;在单片机应用系统中, 非编码键盘用的非常广泛,编码键盘用的很少。非编码键盘根据其接入方式与扫描方式 又可分为矩阵键盘即行列式键盘和独立键盘。由于独立键盘在按键少时实现容易,电路 简单,编程方便。故本设计采用的是独立键盘。时间设置键(SET)接单片机的P1.0, 确定/闹钟(0K)接单片机的P1.5,加键(+)接单片机的P1.6,减键(一)接单片机的 Pl. 7o如图3—7所示:

图3—7键盘模块的原理图
3. 6报警电路的设计
本系统的闹钟与温度的二级报警的设计釆用了简单的电路,它是由NPN型三极管集 电极驱动蜂鸣器,发射极接+5V电源,基极接100欧姆的电阻作限流电阻,再与单片机 的P1.4连接,温度的一级报警采用的是发红光的LED接上限流电阻与单片机的P3. 1连 接,原理图如图3一8所示:

第四章系统软件设计
智能数字电子万年历是多功能的系统,各功能是在程序的控制下实现的。本系统的 软件设计方法与硬件设计一一对应,按照整体功能分割成多个程序模块,它们是分别进 行设计、编程和调试出来的,最后通过主程序将各子程序模块结合。这样将方便程序的 修改与调试,最终完成系统的整体设计,达到设计要求。此外本章的软件设计说的是一 种设计的思路,或者方法,因此并没有把所设计好的程序写入下列各节,全部放在附录 二中。
4. 1系统总程序
主程序的主要功能是LCD1602.温度测试系统、实时时钟系统的初始化,键盘的扫 描(包括时间校准键盘和闹钟设置键盘),闹钟判断,温度报警的查询,星期转换与月 末天数调整,以及温度与时间的实时显示,此外还有开中断。主程序流程图如图4-1所 示,程序见附录二。    I —
4. 2温度模块程序
模块包含五个函数分别是初始化DS18B20函数,读/写一•字节数据函数,读温度函 数,实时显示温度函数。各函数的名字为:初始化函数init_1820();,写一字节数据函 数 void write_bit (uchar dat);,读一字节数据函数 uint read_bit ();,读温度函数 uint read_wdu();,实时显示温度函数void display_wdu(uint ii);具体内容见附录三 源程序。流程图如图4-2所示。
对初始化DS18B20函数的编程时,要严格的遵守初始化时序,主机总线在tO时刻 发送复位脉冲(最短保持480us的低电平信号)紧接着在tl时刻释放总线转而进入接收 状态,DS18B20在检测到总线的上升沿后等待15 -60us ,然后DS18B20在t2时刻发出 存在脉冲(低电平保持60-240 us之间),初始化时序如图4-3所示。在初始化中要对 只读程序存储器操作,其常用的指令代码有:跳过读序号列号的操作码[CCH]、启动温 度转换指令代码[44H]和读取温度寄存器指令代码[BEH]等。其它的在本设计中未曾使 用。读/写一字节数据函数就是从芯片中取数据与存数据,从而给芯片写指令或数据,

图4T主程序流程图
是芯片能正常工作,它是通过串行输出的,一次只能读或写一位连续进行8此此操作。 读温度函数用来把芯片转换的温度送到单片机进行后期处理,处理时根据表-C DS18B20 温度与表示值对应表来把二进制数据转换成实际的十进制温度,由表可以算出温度值为 二进制值乘以0.0625,这既是被测温度。显示温度函数用来把读温度函数得到的温度值 显示岀来。流程图见4. 4显示模块子程序即图4-8所示。
图4-2温度模块子程序流程图
480ms
60/as 〜240/is
15时〜©Oq
400ps 〜960四一
图4-3初始化时序图
表4-1 DS18B20温度与表示值对应表
温度/°c    二进制表示    十六进制表示    温度/°C    二进制表示    十六进制表示
+125°C    0000011111010000    07D0h    o°c    0000000000000000    OOOOh
+85°C    0000010101010000    0550h    -0.5°C    1111111111111000    FFF8h
+25.0625°C    0000000110010001    0191h    -10.125°C    1111111101011110    FF5Eh
+10.125°C    0000000010100010    00A2h    ■25.0625°C    1111111001101111    FF6Fh
+0.5°C    0000000000001000    0008h    -55°C    1111110010010000    FC90h

4. 3时钟模块程序
此模块包含三个函数,分别为初始化DS18B20函数init_12887(),写数据到 DS18B20 内存中指定的地址函数 write_12887 (uchar add, uchar dat),从 DS18B20 内存 中指定的地址读函数read_12887 (uchar add),具体内容见附录三,其流程图见图4-4。 由于编程时用到了 DS12887的内部功能,以及Intel时序,而前文未曾提及,所以在此
略作说明。
图4-4时钟模块子程序流程图

4.3. 1 DS12887的内部功能
DS12887包含114字节的用户随机存储器(RAM), 10字节的存放RTC时间。日历和 闹钟RAM以及及用于控制和状态的4字节特殊寄存器构成,几乎128个字节都可以直接 读写,其地址分配图见图4-5。时间和日历信息通过读与之对应的内存字节来获得,日 历、时间和闹钟通过写与之对应应的内存字节来设置和初始化,字节中的内容可为十进 制或BCD形式。时间可选12小时制或24小时制。日历、时间和闹钟字节是双缓冲的, 总是可以操作的。RTC时钟RAM向处理器提供了三个独立、自动的中断源。定闹中断的 发生率可通过编程来控制,从1次/每秒到1次/每天不等,周期性中断的发生率是可以 选择的。更新结束中断用于向程序指示此更新周期已经完成。中断控制和状态位在寄存 器B与C中。周期中断可以在IRQ脚产生1次/500ms到1次/每122网的中断,中断频 率同样由寄存A决定,它的控制位为寄存器B中的PIE位。DS12887每秒执行一次更新 周期还比较每一定闹字节与相应的时间字节,如果匹配才号三个字节都是不关心码,则产 生一次定闹中断。由于DS12887芯片在出厂时,其自带的晶振是关掉的,这样就可以避 免锂电池在DS12887芯片在构成系统之前被耗尽。寄存器A的第4位到第6位为010时 才开启其自带晶振,使芯片工作,所以,编程时要初始化寄存器A,使晶振开启让芯片 能正常工作。

SET为0表示时间更新正常进行,当SET为1表示时间更新被禁止,程序可初始化时 间和日历字节。PIE表示周期中断使能位,PIE为1,表示能够以选择的频率来拉低端口 电平IRQ管脚,寄存器B的第六位为PIE,其为0时,表示不允许中断信号的产生。 AIE表示闹钟中断信号允许端。寄存器B的第三位为SQW,它是方波信号允许位,本文 未用。DM表示数据模式选择位,DM为1为十进制的数据,其时钟、日历和闹钟对应地 址与数据模式如表4-2,而DM为0,则表明地址中存放的数据是以BCD码形式储存的。 一天的时间表示有两种格式,即24小时制和12小时制,在寄存器B中的第一位为 24/12与之对应,当它为1时,则用24时制表示,而它为0时,则用12时制来表示。 为寄存器B的第0位为DSE位,它是夏令时开启位,当它为1时,则允许,为0时,则 禁止。UIP为更新周期正在进行位。当UIP为1,表明更新将很快发生,当UIP为0,更 新在244网内不会发生。DVO, DV1, DV2用于开启或关闭振荡器,并恢复计时链。010唯
一组合是打开晶振并允许RTC计时。RS3, RS2, RSI, RSO:频率选择位,本系统未用。 IRQF表示中断申请标志位。当满足IRQF=PF・PIE+AF・AIE+UF・UIE时,置1。只要 IRQF为1, IRQ管脚输出低,当程序读寄存器C后或RESET管脚接低电平后,标志位都 清零。AF表示定闹中断标志位,AF为1时表明现在时间与定闹时间匹配。闹钟启动。
VF表示更新周期结束标志位。VF为1时表示更新周期结束。BIAT0-BIT3表示未用状态 位,读出总为0。VRT表示内部锂电池状态位,通常应总读出1,若读出的为0,则表明 表明内部锂电池已耗尽。BIT0-BIT6表示未用状态位,读出总为0,此寄存器为只读存 储器。各寄存器的内部结构如表4-3所示。根据上述分析,此系统要用Intel时序,24 小时制,输出数据为二进制,开启内部振荡器,所以在编程时要给寄存器A、B、分别初 始化为20H、26H,因闹钟中断要读寄存器C,才能响应。所以要在AT89C55外部中断函 数屮读寄存器C。
表4-2时钟、日历和闹钟对应地址与数据模式-二进制模式(DM=1)
ADDRESS    BIT 7    BIT 6    BITS    BfT4    BIT 3    BIT 2    BIT1    BITO    FUNCTION    RANGE
OOH    0    0    Seconds    Seconds    00-3B
01H    0    0    Seconds    Seconds Alarm    0O3B
02H    0    0    Minutes    Minutes    00-3B
03H    0    0    Minutes    Minutes Alarm    00-3B
    AM/PM    0    0    0    Hours    Hours    01-0C +AM/PM
LWrl    0            Hours        00-17
    AM/PM    0    0    0    Hours    Hours Alarm    Q1-0C+AM/PM
ubn    0            Hours        00-17
OSH    0    0    0    0    0    Day    Day    01-07
07H    0    0    0    Date    Date    01-1F
08H    0    0    0    0    Month    Month    01-0C
09H    0    Year    Year    00-63
OAH    UIP    DV2    DV1    DVO    RS3    RS2    RS1    RSO    Control    ——
OBH    SET    PIE    AIE    UIE    SQWE    DM    24/12    DSE    Control    —
OCH    旧QF    PF    AF    UF    0    0    0    0    Control    —
ODH    VRT    0    0    0    0    0    0    0    Control    —
0EH-7F    X    X    X    X    X    X    X    X    RAM    —

表4-3. DS12887状态控制寄存器
寄存器的位    BIT7    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BITO
寄存器A    UIP    DV2    DV1    DVO    RS3    RS2    RSI    RSO
寄存器B    SET    PIE    ALE0    VIE    SQW    DM    24/12    DSE
寄存器C    IRQF    PF    AF    VF    0    0    0    0
寄存器D    VRT    0    0    0    0    0    0    0

4. 3. 2 DS12887 的 Intel 总线时序
本设计采用的是Intel总线吋序,所以编写写数据到DS18B20内存中指定的地址函
数(write_12887(uchar add, uchar dat))和从DS18B20内存中指定的地址读函数 (read_12887(uchar add))时,必须严格遵守Intel总线时序,其,读写总线时序分别 如图4-6、图4-7所示。Intel^线读时序

图4-6读Intel总线时序
Intel总线写时序
图4-7写Intel总线时序
4. 4显示模块程序
此模块包含四个函数,分别为初始化LCD1602函数init_lcd(),写指令到LCD1602 中的函数 write_con(uchar con),写数据到 LCD 1602 中的函数 write_data(uchar dat),写数据到LCD 1602中指定的地址函数xshi_sdat (uchar add, uchar date),具体内 容见附录三,其流程图见图4-8o在编写写指令和写数据函数必须严格遵守写操作时 序,RS为高电平是写数据,为低电平是写指令,其时序图如图4-9所示。
初始化LCD1602吋,一些指令必须写入液晶芯片内,显示模式设置,指令代码为:
38H;显示开/关及光标设置,指令代码为:OCH, 06H;显示清屏指令代码为:01H;数据 指针设置,指令代码为:80H+地址码。
图4-9写操作时序

4. 5键盘及其它模块程序
此模块包含了校准时间与设置闹钟函数,星期转换函数,天数自动调整函数,延迟 函数等四部分,由于延迟函数非常简单,没有画流程图,其它函数的流程图依次为:图 4-10,图 4-11,图 4-12o
图4-10校准时间与设置闹钟子程序流程图
图4-11星期转换子程序流程图
图4-12天数自动调整子程序流程图

第五章调试与仿真
5.1 Proteus 软件简介
Proteus软件是由英国的LabCenter Electronics公司研发推出的一款EDA工具软 件,由ISIS及ARES两款软件组成,其ISIS软件是一款比较方便、电子系统的仿真平台 的软件,ARES是一款高级的布线编辑软件,它集成了高级的原理布线图、混合模式 Spice电路的仿真、PCB的设计以及自动布线来实现一个完整的电子设计。通过Proteus ISIS软件的虚拟仿真技术,我们可对模拟、数字、模数混合的电路实行仿真测试,以及 微控制器为基础的系统与它所有外围接口电子元器件进行仿真。本设计釆用的是 Proteus软件仿真。
5. 2仿真与调试步骤
1.打开Proteus仿真软件,创建一个工程,保存为电子万年历。
2.根据设计好的原理图添加仿真元器件,打开元器件库,查找要添加的元件,双 击,继续查找下一个元器件,直到把所有要添加的器件都添加完。
3.在左边的方框里点击所添加的元器件,一个一个的画在仿真原理图中,按一定的 布局,把元器件放置的整齐一点,使总体上美观。
4.把放置好的元器件,按设计好的原理图,把各元器件用导线连接起来,在这个过 程,可以用多种方式,如用总线和网络标识与导线配合使用,及可以简化电路,又可以 是电路美观。到此,仿真电路就设计好了,效果图见图5-1所示。
5.进行电气检查,单击囱按钮,进行屯气检测,查看接线是否合理,看有没有错误 或警告,如有把它修正,直到没有为止,如没有错误或警告,则设计结束,保存。
6.把用keil编写的程序生成.HEX文件添加到单片机中,单击丄 按钮,进行对电 子万年历的仿真测试,观察程序运行情况,看能否显示预期的结果。
7打开keil软件检查源程序,查找并修改不合逻辑的部分,编译生成.HEX文件,重 复第6步,直到能显示预期结果。
8仿真测试复位键测试,按下此键看能否复位,经测试可以进行复位,系统重新开 始了,进入了开机画面,其效果图见图5-2所示。

图5-2复位键测试图开机画面
9仿真测试时间设置测试,按下SET键看能否有闪烁光标,其每按一下它就会按秒、 分、时、星期、日、月、年的顺序移动到下一个位置,设置完了按一下就退出设置。在 设置状态下每按“ + ”键在对应的位置进行加1,每按“-”键在对应的位置进行减1, 经测试可以进行时间设置,按下此键时进入了时间设置状态,其效果图见图5-3所示。

图5—3仿真测试设置时间效果图
10仿真测试闹钟设置测试,按下ok键看能否有光标,其每按一下它就会按秒、
分、时的顺序移动到下一个位置,设置完了按一下就退出设置。在设置状态下每按
“+”键在对应的位置进行加1,每按“-"键在对应的位置进行减经测试可以进行 闹钟设置,按下此键时进入了闹钟设置状态,其效果图见图5-4所示。
图5—4.仿真测试设置闹钟效果图
11仿真测试温度报警功能,当温度低于-10° C或高于40° C时进行一级警告,红
灯亮,当温度低于-30° C或超过60。C时,进行二级报警,红灯亮,同时报警。其效果
图见图5-5所示。
图5-5温度报警功能效果图
12仿真测试,设置为2013年5月22号星期三9点半,温度为27° C。其效果图见 图5-6所示。
图5-6最终效果图
原文链接:http://www.jxszl.com/lwqt/yzlw/181806.html