版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./目录14253摘要 I17054Abstract II100771绪论 177081.1系统基本方案选择和论证 11011.2电路设计最终方案决定 332002系统的硬件设计与实现 4281862.1电路设计框图 4110712.2系统硬件概述 4130272.3主要单元电路的设计 5145043系统的软件设计 15248163.1程序流程框图 15288203.2子程序 17322894系统测试 18241254.1硬件测试 18105124.2软件测试 18140315结束语 1929660参考文献 2014090附录:程序 2114069致 30.摘要本文借助电路仿真软件Protues对基于AT89S51单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89C51单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCM点阵液晶显示屏显示。AT89C51单片机是由Atmel公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机进行仿真。论文主要研究了液晶显示器LCM及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机;DS1302;DS18B20;LCM1602AbstractThispapermainlydiscussthedesignandsimulationofelectroniccalenderbasedonAT89S51withthehelpofProtues.Onthehardwareside,theelectroniccalendarusingAT89C51microcontrollerasthemaincontrolcenter,clockprovidedbytheDS1302clockchip,1602LEDdotmatrixLCDdisplay.AtmelCorporationAT89C51microcontrollerisproductedbyAtmelCorporation,lowpowerconsumption,voltagecanbeselected4V~6Vvoltagepowersupply;DS1302clockchip,launchedintheUnitedStateswithDALLASsmallcurrentchargingfunctionrealtimeclockchip,lowpowerconsumption,itcanbeyears,month,date,day,hour,minute,secondstime,alsohasaleapyearcompensationandotherfunctions,andDS1302longlife,smallerror;LEDdigitaldisplayisusedinLCDdisplaysthatcandisplayin,month,day,week,hours,minutes,secondsandotherinformation.Inaddition,theelectroniccalendarisalsoatimecalibrationfunctions.Intermsofsoftware,includingcalendarprogram,timetoadjustprocedures,displayprocedures.Allprogrammingiscomplete,theKeilsoftwaredebugging,makesurethereisnoproblem,intheProteussoftwareembeddedwithinthesimulatedMCU.ThisarticlefocusonliquidcrystalscreenLCM1602andclockchipDS1302,temperaturesensorDS18B20whichconnectedandcommunicatedwithMicrocontroller.Severalsolutionswillalsocomparedwitheachother.Onsoftwareside,calendercalculationwillbediscussedaswell.Theresultsareasfollows:aselectroniccalenderarewidelyusedinourdailylife.Itshouldbechipandconvenientsoastowinmoreprofit.Keywords:Microcontroller,DS1302;DS18B20;LCD1602..1绪论随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子万年历诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势。伴随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便,作为一种附加功能,现在越来越广泛的被应用于各种电子产品中,具有广阔的市场前景。通过以往对工业自动化的相关课程学习和理解独立完成制作电子万年历的设计。电子万年历作为电子类小产品不仅是市场上的宠儿,也是是单片机设计培训中一个很实用的题目。因为这个课题有很好的开放性和可发挥性,对制作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的电子万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历制作无论从实用目的,还是从培养能力的角度来看都是很有价值的毕业设计课题。本电子万年历的设计在硬件方面主要采用AT89S51单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCM点阵液晶显示屏显示。AT89S51单片机是由Atmel公司推出的,功耗小,电压可选用4~6V电压供电[1];DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机进行仿真。最后在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。1.1系统基本方案选择和论证1.1.1单片机芯片的选择本设计采用AT89S51芯片作为硬件核心,该芯片采用FlashROM,部具有4KBROM存储空间,相对于本设计而言程序空间完全够用。能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,而且运用于电路设计中时具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,避免芯片的多次拔插对芯片造成的损坏。1.1.2显示模块选择方案和论证方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案二:采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,所以不采用LED数码管作为显示[2]。方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见[3],对于电子万年历而言,一个1602的液晶屏即可,价格也还能接受,需要的接口线较多,但会给调试带来诸多方便,所以此设计中采用LCD1602液晶显示屏作为显示模块.1.1.3时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS130是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振[4]。因此,本设计中采用DS1302提供时钟。1.1.4温度传感器的选择方案与论证方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差[5]。方案二:采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路[6]。另外,数字式温度传感器还具有测量精度高、测量围广等优点。因此,本设计DS18B20温度传感器作为温度采集模块。1.2电路设计最终方案决定综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89S51作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;LCD1602液晶屏作为显示。2系统的硬件设计与实现2.1电路设计框图本系统的电路系统框图如图1所示。AT89S51单片机对DS1302和DS18B20写入控制字并读取相应的数据,继而控制LCM1602作出对应的显示。LCD1602液晶显示模块AT89S51主控模块LCD1602液晶显示模块AT89S51主控模块键盘控制模块DS1302时钟模块温度采集模块DS1302时钟模块温度采集模块图1系统硬件框图2.2系统硬件概述本电路是由AT89S51单片机作为控制核心,能在3V超低压工作,AT89S51是一个低功耗,高性能CMOS8位单片机,片含4kBytesISP<In-systemprogrammable>的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20完成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温围-55℃~+125℃,固有测温分辨率0.5℃,支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温,工作电源:3~5V/DC,在使用中不需要任何外围元件;显示部份由LCD1602液晶显示器完成,该显示器为工业字符型液晶,能够同时显示16x02即32个字符〔16列2行。2.3主要单元电路的设计2.3.1AT89S51单片机主控制模块的设计AT89S51是一个低功耗,高性能CMOS8位单片机,片含4kBytesISP<In-systemprogrammable>的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚,4kBytesFlash片程序存储器,128Bytes的随机存取数据存储器〔RAM,32个外部双向输入/输出〔I/O口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗〔WDT电路,片时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口〔P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入[7]。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写"1"时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址"1"时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入"1"后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL这是由于上拉的缘故。I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的容读入到部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到部总线。输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,如果不对端口置1,端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/P3口作为输入时都是准双向口。单片机的最小系统如图2所示:18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.单片机的最小系统如下图所示:图2中的晶振频率为12MHz,复位方式为上电自动复位[8]-[9]。图2单片机最小系统单片机中断系统在提及单片机的最小系统后,现对单片机的另一重要应用系统即中断系统做一个比较详细的介绍。在CPU与外设交换信息时,存在着一个快速CPU与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。所谓的中断就是,当CPU正在处理某项事务的时候,如果外界或者部发生了紧急事件,要求CPU暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。MCS-51单片机的中断源共有两类,它们分别是:外部中断和部中断。外部中断0<INT0>来自P3.2引脚,通过外部中断0触发方式控制位IT0<TCON.0>,来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向CPU申请中断;外部中断1<INT1>来自P3.3引脚,通过外部中断1触发方式控制位IT1<TCON.2>,来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向CPU申请中断。部中断有三个:TF0,TF1,RI或TI。TF0〔TCON.5,片定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断;TF1〔TCON.7,片定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断;RI〔SCON.0或TI〔SCON.1,串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断[10]。MCS-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。定时器控制寄存器〔TCON,该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H~8FH,当CPU采样到INT0〔或INT1端出现有效中断请求时,IE0〔IE1位由硬件置"1"。当中断响应完成转向中断服务程序时,由硬件把IE0〔或IE1清零,当计数器产生计数溢出时,相应的溢出标志位由硬件置"1"。当转向中断服务时,再由硬件自动清"0"。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用;串行口控制寄存器〔SCON,进行字节操作时,寄存器地址为98H。按位操作时,各位的地址为98H~9FH,当发送完一帧串行数据后,由硬件置"1";在转向中断服务程序后,用软件清"0",当接收完一帧串行数据后,由硬件置"1";在转向中断服务程序后,用软件清"0"。串行中断请求由TI和RI的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求;中断允许控制寄存器〔IE,进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地址为0A8H~0AFH,可见,MCS-51单片机通过中断允许控制寄存器对中断的允许〔开放实行两级控制。即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位为禁止时,关闭整个中断系统,不管分控制为状态如何,整个中断系统为禁止状态;当总控制位为允许时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。MCS-51单片机复位后〔IE=00H,因此中断系统处于禁止状态。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应根据需要使用有关指令禁止中断,即以软件方式关闭中断。中断优先级控制寄存器〔IPMCS-51单片机的中断优先级控制比较简单,因为系统只定义了高、低2个优先级。高优先级用"1"表示,低优先级用"0"表示。各中断源的优先级由中断优先级寄存器〔IP进行设定。IP寄存器地址0B8H,位地址为0BFH~0B8H。2.3.3时钟电路模块的设计DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力[11]。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进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端<双向>,SCLK为时钟输入端。DS1302的控制字节的最高有效位<位7>必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位<位0>如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH<写>、FFH<读>。DS1302与CPU的连接需要三条线,即SCLK<7>、I/O<6>、RST<5>。实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。单片机与DS1302连接图如图3所示:图3DS1302与单片机的连接2.3.4温度采集模块设计采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压围为3.0V至5.5V无需备用电源测量温度围为-55度至+125度。-10度至+85度围精度为±0.5度温度传感器可编程的分辨率为9~12位[12]。DS18B20连线如图4所示:图4DS18B20管脚连线2.3.5显示模块的设计如下图5所示,采用LCM1602液晶显示器,单片机P1口作为数据输出口,RS,R\W,E分别通过10K的上拉电阻连接到单片机的P0.0,P0.1,P0.2。VDD接5V电源,VSS接地。VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高〔对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平<1>时进行读操作,低电平<0>时进行写操作。E<或EN>端为使能<enable>端,下降沿使能。DB0-DB7为双向数据总线,同时最高位DB7也是忙信号检测位。BLA、BLK分别为显示器背光灯的正、负极[13]。图5LCM1602与单片机的连接2.3.6DS1302原理及说明<1>时钟芯片DS1302的工作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置"0",接着把RST端置"1",最后才给予SCLK脉冲;读/写时序如下图7所示。图6为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表2为DS1302的日历、时间寄存器容:"CH"是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。"WP"是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当"WP"为1时,写保护位防止对任一寄存器的写操作。<2>DS1302的控制字DS1302的控制字如图6所示。控制字节的高有效位〔位7必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位〔位0如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。图6DS1302的控制字<3>数据输入输出在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7[14]。如下图7所示:图7DS1302读与写的时序图DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见图8。图8DS1302的日历、时间寄存器此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH<写>、FFH<读>。2.3.7LCM1602工作原理及说明<1>寄存器选择控制1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。1602液晶模块部的字符发生存储器〔CGROM>已经存储了160个不同的点阵字符[15],图形寄存器选择控制表如表1所示:表11602寄存器选择控制表RSR/W操作说明00写入指令寄存器〔清屏指令等01读busyflag,以及读取位址计数器〔DB0~DB6的值10写入数据寄存器〔显示各字型等11从数据寄存器读取数据<2>指令集1602通过D0~D7的8位数据端传输数据和指令。显示模式设置<初始化>00111000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:<初始化>00001DCBD显示<1有效>、C光标显示<1有效>、B光标闪烁<1有效>。000001NSN=1<读或写一个字符后地址指针加1并且光标加1>,N=0<读或写一个字符后地址指针减1并且光标减1>,S=1且N=1<当写一个字符后,整屏显示左移>,S=0当写一个字符后,整屏显示不移动。数据指针设置:数据首地址为80H,所以数据地址为80H+地址码<0-27H,40-67H>。其他设置:01H<显示清屏,数据指针=0,所有显示=0>;02H<显示回车,数据指针=0>[16]。2.3.8系统仿真电路本次仿真使用软件Protues7.0,该软件元件库丰富,元件封装要求相对简单且参数调整方便,除此之外,程序还可进行动态调试。系统仿真截图如图9所示:图9系统仿真电路图如图,左上角为显示模块LCM1602,U1是时钟芯片DS1302,U2是主控模块AT89C51,U3为温度传感器DS18B20,右下角是键盘控制模块。3系统的软件设计开始初始化读、写日期、时间和温度分离日期\时间\温度显示值开始初始化读、写日期、时间和温度分离日期\时间\温度显示值显示子程序日期、时间修改子程序闰月子程序返回图10主程序流程图主程序流程图如上图10所示。由于LCM1602,DS18B20,DS1302的数据读取及指令写入函数均已在各自的头文件中完成,在主程序中只须引用即可。由于在硬件电路方面上设计了时间调整按键和开关,因此应有对应的时间调整程序。时间调整程序的流程图如图11所示。图11时间调整程序流程图3.2子程序由于本系统程序涉及的可编程器件有LCM1602,DS18B20以及DS1302,各芯片的控制字及数据读写如果混杂,将会使程序可读性大大降低,因此采用子程序的方法进行调用并将其封装于各自的头文件中。详尽的程序设计见附录。4系统测试4.1硬件测试在Protues仿真结束后,于焊接板上完成了硬件组装。在调试硬件时遇到过很多问题,但只要细心、认真检查这些问题都是可以避免的,主要问题及解决办法现列如下:接通电源后LCM1602没有正确的显示。在不通电状态下用万用表检测电路是否正常连接,在检查回路时发现有的点之间看似连接,但由于虚焊导致其并无电气连接,只能对焊脚进行在加工直到解决问题。电路工作一段时间之后有的芯片发热严重。经查发现原来是有尖锐的管脚刺破邻近的漆包线造成短路,断掉该线并再次连接可解决问题。4.2软件测试由于本系统涉及到多个子程序,多个芯片的编程。首先必须对可编程芯片的控制字即其控制指令要熟记于心。其次,芯片很多都有时钟输入端,需要晶振支持。对芯片的读写都需要在相应的触发沿到来时才能进行。由于DS18B20是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,会对延时有较高要求。所以在调用温度子程序时,先关闭定时器1中断允许,在温度子程序反回时再打开定时器1中断允许。5结束语以上所述即是电子万年历的设计全过程,经过多次的反复测试与分析,对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.经过此设计,基本完成了设计任务的要求。硬件层面而言操作相对简单,界面比较友好。在硬件电路方面,详尽解析了各个独立元件的选择依据,对数种方案进行了全面的比较。在时钟芯片的选择上,若直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差较大。因此采用专业的时钟芯片DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能;在显示模块的选择上,若采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,因此本次设计选择了LCM1602,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见;在温度采集模块的选择上,没有采用热敏电阻,因为设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。最后选择了DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量围广等优点。从元件性能和组装电路后的测试结果来看,硬件电路的设计是比较成功的。在软件设计方面,对日历算法和时间调整算法都做了比较详细的阐述,可读性较强。美中不足的是并没有给出与阳历同步的阴历算法,久经思索却终究未能达成。综上所述,本设计虽然实现了电子万年历的功能,但在硬件的选择上应该更优化,使成本更低;在软件方面也需要完善,一个真正实用的万年历应该具有计算阴历历法的功能。参考文献[1]胡乾斌,光斌,玲,喻红.单片微型计算机原理与应用.华中科技大学,1996.[2]勇.数字电路.电子工业,2004.[3]正振.电子电路设计与制作.广西交通职业技术学院信息工程系,2007.[4]子文.单片机原理及应用.电子科技大学,2006.[5]王萍.电子技术实验教程.机械工业,2009.[6]红卫.单片机应用系统设计实例与分析,:航空航天大学.2003[7]光飞.单片机课程设计实例指导,:航空航天大学.2004[8]王法能.单片机原理及应用,科学.2004[9]楼然苗,光飞.51系列单片机设计实例[M].航空航天大学,2003.[10]朱定华,戴汝平.单片微机原理与应用[M].清华大学,2003.[11]胡汉才.单片机原理与接口技术[M].清华大学,2004.[12]余家春.Protel99SE电路设计实用教程[M].中国铁道,2004.[13]培仁.基于汇编语言编程MCS-51单片机原理与应用.:清华大学,2003.[14]T.Someya,J.Small,P.Kim,C.Nuckolls,J.T.Yardley.Alcoholvaporsensorsbasedonsingle-walledcarbonnanotubefieldeffecttransistors[M].NanoLetters,2003.[15]M.Penzaetal.Alcoholdetectionusingcarbonnanotubesacousticandopticalsensors[M].AppliedPhysicsLetters,2004.[16]F.Rettig,R.Moos.DirectthermoelectricgassensorsDesignaspectsandfirstgassensors[M].SensActuatorsB,2007.附录:程序主程序:#include<reg52.h>#include"lcd1602.h"#include"ds1302.h"#include"ds18b20.h"#defineuintunsignedint#defineucharunsignedcharuintb[6];//年、月、日、时、分、秒ucharcoderow1[]={"2009-01-01"};ucharcoderow2[]={"00:00:00"};ucharyear1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年ucharyear2[12]={31,29,31,30,31,30,31,31,30,31,30,31};//润年ucharj[6]={0x85,0x88,0x8b,0x84+0x40,0x87+0x40,0x8a+0x40};//LCD地址uchari,k,jj=0,w,clock=0,bigclock=0,c=0,num;//i循环数,k温度缓存,jj地址位uinttemp;sbitb1=P3^0;//设置sbitb2=P3^1;//上调sbitb3=P3^2;//下调sbitb4=P3^3;//转换sbitb5=P3^4;//闹钟sbitspeaker=P3^5;lcdscan<>{for<i=0;i<6;i++> {lcdwrite<j[i]>; lcdshuju<a[11-i*2]+0x30>; lcdwrite<j[i]+0x01>; lcdshuju<a[10-i*2]+0x30>; }}voidkey<>{ if<b1==0> {dsaddshuju<0x80,<a[1]<<4>+a[0]+0x80>; while<b1==0> { for<i=0;i<6;i++> {b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];} if<b4==0> {delay<3>; jj++; if<jj==6> {jj=0;} } if<b2==0> { delay<3>; b[jj]++; if<b[5]==60>b[5]=0; if<b[4]==60>b[4]=0; if<b[3]==24>b[3]=0; if<<b[0]%4==0&&b[0]%100!=0>||b[0]%400==0>{if<b[2]>year2[b[1]-1]>b[2]=1;} else{if<b[2]>year1[b[1]-1]>b[2]=1;} if<b[1]==13>b[1]=1; if<b[0]==100>b[0]=0; } if<b3==0> { delay<3>; b[jj]--; if<b[5]==-1>b[5]=59; if<b[4]==-1>b[4]=59; if<b[3]==-1>b[3]=23; if<<b[0]%4==0&&b[0]%100!=0>||b[0]%400==0>{if<b[2]<=0>b[2]=year2[b[1]-1];} else{if<b[2]<=0>b[2]=year1[b[1]-1];} if<b[1]==0>b[1]=12; if<b[0]==-1>b[0]=99; } for<i=0;i<6;i++> {a[11-i*2+clock]=b[i]/10; a[10-i*2+clock]=b[i]%10; } lcdwrite<j[jj]>; lcdshuju<0>; lcdwrite<j[jj]+1>; lcdshuju<0>; delay<200>; lcdwrite<j[jj]>; lcdshuju<a[11-2*jj+clock]+0x30>; lcdwrite<j[jj]+1>; lcdshuju<a[10-2*jj+clock]+0x30>; delay<200>; if<b1==1> {dsaddshuju<0x80,<a[1]<<4>+a[0]>; dson<>;} if<b5==0>clock=12;} }}voidmain<>{ speaker=0; lcdrw=0; dson<>; lcdon<>; lcdwrite<0x83>; for<i=0;i<10;i++> { lcdshuju<row1[i]>; delay<1>; } lcdwrite<0x84+0x40>; for<i=0;i<8;i++> { lcdshuju<row2[i]>; delay<1>; } dsrst=0; dssclk=0; while<1> {for<i=0;i<5;i++> { dsrst=1; dswrite<0x81+i*2>; k=dsread<>; dsrst=0; a[i*2]=k&0x0f; a[i*2+1]=<k>>4>&0x0f; } dsrst=1; dswrite<0x8d>; k=dsread<>; dsrst=0; a[10]=k&0x0f; a[11]=<k>>4>&0x0f; delay<100>; lcdscan<>; key<>; if<b5==0> { for<i=0;i<12;i++> {if<a[i+12]==a[i]>num++; } if<num==12>bigclock=1; elsenum=0; lcdwrite<0x8e>; lcdshuju<'&'>;} else {lcdwrite<0x8e>; lcdshuju<0x00>;} if<bigclock==1> {speaker=1; c++; if<c==100>{bigclock=0;speaker=0;} } temp=readtemperature<>;//temp是uint型的。不然会出现温度到25后回00的现象。可能是由于十六进制与十进制的差异。 lcdwrite<0x8d+0x40>; lcdshuju<temp/100+0x30>; lcdwrite<0x8e+0x40>; lcdshuju<temp/10%10+0x30>; }}子程序:LCM1602头文件:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitlcdrs=P0^0;sbitlcdrw=P0^1;sbitlcden=P0^2;voiddelay<uintz>{uintx,y;for<x=z;x>0;x-->for<y=110;y>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 24134-2026橡胶和塑料软管静态条件下耐臭氧性能的评价
- GB/T 38216.7-2026钢渣碳和硫含量的测定
- 桩工机械装配调试工安全宣传模拟考核试卷含答案
- 乒乓球制作工创新实践测试考核试卷含答案
- 2026年中药饮片质量安全课件
- 炼钢浇铸工操作能力模拟考核试卷含答案
- 高炉炼铁工岗前理论实操考核试卷含答案
- 棕草编织工诚信品质评优考核试卷含答案
- 熔体镁工岗后强化考核试卷含答案
- 2026年护理安全文化构建
- 2026-2030旋转蒸发仪行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2026年广州市南沙区黄阁镇人民政府编外工作人员招聘笔试参考题库及答案解析(完整版)
- 【中小学】【开学收心】主题班会:开学吧!八仙小队
- 2026年海南中考(语文)考试真题及参考答案
- 2026秋新北师大版小学数学五年级上册教学计划附进度表
- 【初一】【秋季上】七年级开学家长会:从小学到初中陪孩子完成一次重要换挡 校园风【课件】
- 2026 年小学秋季新生开学“讲究卫生健康成长”
- 2026年秋季学期人教版小学数学五年级上册教学计划附教学进度表
- 新版西师版六年级上册数学全册教案(完整版)教学设计含教学反思
- 输电线路架线工程监理实施细则
- 四川省泸州市2025-2026学年高一下学期期末考试历史试卷
评论
0/150
提交评论