版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE71论文题目:多功能电子万年历的设计学院电气工程学院
多功能电子万年历设计专业:自动化姓名:指导老师:摘要随着科学技术的快速发展,纵观太阳、摆钟到现在电子钟,人类不断研究,不断创新进步。目前,单片机技术的应用产品已经走进了千家万户。多功能电子万年历的出现给人们的生活带来了诸多方便。此产品是基于STC89C52RC单片机的日历显示系统,它能显示公历年、月、日,以及时、分、秒、温度、星期等信息,而且还具有调整时间,温度采集,闹钟及个性化的闹铃等功能。系统所用的时钟日历芯片DS1302具有高性能、低功耗、接口简单的特点,使本系统电路简化,编程方便,同时功能也很强。采用STC89C52RC单片机的万年历系统可以很好的改善传统采用模拟电路引起的计时不准确,不可靠,一致性差等问题。此系统计时精确,价格低廉,可以广泛应用在生活,学习和工作等任何领域,并且起到重要作用。关键词:万年历,单片机,时钟芯片,温度芯片ABSTRACTAlongwiththetechnicalfastdevelopment,timepassing,tofromtheviewsun,thependulumclocktothepresentelectronclock,thehumanitystudiesunceasingly,innovatesunceasinglytherecord.Atpresent,themonolithicintegratedcircuittechnology'sapplicationproductalreadyenteredeveryone.Theelectronictenthousandcalendar'sappearanceshavebroughtconvenientlymanyforpeople'slife.ThisdesignisonebasedonSTC89C52RCsingle-chipmicrocomputercalendardisplaysystem,itcandemonstrateyears,themonth,thedateoftheGregoriancalendar,andhour,minute,second,temperature,weekandsoon.Moreoverithasalsoprovidedthelunarcalendarinformation,adjustabletimepattern,temperaturesample,alarmsystem,individualquarter-bellandsoon.ThesystemclockcalendarDS1302withhighperformance,lowpowerconsumptionandsimpleinterfacefeaturesCircuitenablethesystemtostreamlineprogrammingconvenience,butalsohighlyfunctional.Theproblemsofinaccurate,unreliable,andtheuniforminferiorcanbecomeupwhenyouusetheanalogouscircuit.However,itcanbeimprovedwhenyouusetheclocksystembasedonSTC89C52RCsingle-chipmicrocomputer.Thesystemtimeaccurate,lowcostandcanbewidelyappliedtothelife,studyandworkinanyfield,andhasplayedanimportantrole.Keywords:TheElectronicCalendarClock,Single-chipMicrocomputer,TheTimeCalendarClock,TemperatureChip目录ABSTRACT 31绪论 81.1多功能电子万年历的研究背景与意义 81.2多功能电子万年历的发展现状 91.3论文研究的内容 91.4本设计进行的主要工作 101.5本多功能电子万年历系统主要要实现的功能 102单片机的简介 112.1单片机的介绍 113方案设计与论证 133.1单片机芯片设计与论证 133.2电源模块设计与论证 143.3按键控制模块设计与论证 143.4时钟模块设计与论证 153.5温度采集模块的设计与论证 153.6显示模块设计与论证 154系统的硬件设计 174.1主控芯片STC89C52RC与复位电路和时钟振荡电路 174.1.1STC89C52RC的概述 174.1.2复位电路和时钟振荡电路 194.2时钟芯片DS1302接口设计和性能分析 204.2.1DS1302性能简介 204.2.2DS1302接口电路设计 214.3温度芯片DS18B20接口设计和性能分析 254.3.1DS18B20的性能介绍 254.3.2DS18B20的接口电路设计 264.4闹钟模块系统设计于性能分析 264.4.1AT24C02器件分析 274.4.2接口电路的设计 284.5LCD显示模块 284.5.1LCM1602的特性及使用说明 284.5.2LCM1602与STC89C52RC单片机的接口电路 304.6按键模块设计 314.7蜂鸣器设计 325软件设计 345.1软件总体部分的设计 345.2LCD驱动及液晶显示 365.3按键识别及处理 365.4温度数据采集 365.5时间数据采集 385.6闹钟程序 406系统的测试 42总结 45致谢 46参考文献 47附录 481绪论1.1多功能电子万年历的研究背景与意义伴随着单片机和电子技术的快速发展,人类不断研究,不断创新纪录。万年历已经不像以前那样以书本形式出现。以电子产品形式或者电脑软件形式出现,并附加有温度、湿度监控以及闹铃提示功能的万年历被称为多功能电子万年历。与先前的书本形式的万年历相比,多功能电子万年历成为了各个电子产品的一部分而得到了广泛的应用,如在手机、电脑、空调等电子电气产品中大量使用。采用电子时钟作为时间显示已经成为一种时尚。目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。本文提出了一种基于STC89C52RC单片机的多功能电子万年历设计方案,采用一个LCD显示。本方案以STC89C52RC单片机作为主控核心,与时钟芯片DS1302、温度芯片DS18B20、闹钟模块、闹钟设置存储模块、按键、LCD显示等模块组成硬件系统。在硬件系统中设有4个独立按键和一个LCD显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间、星期、温度显示以及提醒等.总体来说多功能电子万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2多功能电子万年历的发展现状随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。国内企业为了获得更大的投资收益,在生产规模和产品质量上不断提升,开发单片机呈必然趋势。二十一世纪的今天,具有代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。前两次革命是摆和摆轮游丝的发明,以及石英晶体振荡器的应用,第三次革命就是单片机数码计时技术的应用(电子万年历),使得从原来传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期,星期,温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨越性的进步。1.3论文研究的内容本设计采用STC89C52RC芯片作为系统主要芯片,能以的超低的3.3V电压工作,而且能够和51单片机系列完全兼容,该芯片内部存储器ROM为8KB存储空间。具有和51系列单片机一样的功能,并且具有可擦除可在线编程技术。用LCD数码管动态显示,LCD数码管价格适中,对于显示数字合适,且采用动态扫描法与单片机连接时,占用单片机接口线少。采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分时日周月年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压可以在2.5V~5.5V范围内,2.5V时耗电小于300mA。因此采用STC89C52RC单片机作为此设计的主要芯片,且作品的精度高,成本低,易于制作研究。1.4本设计进行的主要工作(1)分析多功能电子万年历的运行原理;(2)设计多功能电子万年历的总原理图;(3)根据多功能电子万年历的原理图选择各个模块的芯片;(4)设计多功能电子万年历的总流程图和各个模块的流程图;(5)根据多功能电子万年历的总流程图和各个模块的流程图,用C程序语言编写程序;(6)根据多功能电子万年历的原理图连接硬件电路做出实物;(8)对多功能电子万年历进行硬件测试;(9)实现总体设计目标。1.5本多功能电子万年历系统主要要实现的功能(1)设计一个万年历可以显示年、月、日、时、分、秒、星期,具有调整日期和时间功能,可以与即时时间同步;(2)具有闹铃设置功能,可以设置任意时间闹铃,发出报警信息;(3)具有温度采集功能,可以采集-55℃-125℃之内的温度,并且显示在LCD上。2单片机的简介2.1单片机的介绍单片机作为一个微型计算机而得到的集成电路芯片。它运用特大规模集成技术将:具有数据处理能力的CPU、含程序存储器ROM和数据存储器RAM、输入、输出口电路(I/O接口)集成在同一块芯片,构成一个小巧而又很完善的微型计算机系统,在程序语言的控制下能准确、高效而又迅速地完成程序设计者需要完成的任务。因此说,一个单片机就具有了能够组成计算机的全部的功能。然而单片机又和单板机(一种能够将微处理器的芯片、存储器芯的芯片、输入输出接口芯片安装在同一个印制电路板上的微型的计算机)不相同,早先的单片机芯片在没有开发完全之前,它只是一种能够具备极强功能的超大规模集成电路,倘若对它能够进行应用开发,单片机便可以成为一个小型的微型计算机控制系统,然而它与单板机或个人电脑(PC机)有着本质的区别。不同的单片机有着不同的硬件特征和软件特征。单片机芯片的内部结构决定了其硬件特征,某种单片机被用户使用之前,用户必须了解这种类型产品是否满足想要实现的功能和应用系统的特性以及指标。这期中的技术特征包括:功能特性、控制特性以及电气特性等等。软件特征指的是指令系统特性和开发支持环境,指令特性就是输入输出特性、单片机的寻址方式、数据处理和逻辑处理方式、和对电源的要求等。开发支持环境:支持软件、指令的兼容及可移植性以及硬件资源。想要开发自己的应用系统而要使用某型号单片机,掌握其技术特征和结构特征是必不可少的。数字电路或复杂电子线路构成的控制系统可以用单片机控制系统取代是之简单化、易操作。就可以软件控制来实现,且能够实现智能化和模块化。现在单片机控制范围无所不在,比如家用电器、过程控制、通信产品、智能仪器仪表和专用控制装置等等,单片机被广泛的应用在各行各业。诚然,单片机的应用意义远远超过了其应用范畴和由此带来的经济效益,更为重要的是它已从根本上改变了传统的设计思想和控制方法。这是控制技术领域的一次革命,也是一座重要的里程碑。3方案设计与论证按照系统设计的要求,初步确定系统由电源模块、时钟模块、显示模块、键盘接口模块、温度测量模块和闹钟模块共六个模块组成,电路系统构成模块框图如图3.1所示。SCT89C52RCSCT89C52RC电源模块温度采集模块独立按键闹钟模块显示模块时钟模块图3.1硬件电路模块框图3.1单片机芯片设计与论证方案一:采用AT89C51芯片作为主控芯片,内部具有4KBROM存储空间,能于3V的超低电压工作,就是可以和51系列的单片机可以完全兼容,但是当其运行在电路设计中的时候由于不能具备ISP在线编程的技术;方案二:采用STC89C52RC芯片作为硬件的核心,,能以的超低的3.3V电压工作,而且能够和51单片机系列完全兼容,该芯片内部存储器ROM为8KB存储空间。具有和51系列单片机一样的功能,并且具有ISP在线可擦除可在线编程技术;综合考虑,采用STC89C52RC作为主控芯片,它的内部存储空间更大,且具有ISP在线编程技术,可节省成本。3.2电源模块设计与论证方案一:采用USB电源线接电脑USB口为系统提供电源,携带不方便,成本高;方案二:采用独立的5V电源,为单片机及外部电路提供电源,能提供较为稳定的电压及足够的功率,制作简单,成本较低、便于携带;考虑系统为一个便携式用品,方案一不便于携带,故采用方案二。3.3按键控制模块设计与论证方案一:采用矩阵键盘,由于按键多可实现数值的直接键入,但在系统中需要CPU不间断的对其端口扫描;方案二:采用独立按键,查询简单,程序处理简单,可节省CPU资源;因系统中所需按键不多,为了释放更多的CPU占有时间,故采用方案二。3.4时钟模块设计与论证方案一:采用直接的单片机定时/计数器提供所需的秒信号,编程程序来实现秒、分、时、日、周、月、年的计数。采用这一种方案虽然可以减少所用的芯片的数量和节约成本,但其实现后的时间误差较大不准确;方案二:采用DS1302时钟芯片而实现的时。DS1302芯片是一种具有高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA;综合考虑制作难度及精度,故采用方案二。3.5温度采集模块的设计与论证方案一:采用温度传感器(如热敏电阻或AD590),再经AD转换得到数字信号。虽然价格低廉,但精度不高,电路较复杂;方案二:采用数字式温度传感器DS18B20,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式,虽然价格较贵,但精确度高,误差在1℃左右;综合考虑,采用方案二,用DS18B20温度芯片,采用单总线访问,降低成本、降低制作难度且可节省单片机宝贵的GPIO资源。3.6显示模块设计与论证方案一:采用LED的方法,虽然亮度较高、成本低,但电路连接复杂,;方案二:采用LCD的方法,具有硬件制作简单可直接与单片机接口,LCM1602可显示32个字符,采用LCD的缺点是亮度不够;比较以上两种方案,采用方案二,由于本多功能电子万年历是一种小型系统,采用独立电源供电,因此采用LCD显示也可以简单化电路连接。4系统的硬件设计4.1主控芯片STC89C52RC与复位电路和时钟振荡电路4.1.1STC89C52RC的概述STC89C52RC单片机是以52内核为主的单片机系列,STC单片机是宏晶公司生产的产品(单时钟/机器周期)的单片机,是具有特别强的抗干扰、高速、低功耗的新生代的8052单片机,它的指令代码是可以全部兼容传统8051,但速度比51快8—12倍,内部集成了MAX810的专门用的复位电路。4路PWM和8路的高速的10位A、D转换,针对电机/强干的扰控制场合。STC89C52RC单片机引脚如下图:图4.1STC89C52RC单片机引脚如下图STC89C52RC单片机主要性能:(1)高速:1个时钟/机器周期,增强的8051,速度比传统的8051快8~12倍;(2)低功耗的设计:空闲模式,掉电模式(唤醒可由外部中断);(3)工作频率:0~40MHz,相当于频率为0~8MHz的一般8051;(4)时钟:可由外部的晶振或者内部的RC振荡器,在ISP环境下下载用户编程程序事设计;(5)16K的字节的芯片内部Flash程序存储器,擦出读写次数可以在10万次以上;(6)芯片内部RAM数据存储器:512个字节;(7)芯片内部有EEPROM功能;(8)ISP/IAP,在系统和应用可编程时,无需编程器和仿真器;(9)16位定时器和2个硬件,兼容普通8051的定时器;(10)有WDT看门狗功能;(11)SPI的通信端口为高速的;(12)串口为UART(双全工异步),和普通8051兼容的串口;(13)结构采用了较为先进的指令集,和8051普通指令集相兼容,4组8个8位通用的工作寄存器,有硬件乘除法指令;(14)通用I/O口(27/23/15个),复位后为:准双向口/弱上拉(普通80C51传统I/O口);(15)有四种模式可供设置:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每一个I/O口的驱动能力都可达到20mA,但是整个芯片的电流最大不能超过55mA。4.1.2复位电路和时钟振荡电路(1)复位电路:按键的手动式复位就是通过使复位端经电阻(R)与VCC接通而后来实现的,与单片机接口图如图4.2图4.2复位电路与单片机接口图(2)时钟振荡电路:本多功能电子万年历时钟振荡电路采用的是内部时钟方式的电路,此电路可以通过调节电容C0和C1的大小对频率进行微调,是之达到技术要求,与单片机的接口电路如图4.3:图4.3时钟振荡电路与STC89C52RC单片机的接口电路4.2时钟芯片DS1302接口设计和性能分析4.2.1DS1302性能简介DS1302是Dallas公司生产的一种实时时钟芯片。它通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。DS1302的时钟芯片内部主要包括:振荡器、控制逻辑电路、移位寄存器。DS1302和单片机系统之间的数据传送依靠的是SCLK、RST、I/O,三根端口线就可以完成。它工作时的过程为:首先系统RST这个引脚驱动到高电平,然后在SCLK时钟脉冲作用下,通过I/O口向DS1302输入命令和地址字节,而后在SCLK时钟脉冲信号的配合下,从I/O引脚读出或写入相关的数据的字节。所以,它和单片机二者之间的数据传送是很容易实现的,DS1302的管脚排结构图如图4.2。DS1302引脚说明:图4.4DS1302引脚图脚X1,X232.768kHz晶振引脚GND地线RST复位端I/O数据输入/输出端口SCLK串行时钟端口VCC1慢速充电引脚VCC2电源引脚4.2.2DS1302接口电路设计(1)时钟芯片DS1302的接口电路和工作原理图4.5DS1302与单片机的接口电路图4.5为DS1302的接口电路,其中VCC1为后备电源,VCC2为主电源。VCC1在单电源去提供电能的系统中可以采用提供低电源,而且可以提供低功率的电池的备份了。VCC2在采用双电源提供电能系统中就是充当主电源来运用,其在这一种运用地方式中VCC1就连接到备份地电源,以致于在没有主电源地情况之下能确保保存时间信息以及数据。DS1302由VCC1或VCC2两者中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。表1为DS1302的控制字,此控制字的位7必须置1,若为0则不能对DS1302进行读写数据。对于位6,若对时间进行读/写时,CK=0,对程序进行读/写时RAM=1。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;进行写操作时,该位为0。控制字节总是从最低位开始输入/输出的。表2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2)DS1032的控制字DS1302它的控制字由表-1所表示。控制字节的高有效位(位7)一定是逻辑1,倘若它为0,则就不可能把数据写入到DS1302中去。位6若为0,则表示的就是存取日历的时钟数据,为1,则表示存取的RAM数据。位5到位1指示的是操作单元地址。最低有效位(位0)若为1,则表示进行‘读’操作,为0,则表示进行‘写’操作。控制字节一直是从最低位输出开始的。表1DS1302的控制字格式(3)数据输入/输出(I/O口)从控制指令字输入之后的下一个时钟脉冲的上升沿,数据开始就被写入了DS1302,数据的输入从位0开始。同样的,从接下来的8位的控制指令字后的下一个时钟脉冲的下降沿,开始读出DS1302的数据,读出这些数据时从低位(0位)到高位(7)。如下图4.6所示。图4.6DS1302读/写时序图(4)DS1302的寄存器DS1302的寄存器有12,其中的7个寄存器可以和日历以及时钟有关联,存放的形式就是以数据位为BCD码的形式,它的时间和日历的寄存器以及其控制字可以见表2。表2DS1302的日历和时间寄存器此外,DS1302还有寄存年份的寄存器、充电量、控制等寄存器、与内外部的RAM相关的寄存器及和时钟突发的寄存器们等。时钟突发的寄存器可以一次性的顺序读写,除充电的寄存器之外的其他所有的寄存器的内容。DS1302和RAM关联的寄存器是可以分成为两大类:其中之一就是单个的RAM单元(31个),每一个单元组由一个的8位的字节组成。它的命令控制字是C0H~FDH,这中间奇数为读操作,偶数则为写操作;而另一类是突发地方式下地(RAM)寄存器,这种方式下可以一次性的读/写出所有RAM的31个的所以字节,它的命令控制字是FEH(写)、FFH(读)。4.3温度芯片DS18B20接口设计和性能分析4.3.1DS18B20的性能介绍(1)DS18B20的主要特性:DS18B20的温度传感器是由美国DALLAS半导体公司最新推出的,它一种改进型的智能温度传感器,和普通热敏电阻等元件相比,它可以直接的读出被测量的温度,而且能够根据实际情况的要求通过简单的程序编程来实现9-12位的数字值读取方式。在现场的温度可以直接以一线总线的数字方式来传输,很好地提高了系统的抗干扰的能力。它可以适应于恶劣地环境的现场的温度的测量。就像:雪地环境测量以及测量温度类消费电子产品等。和早前一代的产品不同的是新的产品可以支持3.3V~5.5V的电压范围,使系统设计更灵活、更简单、更方便。它的性能特点可归纳如下:①独创的单线式接口仅需要一个端口引脚进行通信;②测温范围在-55℃到125℃,分辨率最大可达0.0625℃;③采用了3线制与单片机相连,减少了外部硬件电路;④零待机功耗;⑤可通过数据线供电,电压范围在3.3V-5.5V;⑥用户可定义的非易失性温度报警设置;⑦报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;⑧负电压特性,电源极性接反时,温度计不会因发热烧毁,只是不能正常工作。(2)DS18B20工作原理:DS18B20的读、写时序与之测温原理和以前的DS1820相同,只不过是得到的温度的数值的位数因为分辨效率不同而不尽同的,而且温度转换时候的延迟时间由2s减少到750ms。图示中的低温系数的晶振的振荡的频率,它受温度变化的影响非常小,运用在产生固定的其频率地脉冲送给其计数器1。高温度的系数的晶振随着温度的变化其振荡频率很明显发生了改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。4.3.2DS18B20的接口电路设计如图4.7所示,该系统中采用数字式温度传感器DS18B20,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,用P2.3与DS18B20的DQ口连接,VCC接电源,GND接地。图4.7温度传感器DS18B20接口电路4.4闹钟模块系统设计于性能分析此部分硬件上利用AT24C02存储闹钟时间,普通蜂鸣器作为闹铃播放器件。4.4.1AT24C02器件分析(1)AT24C02的特性:①与400KHzI2C总线兼容;②到6.0伏工作电压范围;③低功耗CMOS技术;④写保护功能当WP为高电平时进入写保护状态;⑤自定时擦写周期;⑥1,000,000编程/擦除周期;⑦脚DIPSOIC或TSSOP封装;⑧温度范围商业级工业级和汽车级。(2)AT24C02功能说明AT24C02支持的是I2C为总线数据的传送协议。I2C的总线协议规定:发送器为把数据传输到总线的器件;接收器为接收总线数据的器件。数据传送的控制是由产生串行时钟以及所有起始停止信号的主器件决定的。主器件与从器件都是能够作为接收器或发送器的,但是由主器件控制传送、发送或接收数据的模式通过器件的地址输入端口A0、A1和A2可以实现将最多8个24WC01和24WC02器件连接到总线上。引脚图脚描述如下:图4.8AT24C02引脚图A0A1A2 器件地址选择SDA串行数据和地址SCL 串行时钟WP写保护VCC+1.8V~6.0GND接地4.4.2接口电路的设计AT24C02与单片机的接口电路如图4.7所示:4.9AT24C02与STC89C52RC的接口电路4.5LCD显示模块4.5.1LCM1602的特性及使用说明(1)LCM1602的接口信号说明表表3LCM1602的接口信号编号引脚符号功能说明编号引脚符号功能说明1VSS电源地9D2DATAI/O2VDD电源正极10D3DATAI/O3VL液晶显示的偏压信号11D4DATAI/O4RS数据/命令选择端(H/L)12D5DATAI/O5R/W读/写选择端(H/L)13D6DATAI/O6E使能信号14D7DATAI/O7D0DATAI/O15BLA背光正极8D1DATAI/O16BLK背光负极(2)基本地操作时序如下:①读状态:RS=L,RW=H,E=H;②写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲;③读数据:RS=H,RW=H,E=H;④写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲。(3)初始化地设置:①显示的模式设置如下表4表4显示的模式设置指令码功能00111000设置16X2显示,5X7点阵,8位的数据接口②显示开/关以及光标设置如表5表5显示开/关以及光标设置指令码功能00001DCBD=1开开显示;D=0关掉显示C=1显示出来光标;C=0不会显示光标B=1光标要闪烁;B=0光标不会显示000001NSN=1当读或着是写一个字符之后地址指针就加1,并且光标也加1;N=0当读或着是写一个字符之后地址指针就减1,并且光标也减1;S=1当要写一个字符,整个的屏幕就会显示左移4.5.2LCM1602与STC89C52RC单片机的接口电路接口电路如图4.8所示:图4.10LCM1602的接口电路图LCD的D0~D7分别接单片机的的P0口,作为数据线,因为P0口内部没有上拉电阻,所以外部另外加上10K的上拉电阻;P2.0—P2.2分别接LCD的RS、RW、E三个控制管脚;RV1用来调节LCD的显示灰度;BLK、BLA为背光的阴极和阳极,接上相应电平即点亮背光灯。4.6按键模块设计本系统用到了5个按键,其中一个用作系统手动复位,另外4个采用独立按键,该种接法查询简单,程序处理简单,可节省CPU资源,按键电路如图4.11所示,4个独立按键分别与单片机的P1.4、P1.5、P1.6、P2.7接口相连。图4.11按键电路(1)对以上4个按键作简要说明:S2——SET(时间设置键),S3——UP键,S4——DOWN键,S5——SET1(闹钟设置键)。SET键:按下SET键进入时间校准状态,按一下进入秒调整,两下分调整,依此类推可进行各年月日,时分秒以及星期的校准;UP键:当SET键按下时,UP进行SET选定项(如:小时)的加操作;DOWN键:当SET键按下时,DOWN进行SET选定项(如:小时)的减操作;SET1键:当SET键按下时,此键功能为设置闹钟时间和开关闹钟功能。(2)按键消抖设置:由于从键按下到接触稳定要经过数毫秒的抖动,键松开时也有同样的问题,这样会引起一次按键多次读数,因此需要消除抖动来解决这个问题。解决键的抖动可使用软件或硬件的方法。键数较多时,采用软件延时的方法。本产品按键较少可实验R-S触发器来克服抖动,如下图所示:图4.12R-S触发器按键消抖电路图4.7蜂鸣器设计为闹钟响铃而设计的蜂鸣器电路图如图4.13所示:图4.13蜂鸣器电路图在本设计中,蜂鸣器连接关系如图所示单片机T1脚输出接Q1基极,通过控制Q1导通或截止来控制蜂鸣器上是否有电流,从而发出声音。当前的时间值等于设定的闹铃时间值的时候,蜂鸣器会发出声音报警。5软件设计整个软件系统采用C语言编程,主要实现以下功能:(1)LCD的驱动;(2)按键的识别处理;(3)温度的采集;(4)时间数据的采集;(5)闹铃的设置。5.1软件总体部分的设计程序从main()函数开始运行,随后对LCD、DS18B20、DS1302、闹钟模块等器件进行初始化操作并对标志位赋初值,随后进入while(1)循环中运行按键扫描程序及液晶显示程序,详细程序见附录B。(1)主程序流程图如图5.1初始化标志位初始化标志位DS1302初始化闹钟模块初始化LCD1602初始化DS18B20初始化模式标志位done=?调整模式LCD显示模块闹钟模块按键扫描模块=0=1程序开始图5.1主函数流程图5.2LCD驱动及液晶显示LCD驱动:LCD的驱动包括初始化操作、写指令、写数据、显示模块的设定等操作。LCM1602有以下几个基本时序:①读状态:RS=L,RW=H,E=H;②写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲;③读数据:RS=H,RW=H,E=H;④写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲;驱动函数是根据这几个基本时序来完成的,下面是LCD的几个主要驱动函数(详细见附录):①LCD_Write()**功能:LCD写指令/数据;②LCD_Initial()**功能:LCD初始化;③GotoXY(unsignedcharx,unsignedchary)**功能:字符显示的位置;④Print(unsignedchar*str)**功能:输出字符串到LCD。5.3按键识别及处理本设计中按键采用查询法识别按键,程序简单。本系统中含有四个调整按键,分别命名为SET、UP、DOWN、SET1。在主函数里面查询SET、SET1P两个按键是否按下,UP、DOWN键的功能由SET和SET1键激活。这样设计可以减少CPU的工作量,下面简单介绍本设计中键盘扫描程序(以伪代码的形式),详细见附录B中。5.4温度数据采集由于DS18B20的单线通信功能是分时完成的,而且会有很严格的时隙的概念,因此读/写时序就会显的很重要。整个系统对于DS18B20的每一种种操作必须按协议进行。操作协议为:初始化DS18B20(发复位的脉冲信号)——发ROM的功能命令——发存储操作命令——处理此次数据。根据单总线操作协议,首先要对DS18B20进行初始化,而初始化有严格的时序控制,即总线控制器(TX)发出一个复位脉冲(至少480us的低电平),然后释放总线进入接收状态,总线由5.1K上拉电阻上拉为高电平,探测到I/O引脚上的上升沿后,DS18B20等待15us~60us后,然后发出一个存在脉冲(60us~240us的低电平信号)。下面是几个驱动函数:(1)Init_DS18B20(void)**功能:DS18B20初始化(2)ReadTemp(void)**功能:读取温度值温度采集模块流程图如图5.2所示:开始开始DS18B20初始化温度采集送STC89C52RC处理LCM1602显示是否超范围?YN图5.2温度采集模块流程图5.5时间数据采集串行的DS1302时钟芯片的期中主要包括了控制逻辑、移位寄存器、实时时钟、振荡器以及内、外部RAM。要是任意的数据传送初始化,就应把RST置为高电平,而且还应该给移位寄存器装入8位的提供地址和命令信息。数据应该串行输入在脉冲信号(SCLK)的上升沿。不管是发生‘读’周期还是‘写’周期,也不管是传送的方式是单个字节的传送或是多字节的传送,开始时候的8位指定的四十个字节中的那一个将被其访问。在初始八个时钟周期之后就把命令字装入到移位的寄存器,之外的时钟正在读操作时的输出/输入的数据。时钟脉冲(SCLK)的数量在单个字节方式下应该8加8,其在多个字节的方式下最大可以能够达到248的数。(1)DS1302的时钟部分子程序主要涉及以下几个主要函数:①voidDS1302InputByte(unsignedchard); **功能:实时的时钟写到里面一字节(内部函数)②unsignedcharDS1302OutputByte(void); **功能:实时的时钟读取一个字节(内部函数)③Write1302()**功能:DS1302写到里面数据函数④Read1302()**功能:读取DS1302某某地址地数⑤voidDS1302_GetTime(SYSTEMTIME*Time)。**功能:获取时钟芯片的时钟数据到自定义的结构型数组(2)时间程序的流程图如图5.3所示:开始开始结束初始化DS1302读时间和日期调整时间和日期NLCM1602显示需要调整时间吗?Y是否继续显示NY图5.3时间程序的流程图5.6闹钟程序这一部分的实现是采用E2PROM存储器来储存闹钟信息,因为它具有掉电仍能保存数据的特性。所以本设计中把闹钟信息写先写入AT24C02存储器中,然后在程序中读出数据与当前时间进行比较,如果相等则发出闹钟警告。如果要对闹钟值进行修改,可通过几个按键进行,系统能根据用户的设定自动更新闹钟信息。闹钟程序的流程图如图5.4所示:将所定时间写入存储器将所定时间写入存储器响铃继续响铃停止响铃是否停止闹铃当前时间与所定时间是否相等闹铃是否响够10sYYYNNN开始图5.4闹钟程序的流程图6系统的测试本多功能电子万年历实物如图6.1和6.2所示图6.1多功能电子万年历实物图图6.2初始开启实物图(1)时间、日期和闹铃设置的测试:打开开关显示器显示初始化数据,按时间调节按钮,光标会从秒位开始闪烁,进入设定调整状态。此时按加按钮,当前数字就可改变。按一次,数字加1。此时,调整的位一直在闪烁,直到再次按时间设置按钮,光标跳到下一位闪烁。调整顺序依次为:秒、分、时、星期、日期、月份、年。当年份点整结束后按时间设置按钮退出,光标停止闪烁,退出设定调整状态。按下闹铃设置按钮,光标从闹铃开关状态“ON”开始闪烁;接下来的调整与前面时间日期设置相同。测试实物图如图6.3、6.4所示:图6.3实物调试时间、日期、星期、温度显示图图6.4实物调式闹铃显示图计时器最关键的是计时的精度。电子万年历中DS1302电路使用专用的晶振,经测试制作的电子万年历,一个小时快了1s左右,误差较大,实验设计中可换用标准晶振或用软件进行修正。(2)闹铃设定的响铃测试:测试地点五号楼613,2013年5月10号:表6闹铃设定的响铃测试比较表时间本产品时间设置闹铃时间14点20分闹铃开始响铃时间14点20分1秒(3)温度的测试:测试地点五号楼613,2013年5月10号:表7间隔5分钟同一地点温度采集比较时间实际测量本产品测量14点23.5℃23.1℃14点5分23.2℃23.9℃通过比较本产品采集的温度和温度计采集的温度,两者之间温度值相差不大,因此本产品可以完成温度采集的要求。通过调式证实本系统可以完成上文介绍的有共能,但在测试过程中发现本系统没有记忆功能。总结论文首先对本设计作了简要描述,随后提出了不同的设计方案,经过论证最后确定该设计采用电源模块、时钟模块、显示模块、键盘接口模块、温度测量模块和闹钟模块共六个模块组成,接着分别从硬件系统和软件系统两方面对基于单片机的电子万年历设计作了详细论述,另外还简要介绍了一下系统的调试。在整个设计过程中,硬件方面主要设计了STC89C52RC单片机的最小系统、DS1302接口电路、DS18B20接口电路、闹钟及LCD显示;软件方面借助各个渠道的资料,主要设计了阳历数据读取程序、阳历转阴历程序、温度采集程序、闹铃程序以及LCD显示程序;系统的调试主要是通过一块STC89C52RC开发板,再借助于Keil、STC以及少许自己搭建的外围电路实现的;再此过程中,分步调试时显示出了阳历的日期及时间,还有实时温度,集中调试时没有达到预期效果。但在此过程中培养了自己的动手能力。此多功能电子万年历具有读显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。致谢经过几个月的探索与努力,在指导老师的精心指导写,终于完成了毕业设计及论文。在论文完成之际,我的心情万分激动。从论文的选题、资料的收集到论文的撰写编排整个过程中,我得到了许多的热情帮助。其中无不凝聚着指导老师王老师的汗水和心血,在此本人深表感谢!首先我要感谢我的毕业论文指导老师王涛老师,从论文最初的选题,到后来的开题报告,直到论文完成的整个过程都的到了王老师的精心指导。王老师认真仔细的学风、踏实勤俭的工作态度每时每刻都激励着我要努力的学习,并将鞭策我在未来的工作中锐意进取、奋发努力。导师的指导将使我终生受益。还要对所有授课老师表示深深的谢意!感谢我的各位同学和朋友,只因为有你们我的论文写作才能顺利文成!再者我要感谢各位到场老师,是你们在百忙之中抽出时间来对我的论文进行指导,你们的意见和建议将是我一生的财富!最后,再次向所有关心我、帮助我、支持我的人们表示深深的谢意!参考文献[1]张萌.单片机应用系统开发综合实例[M].北京:清华大学出版社,2007.7.[2]楼然苗.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.7.[3]沈德金.MCS-51系列单片机接口电路与应用程序实例[M].北京:北京航空航天大学出版社,1991.4.[4]朱思荣.51单片机实现公历与农历、星期的转换[Z].当当电子网.[5]AT24WC01/02/04/08/161K/2K/4K/8K/16K位串行E2PROM[6]DS1302TrickleChargeTimekeepingChipdatasheet[D].[7]马忠梅.籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2001年.[8]陈明荧,8051单片机课程设计实训教程[M].北京:清华大学出版社.[9]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003年.[10]新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.2.[11]李广弟.单片机原理及应用[M]北京航空航天大学出版社,2004年.[12]王越明.电子万年历的设计[J].黑龙江科技信息,2004年.[13]SCM1602LCM使用说明书[DB].长沙:长沙太阳人电子有限公司.[14]赵亮.单片机C语言编程与实例[M]人民邮电出版社,2003年.[15].[16].[17].附录附录A源程序:#include<reg52.h>#include"intrins.h"#include"24c02.h"#defineucharunsignedchar#defineuintunsignedintucharcodetabe1[]="20--";//液晶一直显示的字符ucharcodetabe2[]="::";ucharcodetabe3[]="Alarmset:";ucharmiao,fen,shi,nian,yue,ri,week,wendu_shi,wendu_ge,wendu_shu,variate,alarm_shi,alarm_fen,alarm_miao;ucharflag=1,count=0,flag_up=0,flag_down=0,flag_alarm=0,alarm_on,alarm_count=0,done=0;uintwendu;//定义IOsbitDQ=P1^0;//ds18b20温度传送数据IO口sbitds1302_rst=P1^1;//1302复位sbitds1302_io=P1^2;//数据输入输出sbitds1302_sclk=P1^3;//串行时钟sbitalarm_out=P3^6; sbitlcd1602_rs=P2^0; //1602命令、数据选择sbitlcd1602_rw=P2^1; //1602写sbitlcd1602_e=P2^2; //1602使能sbitset=P2^4; //选择按键sbitup=P2^5; //加sbitdown=P2^6; //减sbitnao=P2^7;sbitACC0=ACC^0;sbitACC7=ACC^7;//延时voiddelay(ucharx){ uchary,z; for(z=x;z>0;z--) for(y=110;y>0;y--);}voiddelay1(){ _nop_(); _nop_(); }ds18b20_delay(ucharxus)//延时xus{ while(xus--); }/**********************ds18b20***********************/voidds18b20_init()//DS18B20初始化{ ucharx=0; DQ=1; ds18b20_delay(8); DQ=0; ds18b20_delay(80); DQ=1; ds18b20_delay(14); x=DQ; ds18b20_delay(20); }voidwrite_onechar(uchardat)//写一字节{ uchari; for(i=8;i>0;i--) { DQ=0; if(dat&0x01==0x01) DQ=1; else DQ=0; ds18b20_delay(5); DQ=1; ds18b20_delay(1); dat>>=1; }}ucharread_onechar() //读一字节{ ucharvalue=0,i; for(i=8;i>0;i--) { value>>=1; DQ=0; ds18b20_delay(1); DQ=1; if(DQ==1) value|=0x80; else value&=0x7f; ds18b20_delay(4); } returnvalue;}uintread_wendu()//DS18B20读温度{ uchara=0,b=0; uintwen=0x0000; ds18b20_init(); //初始化 write_onechar(0xcc); //跳过读序号列号的操作 write_onechar(0x44); //启动温度转换 ds18b20_delay(150); ds18b20_init(); //初始化 write_onechar(0xcc); //跳过读序号列号的操作 write_onechar(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度 ds18b20_delay(150); b=read_onechar(); //读取温度值低位 a=read_onechar(); //读取温度值高位 wen=a; wen=(wen<<8)|b; returnwen;}/**********************ds1302***************************/voidwrite_byte(uchardat)//写一字节{ uchark; ACC=dat;for(k=8;k>0;k--) { ds1302_io=ACC0; ds1302_sclk=0; //拉低sclk ds1302_sclk=1;//拉高sclk ACC>>=1; } }ucharread_byte(){ uchark;for(k=8;k>0;k--) { ACC7=ds1302_io; ds1302_sclk=1;//拉高sclk ds1302_sclk=0; //拉低sclk ACC>>=1; } returnACC; }voidds1302_write(ucharadd,uchardate){ ds1302_rst=0; ds1302_sclk=0;//在rst没拉高之前先把sclk置0 ds1302_rst=1; write_byte(add); write_byte(date); ds1302_sclk=1; ds1302_rst=0; }uchards1302_read(ucharadd){ uchartemp; ds1302_rst=0; ds1302_sclk=0;//在rst没拉高之前先把sclk置0 ds1302_rst=1; write_byte(add); temp=read_byte(); ds1302_sclk=1; ds1302_rst=0; returntemp; }voidds1302_init()//ds1302初始化{ ds1302_rst=0; ds1302_sclk=1; ds1302_write(0x8e,0x00); //写允许 ds1302_write(0x80,0x58); ds1302_write(0x82,0x56); ds1302_write(0x84,0x23); ds1302_write(0x86,0x21); ds1302_write(0x88,0x12); ds1302_write(0x8a,0x02); ds1302_write(0x8c,0x10); ds1302_write(0x90,0xa5);//充电 ds1302_write(0x8e,0x80); //写保护 }/***************************lcd1602***************************/voidlcd_write_com(ucharcom)//命令字写入lcd单元中{lcd1602_rw=0;delay1();lcd1602_rs=0; //RW=1,RS=0,写LCD命令字delay1();P0=com; //将com中的命令字写入LCD数据口delay1();lcd1602_e=1; //E端时序delay1();lcd1602_e=0;delay1();lcd1602_rw=1;delay(5);}voidlcd_write_date(uchardate)//数据写入lcd单元中{lcd1602_rw=0;delay1();lcd1602_rs=1; //RW=0,RS=1,写LCD命令字delay1();lcd1602_e=1; //E端时序delay1();P0=date; //将dat中的显示数据写入LCD数据口delay1();lcd1602_e=0;delay1();lcd1602_rw=1;delay(5);}voidlcd1602_init() //LCD初始化函数 { ucharlcdnum; P3=0xdf; lcd_write_com(0x38); lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01); lcd_write_com(0x80); for(lcdnum=0;lcdnum<8;lcdnum++) //写第一行数据 { lcd_write_date(tabe1[lcdnum]); delay(2); } lcd_write_com(0x80+0x40); //写入第二行数据 for(lcdnum=0;lcdnum<13;lcdnum++) { lcd_write_date(tabe2[lcdnum]); delay(2); }}/****************************显示部分*****************************/voidwrite_time1(ucharadd,uchardate)//日期送显示{ ucharshi,ge; shi=date/10; ge=date%10; lcd_write_com(0x80+add); lcd_write_date(0x30+shi); lcd_write_date(0x30+ge);}voidwrite_time2(ucharadd,uchardate)//时间送显示{ ucharshi,ge; shi=date/10; ge=date%10; lcd_write_com(0x80+0x40+add); lcd_write_date(0x30+shi); lcd_write_date(0x30+ge);}ucharbcd_decimal(ucharbcd)//bcd转换十进制{ uchardecimal; decimal=bcd>>4; decimal=decimal*10+(bcd&=0x0f); returndecimal; }voidwendu_decimal(uintdat)//温度转换后送显示{ floattemp; temp=dat*0.625;//dat*0.0625*10 wendu_shi=temp/100;//取十位temp除不用定义类型 wendu_ge=((uint)temp)%100/10;//取个位temp求模要定义类型,为16位,故定义uint wendu_shu=((uint)temp)%100%10;//取小数 lcd_write_com(0x80+0x40+10);//送显示 lcd_write_date(0x30+wendu_shi); lcd_write_date(0x30+wendu_ge); lcd_write_date(0x2e); lcd_write_date(0x30+wendu_shu); lcd_write_date(0xdf);//温度符号 lcd_write_date(0x43); }voidwrite_week(ucharwe)//星期送显示{ lcd_write_com(0x80+0x0d); switch(we) { case1:lcd_write_date('M'); lcd_write_date('0'); lcd_write_date('N'); break; case2:lcd_write_date('T'); lcd_write_date('U'); lcd_write_date('E'); break; case3:lcd_write_date('W'); lcd_write_date('E'); lcd_write_date('D'); break; case4:lcd_write_date('T'); lcd_write_date('H'); lcd_write_date('U'); break; case5:lcd_write_date('F'); lcd_write_date('R'); lcd_write_date('T'); break; case6:lcd_write_date('S'); lcd_write_date('A'); lcd_write_date('T'); break; case7:lcd_write_date('S'); lcd_write_date('U'); lcd_write_date('N'); break; } }/***********************按键处理***************************/ucharkey_bcd(ucharkey_decimal)//转成ds1302所需的BCD码{ uchartemp; temp=(((key_decimal/10)&0x0f)<<4)|(key_decimal%10); returntemp; }voidkey_up_down()//加减键处理{ if(up==0) { delay(2); flag_up=1; //加更新标志 while(!up); switch(count) { case1: miao++; if(miao>59) miao=0; break; case2: fen++; if(fen>59) fen=0; break; case3: shi++; if(shi>23) shi=0; break; case4: week++; if(week>7) week=1; break; case5: ri++; if(ri>31) ri=1; break; case6: yue++; if(yue>12) yue=1; break; case7: nian++; if(nian>99) nian=0; break; } } if(down==0)//减键处理 { delay(2); flag_down=1; //减更新标志 while(!down); switch(count) { case1: miao--; if(miao==255) miao=59; break; case2: fen--; if(fen==255) fen=59; break; case3: shi--; if(miao==255) shi=23; break; case4: week--; if(week<1) week=7; break; case5:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感恩信合演讲稿
- 实验室合作协议书(10篇)
- 彩钢夹芯板安装施工工艺流程
- 译林版英语六年级下册 Project1 第一课时
- (完整版)材料需求计划
- 监理售后服务承诺书-承诺书
- 2026年特种设备维护保养管理制度
- 公司信息化人员管理办法
- 胎膜早破护理个案
- 南充市专职消防员招聘笔试题及答案
- SWITCH暗黑破坏神3超级金手指修改 版本号:2.7.7.92380
- (完整word版)中医病证诊断疗效标准
- 小学道法6 人大代表为人民1课件
- 色盲检测图(俞自萍第六版)
- 磨机负荷的磨音多频带检测研究-毕业论文
- 以焦炉气为原料合成甲醇项目可行性研究报告
- 文胸基础知识培训专家讲座
- 海产鱼类增养殖试题库
- YY/T 0681.4-2021无菌医疗器械包装试验方法第4部分:染色液穿透法测定透气包装的密封泄漏
- GB/T 13343-2008矿用三牙轮钻头
- 农药经营管理制度 农资产品经营管理制度 装卸储存 进货规章制度牌 共12份 可上墙 版
评论
0/150
提交评论