《C语言单片机 基于单片机的多功能时钟设计.doc》由会员分享,可在线阅读,更多相关《C语言单片机 基于单片机的多功能时钟设计.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编号 #毕业论文题 目基于单片机的多功能时钟设计与实现学生姓名#学 号系 部电子工程系专 业应用电子技术班 级#指导教师#顾问教师#二一年六月摘 要随着生活节奏的加快,人们时间观念的加强,时钟已经成为人们日常生活中不可或缺的一部分,而如何在时钟的基础上,根据人们生活的需要增加相应的功能以及方便于人们的生活,成为时钟设计方面的重点。单片机以其强大的功能,低廉的价格成为许多多功能电子产品的首选。本文探讨了一种带数字温度计的语音时钟的实现方案。介绍了以AT89C52单片机为核心,控制实时时钟芯片DS1302,数字温度芯片DS18B20,语音芯片ISD4003-4和液晶显示模块OCM12864-1,实
2、现时间和闹钟的显示与调整,温度显示和语音报时。整个系统的软件设计在Keil环境下以C语言实现关键词:实时时钟;语音报时;液晶显示;数字温度芯片AbstractWith the quickening pace of life, it enhanced sense of time, the clock has become an indispensable part of daily life. How the clock basis, according to peoples live need to increase accordingly, function to facilitate pe
3、oples lives, become the focus of the clock design. Microcontroller with its powerful features, low price to become the first choice for many multi-functional electronic products. The paper discusses a kind of realization of speech chronopher with digital thermometer. It introduces realizing displayi
4、ng and adjusting time and alarm-time, displaying temperature and giving time by speech with AT89C52 MCU as the core, controlling RTC Chip DS1302, DTS Chip DS18B20, ChipCorder ISD4003-4, and LCD module. All the software design of the system is took out under the environment of Keil with C Language.Ke
5、ywords: RTC; speech chronopher; LCD; DTS目 录摘 要IABSTRACTII第一章 绪论11.1 发展现状、目的及意义11.2 设计内容1第二章 系统硬件设计32.1 整体框架概述32.2 主控器AT89C5232.2.1 概述32.2.2 主要性能42.2.3 功能性描述42.3 实时时钟芯片DS130262.3.1 概述62.3.2 主要功能62.3.3 功能性描述62.4 温度传感器DS18B2072.4.1 概述72.4.2 功能性描述72.5 液晶显示模块1286472.5.1 概述72.5.2 最大工作范围72.6 语音芯片及功放82.6.1
6、概述82.6.2 芯片内部框图以及电路图82.6.3 芯片管脚92.6.4 ISD4003-4指令表11第三章 系统软件设计133.1 主程序设计133.2 DS1302143.3 温度芯片DS18B20143.4 OCM12864液晶显示163.5 语音芯片ISD4003163.6 源程序17第四章 系统调试254.1 Proteus软件介绍254.2 本设计调试254.2.1 硬件调试254.2.2 软件调试26第五章 结论与展望275.1结论275.2 展望27致谢28参考文献29第一章 绪论1.1 发展现状、目的及意义单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重
7、视和关注,应用很广、发展很快。单片机具有体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。单片机在出现时,Intel公司就给其单片机取名为嵌入式微控制器(embedded microcontroller)。单片机的最明显的优势,就是可以嵌入到各种仪器、设备中。这一点是
8、巨型机和网络不可能做到的。单片机在内部已集成了越来越多的部件,这些部件包括一般常用的电路,例如:定时器,比较器,A/D转换器,D /A转换器,串行通信接口,Watchdog电路,LCD控制器等。 近年来单片机技术飞速发展,产品质量越来越好,而成本却越来越低,现阶段许多复杂、多用的电子器件普遍采用单片机来实现。随着半导体工艺技术的发展及系统设计水平的提高,单片机还会不断产生新的变化和进步,最终人们可能发现:单片机与微机系统之间的距离越来越小,甚至难以辨认。同时,随着人们生活节奏的加快,时钟已经成为人们日常生活中的必需品,许多家用电器都带着时钟模块,而人们也不再满足于仅仅具有时间显示功能的时钟,对
9、时钟功能的要求也越来越全面,单片机以其强大的功能成为多功能电子时钟的首选,为电子时钟的功能扩展提供了强大的支持,实现一物多用,提高电子时钟的使用价值。当然们不再满足于电子时钟的计时显示功能时语音时钟在社会生活中已经得到了广泛应用,本文探讨的系统即为其中一种,给出的实现方案和系统设计过程中实现的单片机模拟单线总线通信方式,单片机模拟SPI通信方式,有一定参考价值。此外,文中探讨的系统也对传统的语音时钟做了扩充,增加了数字温度计模块。本设计详细介绍了该系统的组成和基本原理,中带你介绍了硬件设计的思想和软件设计的思路,保证在系统功能齐全,性能良好的前提下,最大限度的简化电路,降低系统的整体成本,提高
10、系统的可靠性!1.2 设计内容基于单片机的多功能时钟设计,主要探讨了一种带数字温度计的语音时钟的实现方案。本方案采用单片机AT89C52作为控制单元,与数字温度芯片DS18B20接口获得温度数据,与实时时钟芯片DS1302接口获得时间/日历数据,通过与液晶模块OCM12864-1接口显示温度,时间和日历。按键中断模块包含四个按键,分别与单片机INT0,INT1,T0,T1引脚连接,实现四个外部中断源,用以调整时间和闹钟,开关闹钟和控制语音报时。语音报时通过语音芯片ISD4003-4和扬声器实现。整个系统的软件设计在Keil环境下以C语言实现。第二章 系统硬件设计2.1 整体框架概述系统结构如图
11、2-1所示。本方案采用单片机AT89C52作为控制单元,与数字温度芯片DS18B20接口获取温度数据,与实时时钟芯片DS1302接口获取时间/日历数据,通过与液晶模块OCM12864-1接口显示温度、时间和日历。图1中的按键中断模块包含了四个按键,分别与单片机的INT0,INT1,T0,T1连接,实现四个外部中断源,用以调整时间和闹钟,开关闹钟和控制语音报时。图2-1 系统结构图2.2 主控器AT89C522.2.1 概述AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读
12、程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本
13、。AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。2.2.2 主要性能(1) 兼容MCS51指令系统,8k可反复擦写(1000次)Flash ROM;(2) 32个双向I/O口,256*8bit内部RAM;(3) 3个16位可编程定时/计数器中断,时钟频率0-24MHz;(4) 2个串行中断,可编程UART串行通道;(5) 2个外部中断源,共8个中断源;(6) 2个读写中断口线,3级加密位;(7) 低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。2.2.3 功能性描述AT89C52为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在
14、内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。AT89C52的主要管脚有:(1) XTAL1(19 脚)和XTAL2(18 脚):振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端;P0P3:为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义
15、为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。(2) P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访
16、问期间激活内部上拉电阻。在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX), P2 口:P2 是一个带有内部上拉电阻的8 位
17、双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输
18、出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 ,P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 (3) RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 (4) ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号
19、,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条 MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。 (5) PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数 据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问
20、外部数据存储器,将跳过两次PSEN信号。(6) EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000HFFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。 (7) XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 (8) XTAL2:振荡器反相放大器的输出2.3 实时时钟芯片DS13022.3.1 概述DS1302由美国
21、DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路,它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的
22、资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。2.3.2 主要功能DS1302可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。2.3.3 功能性描述DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动
23、置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。2.4 温度传感器DS18B202.4.1 概述温度传感器DS18B20是由美国DALLAS公司生产的可组网数字温度传感器芯
24、片封装。2.4.2 功能性描述独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 55125,固有测温分辨率0.5。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温 。(1)工作电源: 35V/DC;(2)在使用中不需要任何外围元件;(3)测量结果以912位数字量方式串行传送;(4)不锈钢保护管直径 6;(5)适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温;(6)标准安装螺纹 M10X1, M12
25、X1.5, G1/2”任选;(7)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接;2.5 液晶显示模块128642.5.1 概述OCM12864液晶显示模块是128*64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8为标准数据接口、6条控制线及电源线。采用KSO108控制IC 外观尺寸:1136511mm(ocm12864-1), 937010mm(ocm12864-2) 787010mm(ocm12864-3)视域尺寸:73.438.8mm(ocm12864-1) 70.738mm(ocm12864-2), 6444mm(ocm12864-3)2.5.2
26、 最大工作范围(1) 逻辑工作电压(Vcc):4.55.5V;(2) 电源地(GND):0V;(3) LCD驱动电压(Vee):0-10V;(4) 输入电压:VeeVdd;(5) 工作温度(Ta):055(常温) / -2070(宽温);(6) 保存温度(Tstg):-1065 .2.6 语音芯片及功放2.6.1 概述ISD4003-4单片录放时间为4分钟,其通信方式为SPI方式(详见ISD公司关于该芯片的数据手册),本系统中以单片机模拟SPI方式与其接口。单片机对其写入16位格式命令时序。2.6.2 芯片内部框图以及电路图图2-2 ISD4003-4内部框图图2-3 语音模块电路图2.6.3
27、 芯片管脚图2-4 芯片管脚排列图引脚描述:l 电源(VCCA,VCCD): 为使噪声最小,芯片的模拟和数字电路使用不同的电源总线,并且分别引到外封装不同管脚上,模拟和数字电源端最好分别走线,尽可能在靠近供电端处相连,而去耦合电容应尽量靠近器件。l 地线(VSSA,VSSD):芯片内部的模拟和数字电路也使用不同的地线。几个VSSA尽量在引脚焊盘上相连,并用低阻通路连到电源上,VSSD也用低阻通路连到电源上。l 同相模拟输入(ANA IN+): 录音信号的同相输入端,输入放大器可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3K电阻输入阻抗决定芯片频
28、带的低端截止频率。差分驱动时,信号最大幅度为峰峰值16 mV。l 反相模拟输入(ANA IN-): 差分驱动时,这是录音信号的反相输入端。信号通过耦合电容输入,最大幅度为峰峰值16 mV,本端的标称输入阻抗为56K,单段驱动时,本端通过电容接地,两种方式下,ANAIN+、ANAIN-端的耦合电容值应相同。l 音频输出(AUD OUT): 提供音频输出,可驱动5K的负载。l 片选(SS): 此端为低,即向该ISD4000芯片发送指令,两条指令之间为高电平。l 串行输入(MOSI): 此端为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD输入。l 串行输出(MISO):
29、ISD的串行输出端。ISD未选中时,本端呈高阻态。l 串行时钟(SCLK): ISD的时钟输入端,由主控制器产生,用于同步MOSI和MISO的数据转输。数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。l 中断(/INT): 漏极开路输出,ISD在任何操作(包括快进)中检测到EOM或OVF时,本端变低并保持。中断状态在下一个SPI周期开始时清除。中断状态也可用RINT指令读取。l OVF标志指示ISD录、放操作已到达存储器的末尾。l EOM标志只在放音中检测到内部的EOM标志时,此状态位置1。l 行地址时钟(RAC): 漏极开路输出。每个RAC周期表示ISD存储器的操作进行了一行(ISD4
30、000系列中的存储器共600至2400行)。该信号175ms保持高电平,低电平为25ms。快进模式下,RAC的218.75us是高电平31.25us为低电平。该端用于存储管理技术。 l 外部时钟(XCLK): 本端内部有下拉元件,芯片内部的采样时钟出厂前已调校,误差在1%内。商业级的芯片在整个温度和电压范围内,其频率变化在2.25%内。工业级芯片在整个温度和电压范围内,频率变化在-6/+4%内,建议使用稳压电源。若要求更高精度,可从本端输入外部时钟(如前表所列)。由于内部的防混淆及平滑滤波器已设定,故上述推荐的时钟频率不应改变。输入时钟的占空比无关紧要,因内部首先进行了分频。在不外接时钟时,此
31、端必须接地。l 自动静噪(AMACP): 当录音信号电平下降到内部设定的某一阈值以下时,自动静噪功能使信号衰减,这样有助于减小无信号(静音)时的噪声。通常,本端对地接1uF的电容,构成内部信号电平峰值检测电路的一部分。检出的峰值电平与内部设定的阈值作比较,决定自动静噪功能的翻转点。大信号时,自动静噪电路不衰减,静音时衰减6dB。1uF的电容也影响自动静噪电路对信号幅度的响应速度。本端接VCCA则禁止自动静噪。2.6.4 ISD4003-4指令表表2.1 ISD4003-4指令表指令5位控制码,操作摘要POWERUP00100 上电:等待TPUD后器件可以工作SETPLAY11100 从指定地址
32、开始放音必须后跟PLAY指令使放音继续PLAY11110 从当前地址开始放音(直至EOM或OVF)SETREC10100 从指定地址开始录音必须后跟REC指令使录音继续REC10110 从当前地址开始录音(直至OVF或停止)SETMC11101 从指定地址开始快进必须后跟MC指令使快进继续MC11111 执行快进,直到EOM若再无信息,则进入OVF状态STOP0X110 停止当前操作STOPPWRDN0X01X 停止当前操作并掉电RINT0X110 读状态:OVF和EOM.第三章 系统软件设计3.1 主程序设计包含主程序设计、语音芯片录放音程序设计、实时时钟程序设计、温度芯片程序设计、液晶显示
33、程序设计五部分。图3-1 主程序流程图图3-1所示为主程序流程图。在此,仅将流程图中的重点做以解释说明。由于系统中要用到四个外部中断,而AT89C52只有2个中断源引脚INT0和INT1,所以需要另外扩展2个中断源引脚。在本系统中,将计数引脚T0和T1扩展为2个中断源引脚。具体方法如下:1)将定时器/计数器T0和T1设定为计数功能。2)将定时器/计数器T0和T1设定为方式2,即自动加载8位计数定时模式。3)设定TL0和TL1计数初值为0xFF,设定TH0和TH1加载数据为0xFF。4)开启定时器/计数器中断。将计数中断0、1设定为下降沿触发方式。每当T0或T1引脚出现负跳变就会产生一次中断,达
34、到了扩展2个中断源的目的。3.2 DS1302DS1302的引脚中VCC1为后备电源,VCC2为主电源。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),
35、 SCLK为时钟输入端。图3-2 单片机读DS1302的时序图3-3 单片机写DS1302的时序3.3 温度芯片DS18B20 温度数据由单片机从数字温度芯片DS18B20获取。DS18B20的通信方式为单线总线方式(详见美国DSLLAS公司关于该芯片的数据手册),本系统中以单片机模拟单线总线方式实现与其接口。单片机以字节为单位对其进行读写操作,读写一个字节分成8个连续的位读写时隙实现。单片机读写DS18B20的位时隙如图3-4、3-5所示。图3-4 主机读“0”时隙和读“1”时隙图3-5 主机写“0”时隙和写“1”时隙单片机对DS18B20的操作需遵循以下步骤:1)复位,即单片机发出复位脉冲
36、(将总线从高电平拉到低电平并保持480微秒到960微秒,然后释放),等待接收DS18B20的存在脉冲(DS18B20将总线从高电平拉低,保持60微秒到240微秒)。2)发送ROM操作指令,即读ROM(33H)、匹配ROM(55H)、忽略ROM(CCH)和搜素ROM(F0H)其中之一。3)发送存储器操作指令,即读便笺存储器(BEH)、写便笺存储器(4EH)、复制便笺存储器(18H)、温度转换(44H)、回写E2PROM的值到便笺存储器(B8H)和读电源供给(B4H)其中之一。4)处理或数据操作。要注意,DS18B20进行一次12位的温度转换需要750毫秒,如果温度转换没有结束就去读温度数据,将不
37、能得到正确的温度值,且会终止正在进行的温度转换。所以,必须等待足够的时间,让温度转换完成。本系统中,重复ShowTimes次读取时间数据,显示时间和温度等操作来实现这个等待时间,即图2中连接点处的循环。3.4 OCM12864液晶显示OCM12864液晶显示模块是128*64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8为标准数据接口、6条控制线及电源线。采用KSO108控制IC。图3-6 AT89C52读OCM12864-1的时序图3-7 AT89C52写OCM12864-1的时序3.5 语音芯片ISD4003语音报时和闹铃功能由语音芯片ISD4003-4实现。ISD4
38、003-4单片录放时间为4分钟,其通信方式为SPI方式(详见ISD公司关于该芯片的数据手册),本系统中以单片机模拟SPI方式与其接口。单片机对其写入16位格式命令时序如图3-8所示。图3-8 单片机写16位格式命令时序图单片机启动ISD4003-4放音需遵循以下步骤:1)发送上电指令;2)等待上电延时时间;3)发送设定放音起始地址指令和放音起始地址,16位二进制为11100,A表示地址位;4)发送放音指令,16位二进制为11110,X表示无作用。在本系统中,首先选取不同的起始地址分别录入语音“现在时间”、“温度”、“摄氏度”、“0”到“10”的语音、“点”和“分”,然后再录入闹铃音。闹钟开启状
39、态下,若时间到达闹钟设定时间,则按指定地址播放闹铃音。若发生计时中断T0,将中断发生时的时、分和温度值分离为十位和个位两部分,再分别计算出对应的语音存储地址,按照十位的语音,“10”的语音,个位的语音进行语音输出。每次语音报时以输出语音“现在时间”开始,接着按上述方式分别输出时和分的语音,再输出语音“温度”,然后输出温度值的语音和语音“摄氏度”。3.6 源程序#include reg52.h#include sbit CS1=P23;/2.3sbit CS2=P24;sbit DQ=P10;#define Page0 0xB8#define Line0 0xC0#define Column0
40、0x40/*ROM FUNCTION COMMANDS*/#define ReadROM 0x33 /读DS18b20ROM内容指令#define MatchROM 0x55 /匹配Master输出的ROM#define SkipROM 0xCC /跳过ROM操作#define SearchROM 0xF0/查获单线总线上的DS18B20序列号#define AlarmROM 0xEC /寻找温度超过报警限额的DS18B20/*MEMORY COMMAND FUNCTIONS*/#define WriteScratchpad 0x4E /写Memory,一次要写入TH,TL,CONGIG对应的
41、Memory#define ReadScratchpad 0xBE /读Memory,一直读到9字节结束或者Master停止读#define CopeScratchpad 0x48 /拷贝Memory到对应的TH,TL,CONGIG#define ConvertT 0x44 /启动温度转换#define PowerSupply 0xB4 /查看是否有外部电源/*以下为液晶文件里的函数*/unsigned char ReadStatus(void);void Open(void);void Close(void);void IsReset(void);void IsBusy(void);void
42、 IsOpen(void);void WriteData(unsigned char Data);void WriteYJInstr(unsigned char Data);void ClearPage(unsigned char volatile Page) reentrant;void Delay(unsigned char Time);void DispCharacter(unsigned char *CharacterArray ,unsigned char Width , unsigned char y ,unsigned char StartLine) reentrant;unsi
43、gned char ReadData(unsigned int Column,unsigned char Page);/*以下为DS18B20文件里的函数*/void Dlay(unsigned char Time);void Write1820Instr(unsigned char Instruction);void Init(void);unsigned char ReadData(void);/*以下为DS1302文件里内容*/#define ReadCalendar 0x81/读日历和时钟命令(指向第0个地址)#define WriteCrlReg 0x8E/写控制寄存器命令#defi
44、ne ProtectCancl 0x00/写保护取消命令#define WriteTrickCharge 0x90/写充电方式寄存器命令 #define WriteCLKBurst 0xBE/写突发模式寄存器命令#define NullData 0xFF/无数据#define WriteSecond 0x80/写秒void WriteInstruction(unsigned char Instruction ,unsigned char Data);/写入命令与命令的参数void TimerInit(void);/初始化并取消写保护unsigned char ReadTimerData(uns
45、igned char Instruction);void BurstRead(unsigned char Instruction,unsigned char *Address);/*一下为中断文件里的内容*/void InterruptInit(void);/*以下为全局变量*/unsigned char Time7=0x56,0x34,0x12,0x09,0x11,0x07,0x08;/DS1302的读数存储在这里unsigned char AdjustTime7=56,34,12,9,11,7,8;/DS1302的读数存储在这里unsigned char AlarmTime7=10,35,
46、12,9,11,7,8;/DS1302的读数存储在这里unsigned char code Limit7=59,59,23,31,12,7,99;unsigned char code StartData7=0,0,0,1,1,1,0;extern unsigned char ClockElement;extern unsigned char AlarmElement;extern unsigned char code Number1016;extern unsigned char code DateAndTime732;extern unsigned char code Indicator32;extern unsigned char code