版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕业设计(论文)报告题 目 基于液晶显示的万年历 系 别 专 业 班 级 学生姓名 学 号 指导教师 2013年 4 月基于液晶显示的万年历摘要:本设计应用at89s52芯片作为核心,采用c语言进行编程,实现以下功能:小时、分、秒、年、月、日、星期的显示和实时温度检测。该设计的电子时钟系统由时钟电路、lcd显示电路、按键调整电路和温度检测电路四部分组成。使用时钟芯片ds1302完成时钟日期的功能,以lcd1602为显示器,同时利用温度传感器ds18b20测量周围环境温度,并且可以依靠按键随时对日期时间进行调整。我们共设计四个按键,一个模式键,也就是我们用来选定被修改的数字的,两个调整键,一个“
2、加”键和一个“减”键,当按下模式键,选定要调整的数字的时候,“加”、“减”可以帮我们调到所需的状态,还有一个复位键,显示精度为1秒。设计还提供三位实时温度检测并显示,其显示精度为0.1。关键词:at89s52、时钟日历芯片ds1302、温度传感器ds18b20、lcd1602目录前言1第一章 方案选择与万年历研究情况21.1 方案选择21.1.1时钟芯片选择21.1.2键盘选择31.1.3显示模块选择31.2电子万年历的研究情况4第二章 主要硬件描述52.1 at89s5252.1.1主要性能52.1.2引脚说明52.2 lcm160282.2.1工作原理82.2.2端口引脚第二功能92.2.
3、3管脚功能102.3 芯片ds1302112.3.1工作原理112.3.2引脚功能及结构122.4 数字温度传感器ds18b20122.4.1ds18b20工作原理122.4.2ds18b20 引脚定义13第三章 硬件设计与实现143.1 单片机最小系统的设计143.2 时钟电路的设计153.3 温度采集模块的设计153.4 lcdm1602显示模块设计16第四章 系统软件设计与实现174.1主程序设计174.2实时时钟日历子程序设计174.3环境温度采集子程序设计184.4按键子程序设计20第五章 测试结果分析与结果215.1 测试结果分析215.2 测试总结21结束语22致谢23参考文献2
4、4附录一:原理图25附录二:源程序26前言万年历,就是记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历, 方便有需要的人查询使用.万年只是一种象征,表示时间跨度大.这次设计通过对万年历系统的设计, 详细介绍at89s52单片机应用中的按键处理,数码管显示原理,动态和静态显示原理,定时中断,a/d转换 等原理.该系统能够显示年,月,日,小时,分钟,秒,星期,农历,温度,通过按键可以修改时间等功能.此系统结构简单,功能齐全,具有一定的推广价值。 第一章 方案选择与万年历研究情况1.1 方案选择1.1.1时钟芯片选择方案一:不使用芯片,采用单片机的定时计数器这种方法原理是利用单片
5、机芯片的定时器来产生固定的时间,模拟时钟的时, 分,秒。如:利用at89s52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。方案二:并行接口时钟芯片 ds12887特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。但是对于80c52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口
6、芯片的体积相对较大。方案三:串行接口时钟芯片ds1302芯片主特性: (1)实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力 (2)31 8 位暂存数据存储ram (3)串行 i/o 口方式使得管脚数量最少 (4)宽范围工作电压2.0 5.5v (5)工作电流 2.0v 时,小于300na (6)读/写时钟或ram 数据时有两种传送方式单字节传送和多字节传送字符组方式 (7)8 脚dip 封装或可选的8 脚soic 封装根据表面装配 (8)简单 3 线接口 (9)与 ttl 兼容vcc=5v(10)可选工业级温度范围-40 +85优点:串行接口的日历时钟芯片,
7、使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。所以,最终选择串行时钟芯片ds1302。1.1.2键盘选择 方案一:矩阵式键盘行列式键盘的原理就是每一行线与每一列线的交叉地方不相通,而是接上一个按键,通过按键来接通。特点: 以省出不少的i/o 口资源,程序编写相对复杂点,适用于键数比较多的情况。 方案二: 独立式键盘独立式键盘是指各个按键相互独立地连接到各自的单片机的i/o 口,i/o口只需要做输入口就能读到所有的按键。特点: 电路简单,程序容易写,适用于按键数较少的情况。 所以我们选择独立式键盘。1.1.3显示模块选择 方案一:led数码
8、管显示数码管显示比较常用的是采用cd4511和74ls138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。目前单片机数码管普通采用动态显示。编程简单,但只能显示数字,不能显示中文。方案二:lcd1602 能够显示英文和数字。 1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号。特点:1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。1.2电子万年历的研究情况经过多方面考虑与反复的实践与验证,我决定使用at89s52单片机为核心处
9、理器,采用串行接口时钟芯片ds302作为内部时钟,以独立式键盘控制,lcd1602为显示屏的万年历,该万年历不仅可以显示传统的年,月,日,时,分,秒还能显示星期,农历和实时温度。它大大方便的人们了解时间以及天气变化。第二章 主要硬件描述2.1 at89s52at89s52是一种低功耗、高性能cmos 8位微控制器,具有8k 在系统可编程flash 存储器。使用atmel 公司高密度非易失性存储器技术制造,与工业80c51 产品指令和引脚完全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得at89s52在众多嵌入
10、式控制应用系统中得到广泛应用。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 公司高密度
11、非 易失性存储器技术制造,与工业80c51 产品指令和引脚完 全兼容。片上flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位cpu 和在系统 可编程flash,使得at89s52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 at89s52具有以下标准功能: 8k字节flash,256字节ram, 32 位i/o 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,cpu 停止工作,允
12、许ram、定时器/计数器、串口、中断继续工 作。掉电保护方式下,ram内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。p0 口:p0口是一个8位漏极开路的双向i/o口。作为输出口,每位能驱动8个ttl逻 辑电平。对p0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,p0口也被作为低8位地址/数据复用。在这种模式下, p0不具有内部上拉电阻。 在flash编程时,p0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。p1 口:p1 口是一个具有内部上拉电阻的8 位双向i/o 口,p1 输出缓冲器能驱动4 个 ttl
13、 逻辑电平。对p1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。此外,p1.0和p1.1分别作定时器/计数器2的外部计数输入(p1.0/t2)和定时器/计数器2 的触发输入(p1.1/t2ex)。 在flash编程和校验时,p1口接收低8位地址字节。引脚号第二功能:p1.0 t2(定时器/计数器t2的外部计数输入),时钟输出。p1.1 t2ex(定时器/计数器t2的捕捉/重载触发信号和方向控制)。p1.5 mosi(在系统编程用)。p1.6 miso(在系统编程用)。p1.7 sck(在系统编程用)
14、p2 口:p2 口是一个具有内部上拉电阻的8 位双向i/o 口,p2 输出缓冲器 能驱动。 p3 口:p3 口是一个具有内部上拉电阻的8 位双向i/o 口,p3 输出缓冲器能驱动4 个 ttl 逻辑电平。对p3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。 p3口亦作为at89s52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,p3口也接收一些控制信号。端口引脚 第二功能:p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 into(外中断0)p3.3 int1
15、(外中断1)p3.4 to(定时/计数器0)p3.5 t1(定时/计数器1)p3.6 wr(外部数据存储器写选通)p3.7 rd(外部数据存储器读选通)此外,p3口还接收一些用于flash闪存编程和程序校验的控制信号。rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将是单片机复位。ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ale仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。对flash存储器编程期间,该
16、引脚还用于输入编程脉冲(prog)。如有必要,可通过对特殊功能寄存器(sfr)区中的8eh单元的d0位置位,可禁止ale操作。该位置位后,只有一条movx和movc指令才能将ale激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale禁止位无效。psen:程序储存允许(psen)输出是外部程序存储器的读选通信号,当at89s52由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次psen信号。ea/vpp:外部访问允许,欲使cpu仅访问外部程序存储器(地址为0000h-ffffh),ea端必须保持低电平(接地)
17、。需注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端),cpu则执行内部程序存储器的指令。flash存储器编程时,该引脚加上+12v的编程允许电源vpp,当然这必须是该器件是使用12v编程电压vpp。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反相放大器的输出端。2.2 lcm16022.2.1工作原理lcd1602是指显示的内容为16x2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5x7或者5x11等点阵字
18、符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义cgram,显示效果也不好)。目前市面上字符液晶大多数是基于hd44780液晶芯片的,控制原理是完全相同的,因此基于hd44780写的控制程序可以很方便地应用4 个 ttl 逻辑电平。对p2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行movx dptr) 时,p2 口送出高八
19、位地址。在这种应用中,p2 口使用很强的内部上拉发送1。在使用 8位地址(如movx ri)访问外部数据存储器时,p2口输出p2锁存器的内容。 在flash编程和校验时,p2口也接收高8位地址字节和一些控制信号。p3 口:p3 口是一个具有内部上拉电阻的8 位双向i/o 口,p3 输出缓冲器能驱动4 个 ttl 逻辑电平。对p3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。 p3口亦作为at89s52特殊功能(第二功能)使用。 在flash编程和校验时,p3口也接收一些控制信号。2.2.2端口引脚第
20、二功能p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 into(外中断0)p3.3 int1(外中断1)p3.4 to(定时/计数器0)p3.5 t1(定时/计数器1)p3.6 wr(外部数据存储器写选通)p3.7 rd(外部数据存储器读选通)此外,p3口还接收一些用于flash闪存编程和程序校验的控制信号。rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将是单片机复位。ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ale仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对
21、外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(prog)。如有必要,可通过对特殊功能寄存器(sfr)区中的8eh单元的d0位置位,可禁止ale操作。该位置位后,只有一条movx和movc指令才能将ale激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale禁止位无效。psen:程序储存允许(psen)输出是外部程序存储器的读选通信号,当at89s52由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次psen信号。ea/
22、vpp:外部访问允许,欲使cpu仅访问外部程序存储器(地址为0000h-ffffh),ea端必须保持低电平(接地)。需注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端),cpu则执行内部程序存储器的指令。flash存储器编程时,该引脚加上+12v的编程允许电源vpp,当然这必须是该器件是使用12v编程电压vpp。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反相放大器的输出端。于市面上大部分的字符型液晶。2.2.3管脚功能图2-2:lcd1602引脚图 1602采用标准的16脚接口,其中:第1脚:vss为电源地第2脚:vcc
23、接5v电源正极第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:rw为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:e(或en)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:d0d7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。2.3 芯片ds1302ds1302 是dallas 公司推出的涓流充电时钟芯片内
24、含有一个实时时钟/日历和31 字节静态ram 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过am/pm 指示决定采用24 或12 小时格式。2.3.1工作原理ds1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 res 复位2 i/o 数据线3 sclk串行时钟时钟/ram 的读/写数据以一个字节或多达31 个字节的字符组方式通信ds1302 工作时功耗很低保持数据和时钟信息时功率小于1mw。 ds1302的管脚描述如表2-1所示。表2-1 ds1302管脚x1 x232.758khz晶振管
25、脚gnd地rst复位i/o数据输入/输出引脚sclk串行时钟vcc1 vcc2电源供电管脚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接通控制逻辑,允许地址/命令序列送入移位寄存器;其
26、次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.5v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。i/o为串行数据输入输出端(双向)。sclk为时钟输入端。 2.4 数字温度传感器ds18b202.4.1ds18b20工作原理 ds18b20的读写时序和测温原理与ds1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 ds18b20测温原理如
27、图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。2.4.2ds
28、18b20 引脚定义(1)dq为数字信号输入/输出端; (2)gnd为电源地; (3)vdd为外接供电电源输入端(在寄生电源接线方式时接地)。 图2-3ds18b20内部结构图第3章 硬件设计与实现电子时钟至少包括秒信号发生器、时间显示电路、按键电路、供电电路等四部分,另外,本设计要求该电子钟能够采集温度,所以还需要温度采集电路,硬件电路框图如图3-1。at89s52lcd1602显示器ds1302时钟温度传感器ds18b20键盘+5v电源图3-1 硬件电路框图该系统使用at89c52单片机为核心微控制器,通过读取时钟日历芯片ds1302和温度传感器ds18b20的数据,完成电子时钟的主要功能
29、时钟/日历和环境温度采集,使用比较直观的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引
30、脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 图3-2 单片机最小系统 3.2 时钟电路的设计本系统采用有ds1302串行时钟芯片作为主时钟电路,该电路使用单独的32.768m的晶振和单独的电源供电,减小主控的负担。电路图如图3-3所示。图3-3 时钟电路3.3 温度采集模块的设计采用数字式温度传感器ds18b20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用0.7与ds18b20的i/o口连接加一个上拉电阻,vcc接电源,vss接地。电路图如图3-4所示。 图3-4温度采集电路 3.4 lc
31、dm1602显示模块设计 图3-5 lcd显示电路第四章 系统软件设计与实现c51单片机可以应用汇编语言和c语言进行编程。汇编语言与机器语言指令一一对应,所以用汇编语言编写的程序在单片机里运行起来效率较高。c语言程序可读性高,更便于理解,本设计采用c语言编程11。4.1主程序设计第一次上电,系统先进行初始化,lcd显示初始时间“03:25:00”,并开始走时,初始日期为“2010-4-30”。单片机依次开始调用ds1302子程序,ds18b20子程序,键盘子程序返回开头循环运行3。主序流程图如图4-1。开始初始化显示子程序ds1302子程序ds18b20子程序延时程序图4-1主序流程图4.2实
32、时时钟日历子程序设计该程序主要实现对ds1302写保护、充电,对年、月、日、星期、时、分、秒等寄存的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用单片机内部软件模拟串行时钟脉冲,并由i/o口输出,所以在通信过程中最好保证传输的连续性,不要允许中断,其流程图如图4-2。ds1302每次上电后会自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果ds1302一直没有掉电则不会存在此问题。在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8个字节。开始初始化写入时钟初值开始计时读出数据返回图4-2 对
33、ds1302操作流程图4.3环境温度采集子程序设计ds18b20是1-wire单线器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议来对读写数据提出严格的时序要求,at89c51单片机并不支持单线传输。因此,必须采用软件的方法来模拟单线的协议时序6。主机操作单线器件ds18b20必须遵循下面的顺序。 1.初始化;2.发rom操作命令;3.内存操作命令;4.数据处理。开始初始化ds18b20发起skip rom命令发起convert命令延时1s等待温度转换完成初始化ds18b20应答脉冲否?发起read scrarcpad命令读低8位字节tl数据读高8位字节th数据发出报警信号是否超出
34、设置温度范围应答脉冲否? 实现环境温度采集转换并读取数据的程序流程图如图4-3。图4-3 对环境温度采集转换并读取数据的程序流程图4.4按键子程序设计单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。在随机扫描方式中,cpu完成某特定任务后,即执行键盘程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作,在执行键盘按键规定的功能中不理踩键盘输入。定时扫描方式与随机扫描方式基本相同,只是利用cpu内的定时中断,每隔一定时间扫描有无按键按下,键盘反应速度快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。前两种扫描方式均会占用cpu大量时间,不管有没
35、有键入操作,cpu总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。由于本设计中at89c51单片机在系统中的主要任务是接收ds1302和ds18b20的数据并送出显示,完成时钟/日历和日期/温度的控制,89c51单片机完全有能力完成以上工作,所以采用随机扫描方式,系统也能够正常运行。第五章 测试结果分析与结果5.1 测试结果分析(1)在测试中遇到ledlcd1602不显示分析:首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏。再接着研究程序的时序图是否正确。最后发现程序时序方面出了点小错。修改后就把问题解决了(2)测试中遇到调时间调到2057年后跳到2000年分析
36、:认真研究时钟芯片的datasheet发现,对年的读取,读出后是bcd码转换成十制显示时算法不正确(3)按键调整时,不是按单位递增和递减分析:在键盘程序中,按键一次,向芯片写入一个新的数字,在写入数字后必须有一定延时才再写入另一个数字 (4)烧写程序进单片机里面时,有时会在显示屏上显示烂码. 分析:用电压表检查.最后检测出usb下载线的端口电压不够换条新线就可以把问题解决5.2 测试总结经过多次的反复测试与分析,掌握了硬件的设计与分析的能力, 学会看英文版的datasheet,同时在软件的编程方面得到更到的提高,对编程能力得到加强。对所学的知识得到很大的提高与巩固。 最终实现功能:(1)能显示
37、阳历年、月、日、星期、小时、分、秒(2)显示模块采用lcd液晶显示,要求能用按键调整时间。 (3)能显示阴历月、日,在显示阴历时间时能标明是否为闰年。 (4)具有定时报警功能,能够进行整点和半点语音报时。(5)能够准确在lcd上显示室。(6)在显示农历时通过算法能够把天干地去也显示出来。结束语通过对基于单片机的万年历的研究和设计,完成了一种能够显示阳历、阴历、星期、时间、实时温度、天干地支的多功能万年历,该万年历还可以定时报警和进行进行整点和半点报时。本系统设计从开始到完成包括文档的编写总共花了一个月左右的时间,设计的难点在于星期和年月日的计算方法,还有单片机和各个芯片之间的通信协议,液晶的读
38、写时序,按键的防抖。本系统基本完成了设计指标的所有要求,所有的程序分块编写,通过main函数来调用,增加了程序的易修改性和易读性,方便他人的使用和改进。但是由于时间的局限性以及本人能力的有限性,本系统还有许多需要改进和完善的地方。其中主要的问题就是功耗和电源供电的问题,该处采用5v供电,最好采用3v供电。整个电路的功耗太大,没让单片机工作在空闲模式,这都是作品不实用,不能够大批量生产,这都有待改进,希望以后有机会对该系统做进一步的完善。致谢在本次设计中,我想首先感谢蒋老师,从设计的开始到完成,给了我很多指导性的意见,不断帮助我完善系统设计。从大一开始,蒋老师作为我的导师,一直很注重我们动手能力
39、的培养。他丰富的教学及实际操作经验、严谨的治学态度,以及和蔼的态度,使得我投入了大量时间在创新基地的实验室中,做了许多实验。而这,对我的帮助和影响是非常巨大的。正是因为有了这些锻炼的机会,我才能非常顺利地完成我的毕业设计。最后非常感谢无锡科技职业学院应用电子系的老师和同学,是他们让我学会了如何学习,更学会了如何做人,这将是我终身受益的宝贵财富。参考文献1 周兴华编著 手把手教你学单片机c程序设计北京:北京航空航天大学出版社,20072 侯玉宝编著. 基于proteus的51系列单片机设计与仿真 北京:电子工业出版社,20083 张义和编著. 例说51单片机(c语言). 北京:人民邮电出版社.
40、20084 李朝青编著. 单片机原理及接口技术. 北京:北京航空航天大学出版社,20055 周慈航编著. 单片机应用程序设计基础. 北京:北京航空航天大学出版社,19916 马忠梅编著. 单片机的c语言应用程序设计. 北京:北京航空航天大学出版社,20037 李广弟编著. 单片机基础. 北京:北京航空航天大学出版社,19948 曾巧媛编著. 单片机原理及应用. 北京:电子工业出版社,19979 邱丽芳编著. 单片机原理与应用. 人民邮电出版社,200710 何立民编著. mcs-51系列单片机应用系统设计. 北京航空航天大学出版社,2003附录一:原理图附录二:源程序程序如下#include
41、#define uint unsigned int#define uchar unsigned charuchar table=0123456789:-;uchar t,num=0;uint temp,we; /定义整型的温度数据float f_temp; /定义浮点型的温度数据uint shi,fen,miao,nian,yue,ri;uint shi1,fen1,miao1,nian1,yue1,ri1,we1;sbit rs=p26;sbit en=p27;sbit ds=p20;sbit scl=p12;sbit io=p11;sbit rst=p10; sbit key1=p30;s
42、bit key2=p31;sbit key3=p32;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);#include#include#include#includevoid main()init_1602();init_1302();/reset_1302();while(1)tempchange();display();keyscan();1602.void write_date(uchar date)en=0;rs=1;p0=date;en=0;delay(5);en=1;void write_com(uchar dat
43、e)en=0;rs=0;p0=date;en=0;delay(5);en=1;void init_1602()write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);void display()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_co
44、m(0x80+1);write_com(0x0c);write_date(table2);write_date(table0);write_date(tablenian/16);write_date(tablenian%16);write_date(table11);write_date(tableyue/16);write_date(tableyue%16);write_date(table11);write_date(tableri/16);write_date(tableri%16);write_com(0x80+13);switch(we) case 1:write_date(m);d
45、elay(5); write_date(o);delay(5); write_date(n); break; case 2:write_date(t);delay(5); write_date(u);delay(5); write_date(e); break; case 3:write_date(w);delay(5); write_date(e);delay(5); write_date(d); break; case 4:write_date(t);delay(5); write_date(h);delay(5); write_date(u); break; case 5:write_d
46、ate(f);delay(5); write_date(r);delay(5); write_date(t); break; case 6:write_date(s);delay(5); write_date(a);delay(5); write_date(t); break; case 7:write_date(s);delay(5); write_date(u);delay(5); write_date(n); break; write_com(0x80+0x40+1);write_date(tableshi/16);write_date(tableshi%16);write_date(t
47、able10);write_date(tablefen/16);write_date(tablefen%16);write_date(table10);write_date(tablemiao/16);write_date(tablemiao%16);write_com(0x80+0x40+10);write_date(tableget_temp()/100);write_date(tableget_temp()%100/10);write_date(0x2e);write_date(tableget_temp()%10);write_date(0xdf);write_date(c);key.
48、cvoid keyscan()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
49、)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) case 1: w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《认识大熊猫》课件:2024年保护大熊猫的新策略
- 《构建我国生态》课件
- 个性化教学:《孔乙己》课件的定制化发展
- 2024年教育改革:《杠杆》课件
- 跨学科融合:《独特的装扮》课件创新应用
- 压力焊考试题库及答案
- 药理学期末试卷
- 2024年英美概况教案:如何提升教学效果
- 基于2024年教育标准的三角形教学法
- 成果鉴定-成果登记-申报奖项流程说明
- xx学校未成年人性教育工作方案
- 2024-2030年组氨酸行业市场现状供需分析及投资评估规划分析研究报告
- 教育信息化教学资源建设规划
- 屠宰场食品安全管理制度
- 部编版(2024秋)语文一年级上册 6 .影子课件
- 2024秋期国家开放大学专科《刑事诉讼法学》一平台在线形考(形考任务一至五)试题及答案
- 病例讨论英文
- 2024秋期国家开放大学专科《液压与气压传动》一平台在线形考(形考任务+实验报告)试题及答案
- 【课件】植物体的结构层次课件-2024-2025学年人教版生物七年级上册
- 24秋国家开放大学《0-3岁婴幼儿的保育与教育》期末大作业参考答案
- 相对湿度计算公式
评论
0/150
提交评论