1、成都理工大学工程技术学院毕业论文数字万年历设计与实现作者姓名:专业名称:电气工程及其自动化指导教师:数字万年历设计与实现摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能。电子万年历设计是基于单片机进行的,可以显示年、月、日、时、分、秒、周及温度信息,具有可调整日期和时间功能。设计包含AT89S52单片机模块、LCD数码管模块、键盘模块、DS1302模块、数字式温度传感器DS18B20模块。AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用35V电压供电。LCD数码管动态扫描,对于显示数字最合适
2、,价格适中,而且采用动态扫描法与单片机连接时,占用的单片机口线少。DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。数字式温度传感器DS18B20仅需要一条数据线进行数据传输,易与单片机连接简化系统电路.数字式温度传感器还具有测量精度高、测量范围广等优点。关键词:AT89S52 DS1302 DS18B20 LED数码管 AbstractElectronic calendar day time is a very wide range of tools, the more popular in m
3、odern society more and. It can be years, months, days, weeks, hours, minutes and seconds for time, but also has a leap year compensation and other functions.Electronic calendar design is based on SCM, can display year, month, day, time, minutes and seconds, week and temperature information, which ca
4、n adjust the date and time functions. Design including AT89S52 MCU module, LCD digital tube module, keyboard module, DS1302 module, digital temperature sensor DS18B20 module. AT89S52 microcontroller as the core, small power consumption, can work in low-voltage 3V, voltage can choose 35V voltage supp
5、ly. LED digital tube dynamic scanning, the most suitable for digital display, moderate price, and using dynamic scanning method is connected with the MCU, microcontroller port occupied less lines. DS1302 has a long service life, small error. For digital electronic calendar using visual digital displ
6、ay, can display year, month, day, Sunday, when, minutes and seconds and temperature information, but also a time calibration functions. Digital temperature sensor DS18B20 requires only one data line for data transmission, easy to be connected with the single-chip microcomputer to simplify the system
7、 circuit. The digital temperature sensor has high measuring precision, wide measuring range etc.Keywords: AT89S52, DS1302, DS18B20, digital tube LED目录摘要IIAbstractIII目录IV前言11总体设计方案21.1 设计方案21.2 方案比较论证21.3 总体设计方框图32设计原理与分析42.1 单片机主控制器42.2 温度传感器芯片52.3 时钟芯片DS130292.4 16*2LCD液晶显示1602123硬件电路163.1 单片机主控制模块
8、的设计163.2 时钟电路模块的设计163.3 温度采集模块设计173.4 功能按钮设计183.5 16*2 LCD1602液晶显示电路设计184系统软件设计204.1 系统模块的功能分划分204.2 总体程序流程框图204.3 时钟调整时间的流程图214.4 温度转换流程图22总结24致谢25参考文献26附件1总体电路图27附件2源程序28- IV -前言随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。其中电子万年历就是一个典型的例子。万年历是采用数字电路实现对,时,分,秒。数字显示的计时装置,广泛用于个人家庭,
9、车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作。但是考虑到用单片机配合时钟芯片,可制成功能
10、任意的电子钟,而且可以做到硬件简单、成本低廉。所以本系统采用了以广泛使用的单片机AT89S52技术为核心,配合时钟芯片DS1302。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的数字钟可以显示时间、设置闹铃功能之外。本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行
11、各功能模块的编写。本设计中我重点研究实现了单片机+时钟芯片这种模式的万年历,从原理上对单片机和时钟芯片有了深一步的认识,这些基本功能完成后,在软件基础上实现时间显示。1总体设计方案用AT89S52处理产生内部时钟数据或者读取外部时钟数据和采集外部传感器的信息进行处理,并暂时寄存在其内部的储存器中,再通过单片机调用内部RAM的数据并送到LCD数码管上显示出来。1.1 设计方案方案一:单片机一般的工作频率在12MHz左右,而且内部还有定时、计数器,可以产生精确的1S定时,由此可以用定时中断的方式产生精确的1S时间,秒位不断的加1,再设计分、时、星期、日、月、年之间的进制,使产生进位。本方案只需要单
12、片机最小系统加上显示电路,再设计简单的程序算法就可以实现。对于测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理。在显示电路上,采用数码管就可以将年月日星期时分秒和室内温度显示出来方案二:万年历时钟采用单片机控制DS1302实时时钟芯片,能达到走时准确且掉电不丢失数据的。DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES(复位)2 I/O (数据线)3 SCLK(串行时钟)。温度计要灵敏反映室温的变化这样可采用单片机与数字式温度传感器DS18B20通讯,采集温度数字信号进行
13、处理。DS18B20通过一个单线接口发送或接受信息,因此在单片机与DS18B20之间仅需一条连接(加上地线)。在显示电路上,采用16*2的LCD显示。1.2 方案比较论证对于方案一,单片机虽然可以产生精确的秒信号,但是单片机在处理闰年上会比较麻烦,加之一旦单片机断电后,所有的时间都要重新调整。对于测温电路,采用热敏电阻的输出电压-温度特性,要加上A/D转换,温度传感信息才能被单片机所接受,这种设计需要用到A/D转换电路,感温电路比较麻烦。在显示电路上,采用LCD数码的话要用到单片机的许多I/O口,甚至I/O不够用,还需要接上其它芯片大量扩展I/O口,这是一个弊处。对于方案二,单片机不用去产生时
14、钟的数据,时钟的数据由DS1302独立产生,并寄存在其内部的寄存器上,单片机可以通过三总线与它通讯,不仅可以对它进行读取实时时钟数据,还可以对它进行编程,设置它的工作模式。单片机只是处理从DS1302读出来的数据并送显示,大大减少了单片机的负担。而且DS1302可以通过后备电池继续工作,内部的时钟还在走,下次启动后不用去调整时钟,方便使用。基于同样的原理,DS18B20也是一个独立的传感器,只要单片机配置它的工作状态后它就可以独立工作,内部已经把模拟信号转换成数字信号,并把数字信号储存在其内部寄存中。同样,单片机通过单总线与它通讯,可以处理912位的温度数字数据。在显示电路上,采用16*2 L
15、CD液晶显示器,能容纳年月日星期时分秒温度等信息的显示。LCD显示器只需占用11个I/O口就可以工作了,不用其它扩展芯片,总体上使电路简单化。1.3 总体设计方框图图2.1 总体设计方框图总体的方框图如图2.1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用16*2的LCD液晶显示屏实现年、月、日、星期、时、分、秒、温度的显示。2设计原理与分析本次设计的万年历系统主要包括单片机主控制器、温度传感器芯片、时钟芯片DS1302芯片、16*2LCD显示芯片。2.1 单片机主控制器AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用A
16、tmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器
17、、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP (In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52具有如下特点:40个引脚,8k
18、 Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。2.2 温度传感器芯片1. 单线温度传感器DS18B20介绍DS18B20温度传感器是美国DALLAS半导体公司最新推
19、出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:(1) 独特的单线接口仅需要一个端口引脚进行通信;(2) 多个DS18B20可以并联在唯一的三线上,实现多点组网功能;(3) 无须外部器件;(4) 可通过数据线供电,电压范围为3.05.5V;(5) 零待机功耗;(6) 温度以9或12位数字;(7) 用户可定义报警设置;(8) 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;(9) 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DSl8
20、B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线(和地线)。DSl8B20的电源可以由数据线本身提供而不需要外部电源。因为每一个DSl8B20在出厂时已经给定了唯一的序号,因此任意多个DSl8B20可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。DSl8B20的测量范围从-55摄式度到+125摄式度,增量值为0.5摄式度,可在ls(典型值)内把温度变换成数字。每一个DSl8B20包括一个唯一的64位长的序号,该序号值存放在DSl8B20内部的ROM(只读存贮器)中
21、。开始8位是产品类型编码(DSl8B20编码均为10H)。接着的48位是每个器件唯一的序号。最后8位是前面56位的CRC(循环冗余校验)码。DSl8B20中还有用于存储测得的温度值的两个8位存贮器RAM,编号为0号和1号。1号存贮器存放温度值的符号,如果温度为负(摄式度),则1号存贮器8位全为1,否则全为0。0号存贮器用于存放温度值的补码,LSB(最低位)的1表示0.5摄式度。将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-55摄式度-125摄式度)。DSl8B20的引脚如图2.2所示。每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总
22、线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式则多用一根导线,但测量速度较快。图2.2 DS18B20引脚图2. DS18B20的测温原理器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-5
23、5所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致等于被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲
24、)发ROM功能命令发存储器操作命令处理数据。64位ROM的结构开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入报警上下限。3. 温度计算 DS18B20用9位存贮温值度,最高位为符号位,如图2.3为DS18B20的温度存储方式,负温度S=1,正温度S=0。如:00AAH为+85摄式度,0032H为25摄式度,FF92H为55摄式度。图2.3 18B20用9位的温度存储方式 DS18B20用12位存贮温值度,最高位为符号位,如图2.4为DS18B20的
25、温度存储方式,负温度S=1,正温度S=0。如:0550H为+85摄式度,0191H为25.0625摄式度,FC90H为-55摄式度。图2.4 18B20用12位的温度存储方式DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EEROM。高速暂存RAM的结构为8字节的存储器,结构如图2.5所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。图2.5 DS18B20存储器结构EEPROMDS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该
26、字节各位的定义如图2.5所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。由表2.1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。表2.1 DS18B20温度转换时间表R1R0分辨率/位温度最大转向时间/ms00993.750110187.510113751112750高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检
27、验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值;表2.2为部分温度值对应的二进制温度数据:表2.2 部分温度值对应的二进制温度数据温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850
28、000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H2.3 时钟芯片DS13021. 时钟芯片DS1302的性能DS1302是DALLAS
29、公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供秒分时日月年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式,DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES复位2 I/O 数据线3 SCLK串行时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW。(1) 实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力还有闰年调整的能力;(2)
30、318位暂存数据存储RAM;(3) 串行I/O口方式使得管脚数量最少;(4) 宽范围工作电压2.05.5V;(5) 工作电流2.0V时,小于300mA;(6) 读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式;(7) 8脚DIP封装或可选的8脚SOIC封装根据表面装配,如图2.6所示。图2.6 DS1302的引脚图(8) 简单3线接口;(9) 与TTL兼容Vcc=5V;(10) 可选工业级温度范围-40+85;2. 时钟芯片DS1302的工作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;图2.7
31、为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5是操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(1) DS1302的控制字节DS1302的控制字如图2.7所示。
32、控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1是指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出图2.7 DS1302的控制字(2) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图2.8所示:图2.8 DS1302读/写时序图(3)
33、DS1302的数据读写无论是从DS1302中读一个数据,还是写一个字节数据到DS1302中,都要先写一个命令字到DS1302中。即通过SCLK引脚(7号引脚)向DS1302输入8个脉冲,把I/O引脚(6号引脚)上的命令字写入DS1302。为了启动数据传输,引脚(5号引脚)应为高电平。在将由0置1的过程中,SCLK引脚必须为逻辑0。然后才能进行读写操作。I/O引脚上的数据在SCLK的上升沿串行输入(写数据到DS1302),在SCLK的下降沿串行输出(读数据)。(4) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及
34、其控制字见表2.3所示:表2.3 DS1302的日历、时间寄存器写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H010时时86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10年年8EH8FHWP0000000此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟触发寄存器及与RAM相关的寄存器等。时钟触发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,
35、其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为触发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。2.4 16*2LCD液晶显示16021. 1602采用标准的16脚接口,其中:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写
36、操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读取信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚。2. 1602液晶模块内部的控制器共有11条控制指令,如表2.4所示:表2.4 控制指令指令RSR/WD7D6D5D4D3D2D1D0清显示0000000001光标返回000000001*置输入模式000000011/DS显示开/关控制0000001DCB光标或字符移位000001S/CR/L*置功能00001DLNF*置字符发
37、生存贮器地址0001字符发生存贮器地址(AGG)置数据存贮器地址001显示数据存贮器地址(ADD)读忙标志或地址01BF计数器地址(AC)写数到CGRAM或DDRAM10要写的数从CGRAM或DDRAM读数11读出的数据它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开
38、显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5*7的点阵字符,高电平时显示5*10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。3. DM-162液晶显示
39、模块可以和单片机AT89C52直接接口液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的标志,为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2.9是DM-162的内部显示地址。比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。图2.9 DM-16的内部显示地址图2.10 接口电路4. 基本操作时序如表
40、2.5所示:表2.5 基本操作时序表输入输出读状态RS=L,RW=H,E=HDB0-DB7=状态字写指令RS=L,RW=L,E=下降沿脉冲DB0-DB7=指令码读数据RS=H,RW=H,E=HDB0-DB7=数据写数据RS=H,RW=L,E=下降沿脉冲DB0-DB7=数据读状态、输入:RS=L,RW=H,E=H输出:DB0DB7=状态字;写指令、输入:RS=L,RW=L,E=下降沿脉冲DB0DB7=指令码;读数据、输入:RS=H,RW=H,E=H输出:DB0DB7=数据;写数据、输入:RS=H,RW=L,E=下降沿脉冲 DB0DB7=数据。3硬件电路3.1 单片机主控制模块的设计AT89S52
41、单片机为40引脚双列直插芯片,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图3.1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端,如图3.1所示。图3.1 单片机最小系统3.2 时钟电路模块的设计图3.2是DS1302与单片机的连接,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的
42、情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高
43、阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。图3.2 时钟芯片与单片机的连接3.3 温度采集模块设计如图3.3所示,采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P2.4与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。图3.3 温度传感器与单片机的连接3.4 功能按钮设计当按钮被按下时,该按钮对应的I/O口被拉为低电平,松开时按钮对应的I/O口由内部的上
44、拉电阻将该I/O拉为高电平,如图3.4所示:图3.4 功能按键电路3.5 16*2 LCD1602液晶显示电路设计根据其读写的时序模拟总线的方式与单片机进行数据的通讯,首先将数据从I/O口读入或送出,再选择R/W和RS的电平进行不同的操作,在使能端E下降沿时触发数据的读入或送出。注意P0口要接上拉电阻,如图3.5所示:图3.5 LCD液晶显示屏与单片机的连接4系统软件设计4.1 系统模块的功能分划分万年历程序设计总体上分为四个大模块,分别是DS1302时钟程序模块、DS18B20测温模块、LCD显示模块、键盘功能模块。1. DS1302时钟程序模块包括设置DS1302初始时间、从DS1302读
45、时间子程序、写1302一字节子程序、读1302一字节、关闭写保护、开启写保护、关闭时钟、延时子100MS程序。2. DS18B20测温模块包括DS18B20的初始化子程序、DS18B20数据处理子程序、读出温度值的子程序、DS18B20复位子程序、写DS18B20的1位字节子程序、读DS18B20的1个字节子程序。3. LCD显示模块包括LCD初始化子程序、写入控制命令的子程序、判断LCD显示器是否忙的子程序、向LCD中的DDRAM中写数据、查询LCD字符表、调整模式的显示子程序、正常模式LCD显示子程序。4. 键盘功能模块包括模式选择按键SET子程序、调整模式选择子程序、OUT键扫描子程序、
46、UP按键扫描子程序、DOWN按键扫描子程序。4.2 总体程序流程框图本设计中,实现功能的总体程序流程框图如下图4.1所示:图4.1 总体程序流程框图4.3 时钟调整时间的流程图时钟调整时间的流程图4.2所示:图4.2 时钟调整时间的流程4.4 温度转换流程图单片机实现对温度传感器DS18B20的温度转换读取温度数值流程图如下图4.3所示。图4.4 温度转换读取温度数值流程图总结本系统以AT89S52为核心部件,使用串行时钟芯片DS1302,实现时间和闹钟的功能设置。通过键盘和液晶显示屏可方便地校对时钟和设置闹钟时间,本系统基本完成了实用电子钟的功能,尽量做到了硬件电路简单稳定,减少电磁干扰和其他环境干扰。在系统硬件设计之前,要结合当前系统的发展趋势和现状对系统功能进行定位,使系统在实际应用中具有竞争力。该系统最大的特点就是界面友好,走时准确,和现在使用LED显示数据的万年历相