基于51单片机的电子万年历的设计与实现毕业论文.docx
《基于51单片机的电子万年历的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子万年历的设计与实现毕业论文.docx(61页珍藏版)》请在冰豆网上搜索。
![基于51单片机的电子万年历的设计与实现毕业论文.docx](https://file1.bdocx.com/fileroot1/2023-2/22/f7c3d5dc-ab9d-47f1-b927-2e85b39e3877/f7c3d5dc-ab9d-47f1-b927-2e85b39e38771.gif)
基于51单片机的电子万年历的设计与实现毕业论文
基于51单片机的电子万年历的设计与实现毕业论文
前言·······································································································1
第一章概述························································································2
第二章基于单片机电子时钟的硬件电路设计·································4
第一节MCU选择及AT89C51简介·························································4
第二节时钟电路的设计····································································8
一、DS1302简要说明·······································································8
二、DS1302引脚说明·······································································8
三、DS1302控制字和读写时序说明··················································9
四、DS1302片内寄存器说明···························································11
五、时钟电路的原理······································································12
第三节环境温度采集电路的设计·····················································13
一、温度传感器的选择··································································13
二、DS18B20简介···········································································13
三、DS18B20控制字和读写时序说明···············································15
四、温度采集电路与单片机的连接·················································17
第四节显示电路的设计····································································18
一、显示器LCD1602的特点与简介··················································18
二、显示电路的与单片机的连接·····················································19
第五节按键电路的设计····································································21
第六节复位电路的设计····································································22
第三章基于单片机电子时钟软件设计············································23
第一节主程序设计···········································································23
第二节实时时钟子程序设计···························································23
第三节环境温度采集子程序设计·······················································24
第四节按键子程序设计····································································26
第四章系统调试················································································27
第一节单片机基础电路的调试··························································27
第二节显示电路的调试····································································27
第三节DS1302电路的调试·································································27
第四节环境温度采集的调试·····························································27
第五节按键电路的调试····································································27
第六节软件的调试···········································································29
结论·····································································································30
参考文献·····························································································31
致谢·····································································································32
附录1总设计原理图··········································································33
附录2带温度显示的电子时钟仿真图··············································34
附录3HD44780字符集·······································································35
附录4升序按键程序··········································································36
前言
时间是人类生活必不可少的元素,对人们来说时间是那么的宝贵,如果没有时间的观念,人们的生活就会紊乱,社会秩序也将不会有井有条。
从古代的水漏到后来的机械钟再到当今的石英钟,都充分体现了时间的重要,同时也代表着科技的发展进步,所以对于我们研究电子时钟和充分发挥时钟的作用将有着重要的意义。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命。
随着数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字的精度,远远超过老式钟表,且钟表的数字化给人们的生产生活带来了极大的方便,成为人们生活中不可少的必需品。
工农业生产上也有很多的场合要测量环境温度啊、湿度啊。
如果扩大时钟原有的功能,比如增加环境温度显示的功能等等,将使电子钟的应用更加广泛。
本设计主要为实现一款可正常显示时钟和实时测量的环境温度的多功能电子时钟,并且可以依靠按键随时对日期进行调整,以确保显示的正确性、实时性。
该设计采用AT89C52作为核心处理芯片分别对时钟芯片DS1302、温度传感器DS18B20进行读写控制,并将读到的数据送给LCD1602显示出来。
第一章概述
从电子时钟的发明到现在已经将近半个世纪了,从最初的德克萨斯仪器推出的4位单片机电子时钟到当今的32位,从当时价钱昂贵且体积大到现在的精致小型,从以前的单一的时间显示到现代的可以显示温度、湿度等更多功能的电子时钟,都积累了众多科学家的努力和心血。
温度关系着我们日常生活,关系着我们的身体健康,其结构简单、易行、实用。
所以设计这样的一个电子时钟是很有意义的。
本文基于课题并对当前电子时钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟的总体方案。
本文设计应用AT89C52芯片作为核心,LCD1602显示,使用时钟芯片DS1302完成时钟日期的功能,同时利用温度传感器DS18B20测量周围环境温度,并且可以依靠按键随时对日期、时间进行调整。
本课题通过AT89C522单片机来设计电子时钟,采用C语言进行编程,可以实现以下一些功能:
小时、分、秒、年、月、日、星期的显示和实时温度检测。
本次设计的电子时钟系统由时钟电路,LCD显示电路,按键调整电路四部分组成。
51单片机通过软件编程,在LCD1602液晶屏上实现小时、分、秒、年、月、日、星期的显示;利用时钟芯片DS1302来实现计时;通过三个按键开关,一个用于时钟调节模式的选择(模式包括调秒、分、时、年、月、日、星期),按1次下模式键(K2)调用调年程序,同时显示程序也响应相应的动作,秒数字开始闪烁,进入调秒模式,再按一次进入调月模式,依次类推分别进入调日、星期,时、分、秒的模式。
另外两个用于时钟的调节,其中K3为加键,K4为减键,在按下模式键后,相应的数字会闪烁,这时我们按下加键或减键,对应的数字就会相应的加一或减一,使我们的多功能电子时钟更方便,更人性化。
温度部分的设计我们采用DALLAS公司生产的1—wire式数字温度传感器DS18B20,所谓1—wire就是单线的意思,也就是该传感器与CPU进行数据传输的时候只需要一条数据线就可以了,甚至他的电源都可以由数据线提供,DS18B20也具备这项功能,他可以从数据线上给自己供电,这样他的外接电路,就非常的简单明了,也节省了不少CPU的硬件资源。
本设计就是采用这样的方案,DS18B20的电源是通过一个上拉电阻为自己获取电源的。
当然这样的设计简化了我们的硬件外部连线,节省了硬件资源,但是这样的设计也给我们的软件设计(编程)提出了严格的要求,特别是时序的要求,我们用单片机发脉冲来模拟串行通信,每个时钟的间隙和读写的辨别都给我们的编程带来更多的困难。
所以我们要严格按照时序,准确的进行读写操作。
显示部分我们的用的是LCD1602。
为什么要选LCD1602呢?
最初我想的是用数码管显示的,数码管的高亮度和编程控制容易的特点使我更受青睐,但是我想要是同时显示年、月、日、时、分、秒,当然还有温度,这算起来就有就有17位的位选端,再加上8段的8个端口的话,就要25位的I/O口,还要有键盘,这显然让我们的CPU无法恭维,如果是分时显示,也不能说是个不错的想法,但是这样的设计就不太人性化了,当然我们还可以考虑扩展I/O口,但是这又加大了编程的难度,相比起来,LCD1602就显的绰绰有余了。
他可以同时显示32个字符,用来显示我们的时钟,还有温度就显得更加清晰、自然。
所以最终选择LCD1602作为显示器件。
第二章基于单片机的电子时钟硬件设计
电子时钟至少包括秒信号发生器、时间显示电路、按键电路、供电电路等四部分,另外,本设计要求该电子钟能够采集温度,所以还需要温度采集电路,硬件电路框图如图2-1。
图2-1硬件电路框图
该系统使用AT89C52单片机为核心微控制器,通过读取时钟日历芯片DS1302和温度传感器DS18B20的数据,完成电子时钟的主要功能——时钟/日历和环境温度采集,使用比直观的LCD1602显示,同时显示年月日,星期,时分秒以及环境温度值。
键盘是为了完成时钟/日历的校准。
整个电路使用了+5V电源供电。
第一节MCU的选择与AT89S52简介
目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列的单片机,该系列单片机均采用标准MCS-51内核,硬件资源相互兼容,品类齐全、性能稳定、体积小、价格底、货源充足、调试和编程方便,所以应用较为广泛。
例如AT89S52单片机是一款低功耗、低电压、高性能CMOS8位单片机,片内含8KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器(EPROM),器件采用CMOS工艺和ATMEL公司的高密度,非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容,片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储编程器来编程。
因此,AT89S52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域[1]。
AT89S52具有以下主要性能:
1.8KB可改编程序FLASH存储器;
2.全表态工作:
0~24HZ;
3.256X8字节内部RAM;
4.32个外部双向输入,输出(I、O)口;
引脚说明如图2-2。
图2-2AT89S52引脚说明
引脚功能说明如下[2]:
VCC:
电源电压。
GND:
地。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据线复用口。
作为输出口时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端。
在访问外部数据储存器或程序储存器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
FLASH编程和程序校验期间,P1接收低8位地址。
P2口:
P2是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序储存器或16位地址的外部数据储存器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据储存器(例如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。
FLASH编程或校验时,P2亦接收高位地址和其他控制信号。
P3口:
P3是一个带内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。
作为输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P3除了作为一般的I/O口线外,更重要的用途是它的第二功能,具体功能说明如表2-1。
P3口还接收一些用于FLASH闪速存储器编程和程序校的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
表2-1P3口的第二功能表
端口引脚
第二功能
P3.0
RXD(穿行输出口)
P3.1
TXD(穿行输入口)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器0)
P3.6
WR(外部数据写选通)
P3.7
RD(外部数据读选通)
即使不访问外部存储器,ALE仍以是时钟振荡频率的1/6输出固定的正脉冲信号,因此他可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT80C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序储存器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(Vcc端),CPU则执行内部程序储存器中的指令。
FLASH储存器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12v编程电压。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
第二节时钟电路的设计
实现电子时钟的功能方案有很多种,常用的有用芯片555实现,直接编程实现,也就是通过编程由单片机内部产生时钟的数据。
本设计要求时钟电路能够显示日历和时间,对一般的芯片的实现方法,这难免会给编程带来极大的麻烦,而DS1302就可以自己依靠单独的晶振电路,产生这些数据,并存储到内部的存储器中,而我们要做的工作就是,不断的读出这些数据,并转换成显示器可识别的有效的数据,送到显示器上显示。
这样一款强大的时钟芯片,不但占用的硬件资源少,而且其精确性、实时性也是相当的可观。
所以本设计选用DS1302来实现时钟电路。
一、DS1302简要说明
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
DS1302的外接晶振采用普通32.768kHz晶振。
二、DS1302引脚说明
DS1302封装和引脚参照图2-3。
图2-3DS1302封装和引脚
DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc2>2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK为时钟输入端。
具体的引脚说明如表2-2。
表2-2DS1302引脚功能说明
引脚号
名称
功能
1
VCC1
备份电源输入
2
X1
32.768KHZ输入
3
X2
32.768KHZ输出
4
GND
地
5
RST
控制移位寄存器/复位
6
I/O
数据输入/输出
7
SCLK
串行时钟
8
VCC2
主电源输入
三、DS1302控制字和读写时序说明
在编程过程中要注意DS1302的读写时序,DS1302是SPI总线驱动方式,它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
要想与DS1302通信,首先要先了解DS1302的控制字。
DS1302的控制字如表2-3。
控制字的作用是设定DS1302的工作方式,传送字节数等。
每次数据的传输都是由控制字开始[9]。
1.第7位:
控制字的最高有效位,如果它为0,则不能把数据写入到DS1302中。
2.第6位:
如果为0,则表示存取日历时钟数据,为1表示存取RAM数据。
表2-3DS1302的控制字节
1
RAM
CK
A4
A3
A2
A1
A0
RD
WR
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
3.第5位:
(A4~A0)用A4~A0表示,定义片内寄存器和RAM的地址。
定义如下:
当第6位为0时,定义时钟和其他寄存器的地址。
A4~A0=0~6,顺序为秒、分、时、日、月、星期、年的寄存器。
当A4~A0=7,为芯片写保护寄存器地址。
当A4~A0=8,为慢速充电参数选择寄存器。
当A4~A0=31,为时钟字节方式选择寄存器。
当第6位为1时,定义RAM的地址,A4~A0=0~30,对应各子地址的RAM,地址31对应的是RAM多字节方式选择寄存器。
4.第0位(最低有效位):
如果为0,表示进行写操作,为1表示进行读操作。
控制字总是从最低位开始输出。
在控制字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302.数据输入从最低位(0位)开始。
同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。
每次仅写入一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作称为多字节操作方式。
当以多字节方式写时钟寄存器时,必须按数据传送的顺序依次写入8个寄存器。
但是,当以多字节方式写RAM时,不必写所有31字节,不管是否写了全部31字节,所写的第一个字节都将传送到RAM。
为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动到逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入,无论是读同期还是写周期,也无论传送方式是单字节还是多字节,都要通过控制字指定40字节的哪个将被访问,在开始8个时钟同