51单片机多功能电子时钟.doc
题目: 51 单片机多功能电子时钟 摘要摘要 :本设计开发了一款具有日期、时间、星期和气温同步显示功能的电子时钟,并 且能设置闹钟、转换农历、显示相关节日.工作原理是主控 MCU(AT89C52)读取 实时时钟芯片 DS12CR887,获取时间信息,由全数字单总线结构温度传感器 DS18B20 读取温度信息,经 MCU 处理,送 LCD12864 显示;利用三线串口控制语音 模块 WT-588D-20SS 可定时读出时间和响应闹铃。关键字关键字: : DS12CR887 DS18B20 WT-588D-20SS 12864 1 1方案比较与论证方案比较与论证 当下,日历芯片很多,万年历实现方案很多,我们根据自己实际情况,提出 如下方案. 1.11.1 时间部分:时间部分: 方案一、利用单片机内部定时器产生秒信号,通过软件处理得到时间信息,送 LCD 显示.方案二、利用通用串行实时时钟芯片 DS1302 产生时间信息,利用 MCU 读取时间信 息,送 LCD 显示.方案三、通过实时时钟芯片 DS12CR887,获取时间信息,经 MCU 处理,送 LCD 显示. 方案一电路结构简单,可控性强,但断电后时间数据完全消失,再次上电后需重 新设定,且由于电路本身缺陷和附加干扰较多,时间误差较大.方案二电路结构简 单,时间精度较高,由于使用串行数据传输,节省 MCU 资源,但 DS1302 无内置电 池,掉电后,数据丢失,重新上电后需对时.方案三采用实时时钟芯片 DS12CR887,其内部具有内置锂电池,在掉电的情况下可以正常工作 10 年以上, 且带有非易失性 RAM,可以保证在掉电的情况下,用户的定时信息不会丢失;带有 温度补偿,保证时间数据的准确.经过综合考虑,我们认为方案三满足设计需求. 1.21.2 温度部分温度部分 由于只是测量气温,用数字温度传感器单总线结构 DS18B20 即可满足要求,该 器件采用单总线结构,且数字传输,可以与 CPU 直接接口,电路结构简便,可靠 性好. 1.31.3 主控部分主控部分 选用单片微控制器 AT89C52 作为主控.系统方案方框图如图 2.1 所示常熟理工电气与自动化工程学院课程设计- 2 -图 1.1 系统方案 2.2.方案实现方案实现 2.12.1 器件简介器件简介 (1)AT89C52 AT89C52 是 ATMEL 公司生产的通用低功耗 8 位 CMOS 微控器,具有 8051 内核和 8KB 的可编程 Flash 程序存储空间以及 256 字节 RAM.有 32 个通用 IO 口线和全双 工串口,两个数据指针、两个 16 位可编程计数器/定时器、8 个 2 级优先级中断源, 具有片内时钟电路,通过简单的外接器件即可实现时钟电路. (2)DS12CR887 引脚结构及其功能如图 3.1.常熟理工电气与自动化工程学院课程设计- 3 -图 2.1 DS12CR887 引脚结构 AD0-AD7:地址/数据总线 NC :空脚 MOT :总线模式选择 CS :片选信号 AS :地址锁存信号 R/W :写信号(intel 总线模式下) DS :读信号(intel 总线模式下) RESET :复位信号 IRQ : 中断请求输岀 VCC :+5V 电源 GND :电源地 DS12CR887 是美国 DALLAS 半导体公司生产的实时时钟芯片.采用 24 引脚双列 直插式的封装形式.芯片的晶体振荡器、振荡电路、充电电路和可充电锂电池等 一起封装在芯片内部,组成一个加厚的集成电路模块.电路通电时,其内部充电 电路便自动对其内部电池充电.可保证时钟数据 10 年内不会丢失.DS12C887 内部 设有方便的接口电路,接口设计简便,使其与各种微处理器的接口大大简化.使 用时无需外围电路元件,通过对 MOT 引脚的电平控制,可以实现与不同的计算机 总线连接.DS12C887 能够自动存取并更新当前的时间,CPU 可通过读取 DS12CR887 的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或 BCD 码初始化芯片的 10 个时标寄存器.其中 114 字节的非易失性静态 RAM 可供 用户使用,可以在控制器掉电的情况下,保存一些重要的数据.DS12C887 的 4 个 状态寄存器用来控制和指出 DS12CR887 模块当前的工作状态,除数据更新周期外, 程序可随时读写这 4 个寄存器.其内部结构如下图 3.2.常熟理工电气与自动化工程学院课程设计- 4 -图 2.2 DS12CR887 内部结构(3)DS18B20 DS18B20 是美国 DALLAS 半导体公司生产的可组网数字式温度传感器,在其内 部使用了在板(ON-B0ARD)专利技术.全部传感元件及转换电路仅集成在形如三 极管的一个集成电路内.DS18B20 采用单总线接口方式,与微处理器连接时仅需要 一条总线即可实现微处理器与 DS18B20 的双向通讯;支持多点组网功能,多个 DS18B20 可以并联在一条总线上,即可实现多点测温;在使用中不需要任何外围 元件.测温范围为55125,结果以 9 位数字量方式串行传送.DS18B20 测 温原理如图 3.3 所示.常熟理工电气与自动化工程学院课程设计- 5 -图 2.3 DS18B20 内部结构 图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信 号送给计数器 1.高温度系数晶振随温度变化其振荡率明显改变,所产生的信 号作为计数器 2 的脉冲输入.计数器 1 和温度寄存器被预置在55所对应的 一个基数值.计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当计 数器 1 的预置值减到 0 时,温度寄存器的值将加 1 ,计数器 1 的预置将重新 被装入,计数器 1 重新开始对低温度系数晶体振荡器产生的脉冲信号进行计数, 如此循环直到计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存 器中的数值即为所测温度.其内部带有非线性修正,确保温度数据的准确性. DS18B20 的测温分辨率为 0.5以 9 位数据格式表示,其中最低有效位(LSB) 由比较器进行 0.25比较,当计数器 1 中的余值转化成温度后低于 0.25时, 清除温度寄存器的最低位(LSB),当计数器 1 中的余值转化成温度后高于 0.25,置位温度寄存器的最低位(LSB),DS18B20 温度数据格式如表 3.1 所示.表 2.1 DS18B20 温度数据格式 DS18B20 采用 12 位二进制数据表示温度,分成两个字节,低字节低四位为小 数位,低字节高四位和高字节低四位组成温度信息的 8 位整数位,其中第一位 为符号位,为 0 表示温度为正值,为 1 表示温度为负值.当温度为负值时,数 据采用补码存放.高字节高四位无效,与符号位保持一致.温度与数据对应关系 如表 3.2 所示.常熟理工电气与自动化工程学院课程设计- 6 -表 2.2 部分温度对应数据 (4)WT588D-20SS WT588D 语音芯片是一款功能强大的可重复擦除烧写的语音单片机芯片。 WT588D 让语音芯片不再为控制方式而寻找合适的外 围单片机电路,高度集成的单片机技术足于取代复杂的外围控制电路。配套 WT588D VoiceChip 上位机操作软件可随意更换 WT588D 语音单片机芯片的任何一种控制模式,把信息下载到 SPI-Flash 上即可。软件操 作方式简洁易懂,撮合了语音组合技术,大大减少了 语音编辑的时间。完全支持在线下载,即便是 WT588D 通电的情况下,一样可以 通过下载器给关联的 SPI-Flash 下载信息,给 WT588D。语音芯片电路复位一下, 就能更新到刚下载进来的控制模式。 支持插入静音模式,插入静音不占用 SPI- Flash 内存的容量,一个地址位可插入 10ms25min 的静音。三线串口控制模式和三线串口控制控制端口扩展输出模式之间可通过发码切 换,三线串口控制模式下,能控制语音播放、停止、循环播放和音量大小,或者 直接触发 0219 地址位的任意语音,三线串口控制控制端口扩展输出可以扩展 输出 8 位,在两种模式下切换,能让上一个模式的最后一种状态保持着进入下一 个模式。常熟理工电气与自动化工程学院课程设计- 7 -图 2.4 WT588D-20SS 引脚2.22.2 硬件电路设计硬件电路设计 (1)电源部分 LM2596 开关电源芯片是降压型电源管理单片集成电路,能够输出 3A 的驱动电 流,同时具有很好的线性和负载调节特性。固定输出版本有 3.3V、5V、12V, 可 调版本可以输出小于 37V 的各种电压。 图 2.5-LM2596 转电压源+5V (2)AT89C52 最小系统电路常熟理工电气与自动化工程学院课程设计- 8 -图 2.6AT89C52 单片机最小系统 电路由震荡电路,复位电路和单片机构成最小系统.震荡电路为单片机提供工 作时钟,由石英晶体和补偿电容构成.由于语音部分需要 1200bps 波特率,石英 晶体选取 11.0592MHz,保证波特率零误差,补偿电容选取 30pF 瓷片电容.复位电 路在上电时为单片机提供复位信号,由 10uF 电容和 10K 电阻构成的 RC 充电电路 构成,当系统复位上电瞬间,电源通过电阻 R 为电容充电,在电阻上得到下降的 指数充电电压,由高电平经过一段时间到达低电平,提供单片机需要的高脉冲复 位信号.电源部分电容为去耦电容.EA 拉高,MCU 上电后,从内部程序存储器开始 执行. (3)DS12CR887 与 AT89C52 接口电路设计.图 2.7DS12CR887 与 AT89C52 接口电路DS12C887 的 AD0-AD7 为地址数据复用总线,与控制器地址数据总线(P0 口)直 接连接,R2 为上拉电阻;MOT 为总线模式选择引脚,接地选择 INTEL 总线连接方 式;R/W 在 INTEL 总线模式下位写使能,接控制器读信号 WR(P3.6)端;DS 在 INTEL 总线模式下为读使能信号,接控制器读信号 RD(P3.6)端;AS 为地址锁存, 接控制器地址锁存信号 ALE(30 脚)端;RST 接电源拉高,片选 CS 直接接地使能。常熟理工电气与自动化工程学院课程设计- 9 -(4) WT588D-20SS 与 AT89C52 接口电路设计图 2.8 WT588D-20SS 与 AT89C52 接口电路软件设置:三线串口控制模式。 控制端口定义:P01 为 DATA,P02 为 CS,P03 为 CLK。由 MCU 发送信息对 WT588D 进行控制。 BUSY 输出:P17 为 BUSY 忙信号输出端,可从上位机软件端设置为播放状态输出为 高电平或低电平。高电平时电压接近 VDD 供电电压。用于接发光二极管做放音状 态指示或忙信号判断。 供电电压:VDD=DC2.85.5V,VCC=DC2.83.6V。采用 DC3.3V 供电时,可以直 接短接 VDD 跟 VCC,采用 DC5V 供电时,VDD 端接 5V,VCC 端需要从 VDD 端串接两 个二极管以提供工作电压。VDD1 为 MCU 工作电压。如果 VDD1 跟 VDD 存在压差, 需要在 MCU 跟 WT588D-20SS 的通信线 DATA、CS、CLK 上串接电阻。 音频输出:PWM 输出方式,直接接扬声器。此种输出方式下,PWM+、PWM-均不能 短接到地或者接电阻电容到地。(4) LCD12864 与 AT89C52 接口电路设计常熟理工电气与自动化工程学院课程设计- 10 -图 2.9 LCD12864 与 AT89C52 接口电路带中文字库的 128X64 是一种具有 4 位/8 位并行、2 线或 3 线串行多种接口 方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示 分辨率为 128×64, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集. 利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图 形界面。可以显示 8×4 行 16×16 点阵的汉字. 也可完成图形显示.低电压低功 耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显 示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略 低于相同点阵的图形液晶模块。3.33.3 软件设计软件设计(1)功能分析根据课题要求,软件应该能实现以下功能: 1)驱动 LCD1602 显示. 2)从 DS12C887 中读取时间数据,并写入调时信息和闹钟信息. 3)扫描键盘,实现人机交互,满足用户调时、定闹的需求. 4)实现控制器与 DS18B20 单总线接口,读取温度信息. (2)设计流程 本课题所有程序均由 C 语言编写.开发环境为 keil uvision4. 1)主程序设计主程序流程图如图所示常熟理工电气与自动化工程学院课程设计- 11 -图 3.1 主程序流程图主程序作用是当系统上电后,首先对系统进行初始化(包括 MCU 的串行通信 设置和 LCD 的初始化)然后读取时间信息和温度信息,检查是否需要更新时间缓 冲存储区,如果系统处于正常显示模式,则更新时间缓存区,并同步显示,若系 统处于调整时间模式下,则停止对时间缓冲区的更新,显示时间与时间缓存区同 步,当退出调时模式时,更新到 DS12C887 的时标寄存器中.主程序还负责检测当 前时间是否为整点或等于设定报时时间,在整点或定时时间调用报时函数,实现 整点报时和定时。 2)DS12CR887 接口程序.常熟理工电气与自动化工程学院课程设计- 12 -DS12CR887 与控制器通过总线连接,主控器采取读写外部存储器的方法读取 时间信息和写入调时和定时信息.DS12CR887 的时标寄存器地址为 0-13 字节,具 体分布如图所示.图 3.14 DS12CR887 存储器结构 其中 10-13 字节分别为寄存器 A-D.其中寄存器 C、D 为只读. 寄存器 A 机构如图所示:表 3.5 DS12CR887 寄存器 A 结构 UIP 为更新标志位,标志芯片是否即将进行更新.当 UIP 为 1 时,表明更新即 将开始;为 0 时,表示在至少 244s 内芯片不会进行更新,此时可以通过读写相 应字节获取时间信息和设置信息.UIP 位为只读位且不受复位信号影响,通过把 B 寄存器中的 SET 位置 1 将 UIP 位清零并禁止时间更新.DV0-DV2 用来开关晶体振荡 器和复位分频器,本课题中不需设置.RS0-RS3 用于控制分频器输出,设置成不同 的值可以在 SQW 引脚得到不同的分频输出或得到周期性的中断(通过控制寄存器 B 实现).由于本设计不涉及,具体设置值与对应频率请参考 DS12C887 技术文档, 不在列举. 寄存器 B 结构如图所示.常熟理工电气与自动化工程学院课程设计- 13 -表 3.6 DS12CR887 寄存器 B 结构 当 SET 位为 0 时,时间正常更新;当 SET 位置 1 时,停止更新,此时,MUC 可 以对 DS12C887 进行初始化,该位不受复位信号影响.PIE 位为周期性中断使能位, 该位为 1 时,周期性中断使能;为 0 时禁止中断.本课题中此位置 0.AIE 位为闹 钟中断使能位本课题中由于没有使用中断,该位置 0.UIE 为更新完成中断使能位, 本设计中不考虑.SQWE 为方波使能信号,本设计不予处理.DM 位为数据格式选择 位,置 1 时时间数据以二进制格式存放,清 0 后,数据以 BCD 码格式存放.24/12 位为时间格式设置位,该位为 1 时,时间为 24 小时格式,为 0 时,时间为 12 小 时格式,该位不受复位信号影响.DSE 为夏令时使能位,本设计不予考虑 寄存器 C 结构如图所示.表 3.7 DS12CR887 寄存器 C 结构 其中 4 个有效位均为中断标志,本设计不予考虑,但当初始化完成并禁止中断时, 应将该寄存器读取清 0. 寄存器 D 结构如图所示表 3.8 DS12CR887 寄存器 D 结构 VRT 位指示片内锂电池状态,当为 0 时,说明内部锂电池耗尽,不能保证内部 RAM 中数据和时间数据的正确性.该位只读. 3)DS18B20 接口程序设计. DS18B20 设置寄存器结构如图 3.9 所示表 3.9 DS18B20 设置寄存器结构常熟理工电气与自动化工程学院课程设计- 14 -通过设置该寄存器中 R1、R0 的不同状态,可以得到不同的温度分辨率,分辨 率越高,转换所需时间也越长(见图).为简便起见,本课题中采用系统复位后的 默认值,即 R1R0=11,分辨率为 12 位数据.其余位为传感器内部使用,不能进行操 作.表 3.9 DS18B20 控制寄存器 R0、R1 设置与分辨率对应关系 由于 DS18B20 数据传送采取单总线方式,所以对操作时序和操作步骤有着严 格的要求,任何不符合步骤的操作,都可能造成 DS18B20 不响应.每次在对 DS18B20 进行操作时,都要进行初始化.初始化时序如图所示:图 3.15 DS18B20 初始化时序图 首先,控制器将总线拉低并保持 480s,释放总线,等待 15-60s 后,如 果复位成功,DS18B20 会将总线拉低,产生一个 60-240s 的低脉冲,控制器通 过检测低脉冲信号确定复位是否成功.复位成功后,在上拉电阻的作用下, DS18B20 会恢复到高电平静止状态. 在静止状态,总线在内部上拉电阻作用下, 保持高电平.当控制器进行读写操作时,先将总线拉低 1s 以上,DS18B20 回应 一个高电平应答信号,控制器检测到应答信号后,即可对总线进行操作. 向 DS18B20 读写一位数据时序如图所示:常熟理工电气与自动化工程学院课程设计- 15 -图 3.16 DS18B20 读写数据时序图 写”0”时,控制器将总线拉低 30s 以上即可,写”1”时,控制器将总线拉低 15s,然后释放总线.读数据时,控制器将总线拉低 15s,然后释放总线并读 取总线上的数据.4)LCD 显示驱动程序 a.基本操作时序: 读状态: 输入:RS=L,RW=H,E=H 输出:D0-D8=状态字 写指令: 输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲 输出:无 读数据: 输入:RS=H,RW=H,E=H 输出:D0-D7 数据 写数据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲 输出: 无 b.状态字说明 STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0表 3.10 LCD 状态字寄存器结构 STA0-STA6:当前数据地址指针的数值 STA7:读写操作使能 1:禁止,0:允许 由于 LCD 指令集比较简单,不再详细介绍,请参考 1602 字符型液晶屏资料. c.LCD 复位流程如图所示:常熟理工电气与自动化工程学院课程设计- 16 -图 3.17 LCD 初始化流程图 初始化完成后,即可对液晶显示器进行操作,具体程序略.4) WT588D-20SS 三线串口驱动程序 Send_threelines(unsigned char addr) /三线发码子程序 unsigned char i; RST=0; delay1ms(5); RST=1; delay1ms(20); /* 复位拉高 20ms*/ CS=0; delay1ms(5); /* 片选拉低 5ms */ for(i=0;i>=1; delay150us(); /* 150us */ SCL=1; delay150us(); 常熟理工电气与自动化工程学院课程设计- 17 -CS=1; 设计总结设计总结从本设计一开始,我一直保持着循序渐进的态度,分模块搭建电路和编写程序,然后进行组装和联调.整个过程基本顺利,没有遇到太大困难.但也由于考虑不周和工作失误,走了一些弯路. 设计需要我们有足够的耐心和精力,要充分运用各种资源查找我们所需的资料。仿真时,要学习用软件来模拟实际电路并能够通过现象来解决存在的问题。得到了一次很深刻的锻炼,从仿真不出效果到最终的出效果,使己建立了信心;实物电路的波折不断,虚心探讨,主动请教,从无奈躁动、想放弃,到最后被迫熟悉仪器更多的使用,最后帮助 2 组检查排除错误的喜悦。更值得庆幸的是,了解了一番电子设计的一般思路方法,方案的讨论仿真,实际电路的步步为营、个个击破,积极的坚持而不是维持,自信心的建立.参考文献:1AT89C52datasheet. http:/www.datasheet5.com/view- C8F5FA7E0687CD94.html2谭浩强.C 程序设计教程 M .清华大学出版社 2007.73 郭天祥.51 单片机 C 语言教程 M . 电子工业出版社 20124DS12C887datasheet. http:/www.datasheet5.com/view- 5B03B26DFE0F52C8.html5DS18B20datasheet. http:/www.datasheet5.com/view- 228FF2CBB68650F1.html5 WT588D-20SS datasheet.http:/wenku.baidu.com/view/b2ca91ea102de2bd97058803.html