基于液晶显示的万年历设计-毕业论文_第1页
基于液晶显示的万年历设计-毕业论文_第2页
基于液晶显示的万年历设计-毕业论文_第3页
基于液晶显示的万年历设计-毕业论文_第4页
基于液晶显示的万年历设计-毕业论文_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言结构简单,功能齐全,具有一定的推广价值。随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步……。电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。万年只是一种象征,表示时间跨度大.这次设计通过对万年历系统的设计,详细介绍AT89S52单片机应用中的按键处理,数码管显示原理,动态和静态显示原理,定时中断,A/D转换等原理.该系统能够显示年,月,日,小时,分钟,秒,星期,农历,温度,通过按键可以修改时间等功能。第一章方案选择与万年历研究情况1.1方案选择1.1.1时钟芯片选择方案一:不使用芯片,采用单片机的定时计数器这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时,分,秒。如:利用AT89S52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。方案二:并行接口时钟芯片DS12887特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。方案三:串行接口时钟芯片DS1302芯片主特性:(1)实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力,还有闰年调整的能力(2)318位暂存数据存储RAM(3)串行I/O口方式使得管脚数量最少(4)宽范围工作电压2.05.5V(5)工作电流2.0V时,小于300nA(6)读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式(7)8脚DIP封装或可选的8脚SOIC封装根据表面装配(8)简单3线接口(9)与TTL兼容Vcc=5V(10)可选工业级温度范围-40+85优点:串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。所以,最终选择串行时钟芯片DS1302。1.1.2键盘选择方案一:矩阵式键盘行列式键盘的原理就是每一行线与每一列线的交叉地方不相通,而是接上一个按键,通过按键来接通。特点:以省出不少的I/O口资源,程序编写相对复杂点,适用于键数比较多的情况。方案二:独立式键盘独立式键盘是指各个按键相互独立地连接到各自的单片机的I/O口,I/O口只需要做输入口就能读到所有的按键。特点:电路简单,程序容易写,适用于按键数较少的情况。所以我们选择独立式键盘。1.1.3显示模块选择方案一:LED数码管显示数码管显示比较常用的是采用CD4511和74LS138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。目前单片机数码管普通采用动态显示。编程简单,但只能显示数字,不能显示中文。方案二:LCD1602能够显示英文和数字。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号。特点:1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。1.2电子万年历的研究情况经过多方面考虑与反复的实践与验证,我决定使用AT89s52单片机为核心处理器,采用串行接口时钟芯片DS302作为内部时钟,以独立式键盘控制,LCD1602为显示屏的万年历,该万年历不仅可以显示传统的年,月,日,时,分,秒还能显示星期,农历和实时温度。它大大方便的人们了解时间以及天气变化。第二章主要硬件描述2.1AT89S52AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。2.1.1主要性能1、与MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、六个中断源;9、全双工UART串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符。2.1.2引脚说明图2-1:AT89S52引脚图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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能:P1.0T2(定时器/计数器T2的外部计数输入),时钟输出。P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)。P1.5MOSI(在系统编程用)。P1.6MISO(在系统编程用)。P1.7SCK(在系统编程用)P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。端口引脚第二功能:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.2LC16022.2.1简介1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。2.2.2特性(1)3.3V或5V工作电压,对比度可调。(2)内含复位电路。(3)提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。(4)有80字节显示数据存储器DDRAM。(5)内建有192个5X7点阵的字型的字符发生器CGROM。(6)8个可由用户自定义的5X7的字符发生器CGRAM。2.2.3管脚功能图2-2:LCD1602引脚图1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。2.3时钟芯片DS13022.3.1工作原理DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。2.3.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进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。图2-3DS1302引脚图2.4数字温度传感器DS18B202.4.1DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图2-4DS18B20内部结2.4.2DS18B20引脚说明(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。图2-5DS18B20引脚图硬件设计与实现电子时钟至少包括秒信号发生器、时间显示电路、按键电路、供电电路等四部分,另外,本设计要求该电子钟能够采集温度,所以还需要温度采集电路,硬件电路框图如图3-1。AT89S52AT89S52LCD1602显示器DS1302时钟温度传感器DS18B20键盘+5V电源图3-1硬件电路框图该系统使用AT89C52单片机为核心微控制器,通过读取时钟日历芯片DS1302和温度传感器DS18B20的数据,完成电子时钟的主要功能——时钟/日历和环境温度采集,使用比较直观的LCD1602显示,同时显示年月日,星期,时分秒以及环境温度值。键盘是为了完成时钟/日历的校准。整个电路使用了+5V电源供电。3.1单片机最小系统的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。图3-2单片机最小系统3.2时钟电路的设计本系统采用有DS1302串行时钟芯片作为主时钟电路,该电路使用单独的32.768M的晶振和单独的电源供电,减小主控的负担。电路图如图3-3所示。图3-3时钟电路3.3温度采集模块的设计采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。电路图如图3-4所示。图3-4温度采集电路3.4LCDM1602显示模块设计图3-5LCD显示电路第四章系统软件设计与实现89S52单片机可以应用汇编语言和C语言进行编程。汇编语言与机器语言指令一一对应,所以用汇编语言编写的程序在单片机里运行起来效率较高。C语言程序可读性高,更便于理解,本设计采用C语言编程[11]。4.1主程序设计第一次上电,系统先进行初始化,LCD显示初始时间“03:25:00”,并开始走时,初始日期为“2010-4-30”。单片机依次开始调用DS1302子程序,DS18B20子程序,键盘子程序返回开头循环运行[3]。主序流程图如图4-1。开始开始初始化显示子程序DS1302子程序DS18B20子程序延时程序图4-1主序流程图4.2实时时钟日历子程序设计该程序主要实现对DS1302写保护、充电,对年、月、日、星期、时、分、秒等寄存的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用单片机内部软件模拟串行时钟脉冲,并由I/O口输出,所以在通信过程中最好保证传输的连续性,不要允许中断,其流程图如图4-2。DS1302每次上电后会自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果DS1302一直没有掉电则不会存在此问题。在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8个字节。开始开始初始化初始化写入时钟初值写入时钟初值开始计时开始计时读出数据读出数据返回返回图4-2对DS1302操作流程图4.3环境温度采集子程序设计DS18B20是1--wire单线器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议来对读写数据提出严格的时序要求,AT89C51单片机并不支持单线传输。因此,必须采用软件的方法来模拟单线的协议时序[6]。主机操作单线器件DS18B20必须遵循下面的顺序。1.初始化;2.发ROM操作命令;3.内存操作命令;4.数据处理。开始初始化DS18B20发起SkipRom命令开始初始化DS18B20发起SkipRom命令发起Convert命令延时1s等待温度转换完成初始化DS18B20应答脉冲否?发起ReadScrarcpad命令读低8位字节TL数据读高8位字节TH数据发出报警信号是否超出设置温度范围应答脉冲否?图4-3对环境温度采集转换并读取数据的程序流程图4.4按键子程序设计单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。在随机扫描方式中,CPU完成某特定任务后,即执行键盘程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作,在执行键盘按键规定的功能中不理踩键盘输入。定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键按下,键盘反应速度快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。前两种扫描方式均会占用CPU大量时间,不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。由于本设计中AT89C51单片机在系统中的主要任务是接收DS1302和DS18B20的数据并送出显示,完成时钟/日历和日期/温度的控制,89C51单片机完全有能力完成以上工作,所以采用随机扫描方式,系统也能够正常运行。第五章测试结果分析与结果5.1测试结果分析(1)在测试中遇到LCD1602不显示分析:首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏。再接着研究程序的时序图是否正确。最后发现程序时序方面出了点小错。修改后就把问题解决了(2)测试中遇到调时间调到2057年后跳到2000年分析:认真研究时钟芯片的Datasheet发现,对年的读取,读出后是BCD码转换成十制显示时算法不正确(3)按键调整时,不是按单位递增和递减分析:在键盘程序中,按键一次,向芯片写入一个新的数字,在写入数字后必须有一定延时才再写入另一个数字(4)烧写程序进单片机里面时,有时会在显示屏上显示烂码.分析:用电压表检查.最后检测出USB下载线的端口电压不够换条新线就可以把问题解决5.2测试总结经过多次的反复测试与分析,掌握了硬件的设计与分析的能力,学会看英文版的Datasheet,同时在软件的编程方面得到更到的提高,对编程能力得到加强。对所学的知识得到很大的提高与巩固。最终实现功能:(1)能显示阳历年、月、日、星期、小时、分、秒(2)显示模块采用LCD液晶显示,要求能用按键调整时间。(3)能显示阴历月、日,在显示阴历时间时能标明是否为闰年。(4)具有定时报警功能,能够进行整点和半点语音报时。(5)能够准确在LCD上显示室。(6)在显示农历时通过算法能够把天干地去也显示出来。结束语通过对基于单片机的万年历的研究和设计,完成了一种能够显示阳历、阴历、星期、时间、实时温度、天干地支的多功能万年历,该万年历还可以定时报警和进行进行整点和半点报时。本系统设计从开始到完成包括文档的编写总共花了一个月左右的时间,设计的难点在于星期和年月日的计算方法,还有单片机和各个芯片之间的通信协议,液晶的读写时序,按键的防抖。本系统基本完成了设计指标的所有要求,所有的程序分块编写,通过main函数来调用,增加了程序的易修改性和易读性,方便他人的使用和改进。但是由于时间的局限性以及本人能力的有限性,本系统还有许多需要改进和完善的地方。其中主要的问题就是功耗和电源供电的问题,该处采用5V供电,最好采用3V供电。整个电路的功耗太大,没让单片机工作在空闲模式,这都是作品不实用,不能够大批量生产,这都有待改进,希望以后有机会对该系统做进一步的完善。致谢在本次设计中,我想首先感谢蒋老师,从设计的开始到完成,给了我很多指导性的意见,不断帮助我完善系统设计。从大一开始,蒋老师作为我的导师,一直很注重我们动手能力的培养。他丰富的教学及实际操作经验、严谨的治学态度,以及和蔼的态度,使得我投入了大量时间在创新基地的实验室中,做了许多实验。而这,对我的帮助和影响是非常巨大的。正是因为有了这些锻炼的机会,我才能非常顺利地完成我的毕业设计。最后非常感谢无锡科技职业学院应用电子系的老师和同学,是他们让我学会了如何学习,更学会了如何做人,这将是我终身受益的宝贵财富。参考文献[1]周兴华编著.手把手教你学单片机C程序设计.北京:北京航空航天大学出版社,2007[2]侯玉宝编著.基于Proteus的51系列单片机设计与仿真.北京:电子工业出版社,2008[3]张义和编著.例说51单片机(C语言).北京:人民邮电出版社.2008[4]李朝青编著.单片机原理及接口技术.北京:北京航空航天大学出版社,2005[5]周慈航编著.单片机应用程序设计基础.北京:北京航空航天大学出版社,1991[6]马忠梅编著.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2003[7]李广弟编著.单片机基础.北京:北京航空航天大学出版社,1994[8]曾巧媛编著.单片机原理及应用.北京:电子工业出版社,1997[9]邱丽芳编著.单片机原理与应用.人民邮电出版社,2007[10]何立民编著.MCS-51系列单片机应用系统设计.北京航空航天大学出版社,2003附录一:原理图附录二:源程序程序如下#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharuchartable[]="0123456789:-";uchart,num=0;uinttemp,we; //定义整型的温度数据floatf_temp; //定义浮点型的温度数据uintshi,fen,miao,nian,yue,ri;uintshi1,fen1,miao1,nian1,yue1,ri1,we1;sbitRS=P2^6;sbitEN=P2^7;sbitds=P2^0;sbitSCL=P1^2;sbitIO=P1^1;sbitRST=P1^0; sbitkey1=P3^0;sbitkey2=P3^1;sbitkey3=P3^2;voiddelay(uintz){uintx,y;for(x=z;x>0;x--) for(y=120;y>0;y--);}#include<wendu.c>#include<1302.c>#include<1602.c>#include<key.c>voidmain(){init_1602();init_1302();//reset_1302(); while(1) { tempchange(); display(); keyscan(); }}1602.voidwrite_date(uchardate){EN=0;RS=1;P0=date;EN=0;delay(5);EN=1;}voidwrite_com(uchardate){EN=0;RS=0;P0=date;EN=0;delay(5);EN=1;}voidinit_1602(){write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}voiddisplay(){nian=read_byte(0x8d);yue=read_byte(0x89);ri=read_byte(0x87);shi=read_byte(0x85);fen=read_byte(0x83);miao=read_byte(0x81);we=read_byte(0x8b);write_com(0x80+1);write_com(0x0c);write_date(table[2]);write_date(table[0]);write_date(table[nian/16]);write_date(table[nian%16]);write_date(table[11]);write_date(table[yue/16]);write_date(table[yue%16]);write_date(table[11]);write_date(table[ri/16]);write_date(table[ri%16]);write_com(0x80+13);switch(we){case1:write_date('M');delay(5);write_date('O');delay(5); write_date('N'); break;case2:write_date('T');delay(5);write_date('U');delay(5); write_date('E'); break;case3:write_date('W');delay(5);write_date('E');delay(5); write_date('D'); break;case4:write_date('T');delay(5);write_date('H');delay(5); write_date('U'); break;case5:write_date('F');delay(5);write_date('R');delay(5); write_date('T'); break;case6:write_date('S');delay(5);write_date('A');delay(5); write_date('T'); break;case7:write_date('S');delay(5);write_date('U');delay(5); write_date('N'); break;}write_com(0x80+0x40+1);write_date(table[shi/16]);write_date(table[shi%16]);write_date(table[10]);write_date(table[fen/16]);write_date(table[fen%16]);write_date(table[10]);write_date(table[miao/16]);write_date(table[miao%16]);write_com(0x80+0x40+10);write_date(table[get_temp()/100]);write_date(table[get_temp()%100/10]);write_date(0x2E);write_date(table[get_temp()%10]);write_date(0xdf);write_date('C');}Key.cvoidkeyscan(){write_byte(0x8e,0);//允许写入nian1=(nian/16)*10+nian%16;//把当前从1302中读出的十六进制存放的数,转化成十进制计算yue1=(yue/16)*10+yue%16;ri1=(ri/16)*10+ri%16;shi1=(shi/16)*10+shi%16;//把当前从1302中读出的十六进制存放的数,转化成十进制计算fen1=(fen/16)*10+fen%16;miao1=(miao/16)*10+miao%16;we1=(we/16)*10+we%16;if(key1==0){delay(5); if(key1==0) { num++; if(num==8)num=1;if(num==1)write_com(0x80+3);write_com(0x0f); if(num==2)write_com(0x80+6); write_com(0x0f); if(num==3)write_com(0x80+9); write_com(0x0f);if(num==4)write_com(0x80+13); write_com(0x0f);if(num==5)write_com(0x80+0x40+1);write_com(0x0f); if(num==6)write_com(0x80+0x40+4); write_com(0x0f); if(num==7)write_com(0x80+0x40+7); write_com(0x0f);} while(!key1); }switch(num) { case1:write_com(0x80+3);write_com(0x0f);//年 if(key2==0) { delay(5); if(key2==0) { nian1++; if(nian1==100)nian1=0; write_byte(0x8c,((nian1/10)*16+nian1%10)); } } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { nian1--; if(nian1==-1)nian1=99; write_byte(0x8c,((nian1/10)*16+nian1%10)); } } while(!key3) display(); break; case2:write_com(0x80+6); write_com(0x0f); //月 if(key2==0) { delay(5); if(key2==0) { yue1++; if(yue1==13)yue1=1; } write_byte(0x88,((yue1/10)*16+yue1%10)); } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { yue1--; if(yue1==0)yue1=12; } write_byte(0x88,((yue1/10)*16+yue1%10)); } while(!key3) display(); break; case3:write_com(0x80+9); write_com(0x0f);//日 if(key2==0) { delay(5); if(key2==0) { ri1++;} write_byte(0x86,((ri1/10)*16+ri1%10));//加上0x的十进制数//注意往1302里存放的时候,十进制的数要想正确显示,2323 } //存放应以0x23,来存放,,,即需要给十进制加上0x while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { if(yue1==1||yue1==3||yue1==5||yue1==7||yue1==8||yue1==10||yue1==12){if(ri1==0){ri1=31;}}if(yue1==4||yue1==6||yue1==9||yue1==11){if(ri1==0){ri1=30;}} ri1--; } write_byte(0x86,((ri1/10)*16+ri1%10)); } while(!key3) display(); break;case4:write_com(0x80+13);write_com(0x0f);//星期 if(key2==0) { delay(5); if(key2==0) { we1++; if(we1==8)we1=1; write_byte(0x8a,((we1/10)*16+we1%10)); } } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { we1--; if(we1==-1)we1=7; write_byte(0x8a,((we1/10)*16+we1%10)); } } while(!key3) display(); break; case5:write_com(0x80+0x40+1);write_com(0x0f);//时 if(key2==0) { delay(5); if(key2==0) { shi1++; if(shi1==24)shi1=0; write_byte(0x84,((shi1/10)*16+shi1%10)); } } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { shi1--; if(shi1==-1)shi1=23; write_byte(0x84,((shi1/10)*16+shi1%10)); } } while(!key3) display(); break; case6:write_com(0x80+0x40+4); write_com(0x0f);//分 if(key2==0) { delay(5); if(key2==0) { fen1++; if(fen1==60)fen1=0; } write_byte(0x82,((fen1/10)*16+fen1%10)); } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { fen1--; if(fen1==-1)fen1=59; } write_byte(0x82,((fen1/10)*16+fen1%10)); } while(!key3) display(); break; case7:write_com(0x80+0x40+7); write_com(0x0f);//秒 if(key2==0) { delay(5); if(key2==0) { miao1=0; } write_byte(0x80,((miao1/10)*16+miao1%10));//加上0x的十进制数//注意往1302里存放的时候,十进制的数要想正确显示,2323//存放应以0x23,来存放,,,即需要给十进制加上0x } while(!key2) display(); if(key3==0) { delay(5); if(key3==0) { miao1=0; } write_byte(0x80,((miao1/10)*16+miao1%10)); } while(!key3) display(); break; } write_byte(0x8e,0x80); //禁止写入}1302.c基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究\t"_bla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论