【精美排版】基于单片机C的万年历电子综合设计论文.doc
基于单片机C的万年历电子综合设计论文 作者: 日期:2 目 录1 绪论 22 总体设计方案32.1设计思路32.2设计方案32.3 方案比较论证32.4 总体设计方框图43 设计原理与分析53.1硬件电路主要芯片的功能介绍53.1.1单片机主控制器53.1.2 温度传感器芯片63.1.3 时钟芯片DS1302103.1.4 16*2LCD液晶显示1602134 硬件电路164.1 单片机主控制模块的设计164.2 时钟电路模块的设计164.3 温度采集模块设计174.4 功能按钮设计174.5 16*2 LCD1602液晶显示电路设计184.6总体电路图185 系统软件设计195.1 系统模块的功能分划分195.2 总体程序流程框图195.3 时钟调整时间的流程图215.4 修改键“UP”的功能流程图225.5温度转换流程图236 系统仿真测试246.1 KEIL的使用246.2 Protues软件仿真29致 谢32参考文献33附录一 总体电路的PCB板图34附录二 设计电路的仿真电路图35附录二 万年历源程序361 绪论随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。其中电子万年历就是一个典型的例子。而且在万年历的基础上还可以扩展其它的实用功能,比如温度计。万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作。但是考虑到用单片机配合时钟芯片,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。所以本系统采用了以广泛使用的单片机AT89S52技术为核心,配合时钟芯片DS1302。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的数字钟可以显示时间、设置闹铃功能之外。本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本设计中我重点研究实现了单片机+时钟芯片这种模式的万年历,从原理上对单片机和时钟芯片有了深一步的认识,这些基本功能完成后,在软件基础上实现时间显示。2 总体设计方案2.1设计思路用AT89S52处理产生内部时钟数据或者读取外部时钟数据和采集外部传感器的信息进行处理,并暂时寄存在其内部的储存器中,再通过单片机调用内部RAM的数据并送到LCD或者LED数码管上显示出来。2.2设计方案方案1:单片机一般的工作频率在12MHz左右,而且内部还有定时、计数器,可以产生精确的1S定时,由次可以用定时中断的方式产生精确的1S时间,秒位不断的加1,再设计分、时、星期、日、月、年之间的进制,使产生进位。本方案只需要单片机最小系统加上显示电路,再设计简单的程序算法就可以实现。对于测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理。在显示电路上,采用数码管就可以将年月日星期时分秒和室内温度显示出来方案2:万年历时钟采用单片机控制DS1302实时时钟芯片,能达到走时准确且掉电不丢失数据的。DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES( 复位)2 I/O (数据线)3 SCLK(串行时钟)。温度计要灵敏反映室温的变化这样可采用单片机与数字式温度传感器DS18B20通讯,采集温度数字信号进行处理。DS18B20通过一个单线接口发送或接受信息,因此在单片机与DS18B20之间仅需一条连接(加上地线)。在显示电路上,采用16*2的LCD显示。2.3 方案比较论证对于方案1,单片机虽然可以产生精确的秒信号,但是单片机在处理闰年上会比较麻烦,加之一旦单片机断电后,所有的时间都要重新调整。对于测温电路,采用热敏电阻的输出电压-温度特性,要加上A/D转换,温度传感信息才能被单片机所接受,这种设计需要用到A/D转换电路,感温电路比较麻烦。在显示电路上,采用LED数码的话要用到单片机的许多I/O口,甚至I/O不够用,还需要接上其它芯片大量扩展I/O口,这是一个弊处。对于方案2:单片机不用去产生时钟的数据,时钟的数据由DS1302独立产生,并寄存在其内部的寄存器上,单片机可以通过三总线与它通讯,不仅可以对它进行读取实时时钟数据,还可以对它进行编程,设置它的工作模式。单片机只是处理从DS1302读出来的数据并送显示,大大减少了单片机的负担。而且DS1302可以通过后备电池继续工作,内部的时钟还在走,下次启动后不用去调整时钟,方便使用。基于同样的原理,DS18B20也是一个独立的传感器,只要单片机配置它的工作状态后它就可以独立工作,内部已经把模拟信号转换成数字信号,并把数字信号储存在其内部的寄存中。同样,单片机通过单总线与它通讯,可以处理912位的温度数字数据。在显示电路上,采用16*2 LCD液晶显示器,能容纳年月日星期时分秒温度等信息的显示。LCD显示器只需占用11个I/O口就可以工作了,不用其它扩展芯片,总体上使电路简单化。2.4 总体设计方框图AT89S52主控制器DS1302时钟芯片DS18B20温度传感复位按键LCD显示器键盘12MHz晶振振荡 总体的方框图如图2.1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用16*2的LCD液晶显示屏实现年、月、日、星期、时、分、秒、温度的显示。图2.1总体设计方框图3 设计原理与分析3.1硬件电路主要芯片的功能介绍 本次设计的万年历系统主要包括单片机主控制器、温度传感器芯片、时钟芯片DS1302芯片、16*2LCD显示芯片。3.1.1单片机主控制器AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。(1)AT89S52的简介AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP (In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。(2)AT89S52的内部结构图AT89S52的内部结构图如图3.1所示:图3.1 AT89S52内部结构图3.1.2 温度传感器芯片(1)单线温度传感器DS18B20介绍DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 图3.2 DSl8B20的引脚图DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线(和地线)。DSl8B20的电源可以由数据线本身提供而不需要外部电源。因为每一个DSl8B20在出厂时已经给定了唯一的序号,因此任意多个DSl8B20可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。DSl8B20的测量范围从-55摄式度到+125摄式度,增量值为0.5摄式度,可在l s(典型值)内把温度变换成数字。每一个DSl8B20包括一个唯一的64位长的序号,该序号值存放在DSl8B20内部的ROM(只读存贮器)中。开始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的引脚如图3.2所示。每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长:采取外部供电方式则多用一根导线,但测量速度较快 。(2) DS18B20的测温原理器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图3.3所示。图3.3 DS18B20的内部结构图64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。(3)温度计算1、DS18B20用9位存贮温值度,最高位为符号位,如表3.1为DS18B20的温度存储方式,负温度S=1,正温度S=0。如:00AAH为+85摄式度,0032H为25摄式度,FF92H为55摄式度 表3.1 18B20用9位的温度存储方式2、DS18B20用12位存贮温值度,最高位为符号位,如表3.2为DS18B20的温度存储方式,负温度S=1,正温度S=0。如:0550H为+85摄式度,0191H为25.0625摄式度,FC90H为-55摄式度。 表3.2 18B20用12位的温度存储方式DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EEROM。高速暂存RAM的结构为8字节的存储器,结构如图3.4所示。头2个字节包含测得的温度信息,第3和第4字节和的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。图3.4 DS18B20存储器结构DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3.2所示。低5位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。由表3.3可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。表3.3 DS18B20温度转换时间表 高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值;表3.4为部分温度值对应的二进制温度数据:表3.4 部分温度值对应的二进制温度数据温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 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 0000FC90H3.1.3 时钟芯片DS1302 (1)时钟芯片DS1302的性能DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。实时时钟具有能计算2100 年之前的秒、分、时、日、日期、星期、月、年的能力还有闰年调整的能力318 位暂存数据存储RAM串行I/O 口方式使得管脚数量 最少宽范围工作电压2.0 5.5V工作电流2.0V 时,小于300nA读/写时钟或RAM 数据时有两 种传送方式单字节传送和多字 图3.5 DS1302的封装及引脚功能节传送字符组方式8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配,如图3.5所示简单3 线接口与TTL 兼容Vcc = 5V可选工业级温度范围-40 +85(2)时钟芯片DS1302的工作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;表3.5为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时,写保护位防止对任一寄存器的写操作。a.DS1302的控制字节DS1302的控制字如表3.5所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 表3.5 DS1302的控制字b.数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图3.6所示:图3.6 DS1302读/写时序图c.DS1302的数据读写DS1302单字节读写的波形如图3.6所示。由波形可以看出,无论是从DS1302中读一个数据,还是写一个字节数据到DS1302中,都要先写一个命令字到DS1302中。即通过SCLK引脚(7号引脚)向DS1302输入8个脉冲,把I/O引脚(6号引脚)上的命令字写入DS1302。为了启动数据传输,引脚(5号引脚)应为高电平。在将由0置1的过程中,SCLK引脚必须为逻辑0。然后才能进行读写操作。I/O引脚上的数据在SCLK的上升沿串行输入(写数据到DS1302),在SCLK的下降沿串行输出(读数据)。d.DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3.6所示:写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/010时时/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10 年年8EH8FHWP0000000 表3.6 DS1302的日历、时间寄存器此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 3.1.4 16*2LCD液晶显示1602(1)1602采用标准的16脚接口,其中: 第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚。指令RSR/WD7D6D5D4D3D2D1D0清显示0000000001光标返回000000001*置输入模式000000011/DS显示开/关控制0000001DCB光标或字符移位000001S/CR/L*置功能00001DLNF*置字符发生存贮器地址0001字符发生存贮器地址(AGG)置数据存贮器地址001显示数据存贮器地址(ADD)读忙标志或地址01BF计数器地址(AC)写数到CGRAM或DDRAM10要写的数从CGRAM或DDRAM读数11读出的数据(2)1602液晶模块内部的控制器共有11条控制指令,如表3.7所示: 表3.7 控制指令它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 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液晶显示模块可以和单片机AT89C52直接接口,电路如图3.7所示:图3.7 接口电路液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3.8是DM-162的内部显示地址。表3.8 DM-16的内部显示地址比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H) (4)基本操作时序如图3.8所示:读状态 输入: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.8 LCD的读写时序4 硬件电路4.1 单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图4.1所示:图4.1 单片机最小系统4.2 时钟电路模块的设计图4.2是 DS1302与单片机的连接,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。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引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。图4.2 时钟芯片与单片机的连接4.3 温度采集模块设计如图4.3所示,采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用2.4与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。图4.3 温度传感器与单片机的连接4.4 功能按钮设计当按钮被按下时,该按钮对应的I/O口被拉为低电平,松开时按钮对应的I/O口由内部的上拉电阻将该I/O拉为高电平,如图4.4所示:图4.4 功能按键电路4.5 16*2 LCD1602液晶显示电路设计根据其读写的时序模拟总线的方式与单片机进行数据的通讯,首先将数据从I/O口读入或送出,再选择R/W 和RS的电平进行不同的操作,在使能端E下降沿时触发数据的读入或送出。注意P0口要接上拉电阻,如图4.5所示:图4.5 LCD液晶显示屏与单片机的连接4.6总体电路图本设计的具在温度指示的数字万年历的总体电路图如图4.6所示:图4.6 总体电路图5 系统软件设计5.1 系统模块的功能分划分万年历程序设计总体上分为四个大模块,分别是DS1302时钟程序模块、DS18B20测温模块、LCD显示模块、键盘功能模块。a. DS1302时钟程序模块包括设置DS1302初始时间、从DS1302 读时间子程序、写1302一字节子程序、读1302一字节、关闭写保护、开启写保护、关闭时钟、延时子100MS程序。b. DS18B20测温模块包括DS18B20的初始化子程序、DS18B20数据处理子程序、读出温度值的子程序、DS18B20复位子程序、写DS18B20的1位字节子程序、读DS18B20的1个字节子程序。c. LCD显示模块包括LCD初始化子程序、写入控制命令的子程序、判断LCD显示器是否忙的子程序、向LCD中的DDRAM中写数据、查询LCD字符表、调整模式的显示子程序、正常模式LCD显示子程序。d. 键盘功能模块包括模式选择按键SET子程序、调整模式选择子程序、OUT键扫描子程序、UP按键扫描子程序、DOWN按键扫描子程序。5.2 总体程序流程框图本设计中,实现功能的总体程序流程框图如下图5.1所示:调用调整模式模块NO停止时钟,置时钟停止标志位YESCOUNT值赋给A调用JMP A+DPTR散转指令散转到8个跳转首地址由COUNT的值转入秒/分/时/星期/日期/月/年的修改位的操作扫描OUT、UP、DOWN三个按键OUT、UP、DOWN三个按键如果有按下,执行相应的功能调用调整模式下的显示子程序返回标志位DONE的查询当前时钟停止吗?标志位DONE=1吗?NO调用LCD显示模块扫描SET按钮清时钟停止、调整模式标志位4个模块的初始化程序开始SET键有按下COUNT加1YES图5.1 总体程序流程框图5.3 时钟调整时间的流程图时钟调整时间的流程图5.2所示: YES时钟显示开始判断SET键是否有按下?COUNT计算按键的次数1次,进入秒调整2次,进入分调整3次,进入时调整等待按键等待按键等待按键UP有效DOWN有效OUT有效DOWN有效UP有效DOWN有效UP有效OUT有效OUT有效加1减1加1减1加1减1NO4、57次同理周、日/月/年的调整退出时间调整图5.2时钟调整时间的流程5.4 修改键“UP”的功能流程图修改键“UP”的功能流程图如图5.3所示:开始端口写1,并扫描UP键是否有按下?退出UP键的扫描NOA赋给秒的单元内容秒对应的单元内容赋给A,A再加1年位的加1操作加1后秒内容溢出吗?BCD码调整溢出置0退出秒的加1操作YE温度转换读取温度数值流程图SNO散转指令JMP A+DPTR赋跳转的表头给DPTRA的值为0是退出秒位的加1操作分位的加1操作时位的加1操作星期位的加1操作日位的加1操作月位的加1操作图5.3修改键“UP”的功能流程图YES延时,将COUNT的值赋给A5.5温度转换流程图初始化DS18B20开始应答脉冲发起Skip Rom命令发起Convert命令延时1S等待温度转换完成初始化DS18B20应答脉冲发起Read Seratchpad命令读取第1、2字节即为温度数据NOYESYESNO单片机实现对温度传感器DS18B20的温度转换读取温度数值流程图如下图5.4所示:图5.4温度转换读取温度数值流程图6 系统仿真测试首先把各个模块的程序编好,在伟福W6000中调试没有错误后,再到Protues 7.1中画好并连接电路图进行程序仿真。各个部分的功能后再把它们综合到一个主程序中去,在伟福W6000中调试通过后再把它用Keil uVision2软件把程序生成hex格式最后到Protues 7.1中仿真。在综合到一起的时候,出现了RAM分配错误的问题,因为原先是一个模块子程序在运行,RAM的分配只要不要跟子程序中的分配不冲突就可以了,但是在综合各