基于单片机的电子万年历设计.docx
《基于单片机的电子万年历设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子万年历设计.docx(43页珍藏版)》请在冰豆网上搜索。
基于单片机的电子万年历设计
基于单片机的电子万年历设计
摘要:
本文借助电路仿真软件Protues对基于AT89S52单片机的电子万年历的设计方法及仿真进行了全面的阐述。
该电子万年历在硬件方面主要采用AT89S52单片机作为主控核心,由DS1302时钟芯片提供时钟、12864LCD液晶显示屏显示。
在软件方面,主要包括日历程序、时间调整程序,显示程序等。
所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中进行电路设计并仿真。
论文主要研究了液晶显示器LCD及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。
研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。
关键词:
单片机;DS1302;DS18B20;LCD12864
TheDesignOfElectronicCalenderBasedOnMCU
Abstract:
ThispapermainlydiscussthedesignofelectroniccalenderbasedonAT89S52withthehelpofProtues.Onthehardwareside,theelectroniccalendarusingAT89S52microcontrollerasthemaincontrolcenter,clockprovidedbytheDS1302clockchip,12864LCDdotmatrixLCDdisplay.Intermsofsoftware,includingcalendarprogram,timetoadjustprocedures,displayprocedures.Allprogrammingiscomplete,theKeilsoftwaredebugging,makesurethereisnoproblem,intheProteussoftwareembeddedwithinthesimulatedMCU.
ThisarticlefocusonliquidcrystalscreenLCD12864andclockchipDS1302,temperaturesensorDS18B20whichconnectedandcommunicatedwithMicrocontroller.Severalsolutionswillalsocomparedwitheachother.Onsoftwareside,calendercalculationwillbediscussedaswell.
Theresultsareasfollows:
aselectroniccalenderarewidelyusedinourdailylife.Itshouldbechipandconvenientsoastowinmoreprofit.
Keywords:
Microcontroller,DS1302;DS18B20;LCD12864
1引言
1.1课题的背景、目的和意义
随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。
二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。
第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。
第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。
第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!
因此,电子时钟的出现带来了钟表计时业界跨跃性的进步。
我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。
商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。
由于在日常生活当中,人们喜欢按时间办事或一定要按时间办事,上班下班、上课下课、开会、乘车、轮船启航、飞机起飞等等,所以我们经常可以在一个家庭、学校、工厂、公司等等集体或单位看到时钟或者纸挂年历。
但是时钟只能显示具体某一时、分、秒信息,不能显示年、月、日、星期和农历信息;纸挂年历只能查看年、月、日、星期、和农历信息,而不能看具体时、分、秒信息。
且假如我们不知道现在具体是什么时间,单凭纸挂年历或时钟不能帮上我们的忙,然而,电子万年历这时就起了非常大的作用,因为电子万年历不仅能显示时、分、秒信息,也能显示、年、月、日、星期和农历信息,是集时钟和纸挂年历功能一体的产品,且人们查看起来极其方便,一目了然。
所以,如果我们开发出一款实用电子万年历产品,其经济前景将非常可观。
1.2课题设计的主要内容
本文介绍了基于AT89S52单片机设计的电子时钟设计。
主要了解AT89S52单片机的硬件结构和本毕业设计所要外扩的12864LCD液晶显示及其驱动方法,以及对时钟芯片和温度传感器的控制,并在此基础上实现了DS1302时钟基本电路和DS18B20温度的采集基本电路的设计,以及键盘电路和蜂鸣器电路的设计;然后使用单片机C语言进行主程序和时钟程序的设计,以及相关外围器件的程序驱动设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。
本设计为软件,硬件相结合的一组设计。
除了对MCU及其驱动电路,相关芯片的实际电路的焊接外,还要进行软件的编译和对硬件电路的测试和调试,最终实现时间,温度,问候语,节日提醒等相关显示,及定时闹钟,掉电保护等功能。
2课题设计方案
2.1系统的总体方案
经过查阅资料,拟定系统总体方案如图1所示。
整体系统包括温度采集模块、键盘模块、AT89S52主控制模块、DS1302时钟模块、蜂鸣器发声模块和12864LCD显示模块。
其主要功能是采用单片机控制检测模块的温度采集和时钟信息、键盘输入信息,将温度信号和时钟信号传输给接受端单片机控制系统。
接受端单片机系统在接收端接受信号,并在LCD液晶上显示出来并在相应的时间,问候语,节日提醒,并定时闹钟发声。
图1.系统的总体框图
2.2温度传感器的选择
2.2.1温度传感器的介绍
温度传感器就是讲检测道德温度转换成电压的有效途径。
当实际测量热源时,首先需要用温度传感器进行温度的采集。
通用的温度传感器有热电偶,热敏电阻,RTD(ResistanceTemperatureDetector)和集成电路传感器等,各种传感器分别有其不同的特点。
热电偶:
自己供电、简单坚固、价格低、采用各种物理形式、温度范围广。
但是也有很多缺点:
非线性、电压低、要求参考温度、稳定性差、敏感性差。
RTD:
优点是稳定、准确度高、线性度也高于热电偶。
缺点是价格高、速度低、要求电流电源、电阻变化小、三线测量。
热敏电阻器:
优点是输出高、速度快、两线欧姆测量。
缺点是非线性、温度范围有限、易碎、要求电流电源等。
数字温度传感器:
由单片集成的数字温度传感器由于其外部电路结构简单,使用方便,开发成本低,开发周期端而得到广泛的应用。
以前的温度传感器大部分输出的是模拟信号,不能直接送人单片机等微处理器进行测量,而且要做多点测量十分麻烦,所以在多点测温的系统中得不到广泛的应用。
意法半导体公司(ST)开发的LM75数字温度传感器是二线串行可编程温度传感器,用户编程设置监控值、滞后值。
LM75通信时,通过与行业标准协议兼容的2线总线完成的,它允许读入当前温度,对设定值滞后编程,并配置器件。
美国Dallas公司开发的DS18B20单线数字温度传感器具有与一般模拟温度传感器相当的测量范围和精度,输出直接表示温度值的12位(二进制)数字。
由于DS18B20具有全球唯一的序列号,故一根总线可以挂任意多个DS18B20。
DS18B20有总线供电和外部电源供电两种供电方式,可以非常方便地构成单线多点温度测量系统。
所以本系统选择DS10B20数字温度传感器。
2.2.2DS18B20简介
DS18B20由美国Dallas公司开发的单总线数字温度传感器,外部电路连接非常的简单,开发非常方便。
外部引脚图及引脚详细说明如图2和表1所示【7】。
图2DS18B20引脚图及引脚详细说明
表1.DS18B20的引脚详细说明
引脚号
功能
GND
地线
DQ
数据输入/输出。
对于单线操作:
漏极开路
VDD
可选的VDD引脚
2.2.3DS18B20的工作原理
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周期可分为两个部分,即温度检测和数据处理。
在了解其工作流程之前我们有必要了解18B20的内部存储器资源。
18B20共有三种形态的存储器资源,它们分别是:
ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。
数据在出产时设置不由用户更改。
DS18B20共64位ROM。
RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。
第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。
在上电复位时其值将被刷新。
第5个字节则是用户第3个EEPROM的镜像。
第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。
第9个字节为前8个字节的CRC码。
EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。
DS18B20上电后并不立即工作,而是出于空闲状态,主机只有发送一个转换指令(44H)后才能使它进入温度测量和A/D转换状态,转换完成后就会有两个字节的温度测量值存入中间结果暂存器,同时DS18B20又重新返回到休闲状态【2】。
DS18B20输出的温度值为摄氏温度,以一个16位有符号补码数的格式存入两个寄存器中,。
表2是某些典型温度值的二进制和十六进制数对照表图。
表2.常用温度的二进制、十六进制对照表图
温度℃
数据输出(二进制)
数据输出(十六进制)
+125℃
0000011111010000
07DOh
+85℃
0000010101010000
0550h
+25.0625℃
0000000110010000
0191h
+10.125℃
0000000010100010
00A2h
+0.5℃
0000000000001000
008h
0℃
0000000000000000
0000h
—0.5℃
1111111111111000
FFF8h
—10.125℃
1111111101011110
FF5Eh
—25.0625℃
1111111001101111
FF6Eh
—55℃
1111110010010000
FC90h
2.3微控制器的选择
对于为控制器方面,本设计主要采用单片机作为主控芯片。
MCS系列单片机又多种型号的产品,如普通型(51子系列)8031,8051,89C51,89S51等,增强型(52子系列)8032,8052,89C52,89S52等。
由于所学课程的原因以及对MCU的了解,以及为了使编程下载更加方便以及对设备的要求尽量低,应该选择支持在线编程下载的单片机。
而AT89S52增强型单片机,包括了其系列单片机的所有基本功能,而且比其更强大,而且还考虑到程序下载器及单片机的价格等方面的因素,在单芯片上,拥有灵巧的8位CPU和在线可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供灵活、有效的解决方案。
因此本系统选用的AT89S52单片机。
2.3.1AT89S52的简介
依据论文要求,单片机选择ATMEL公司AT89S52单片机。
AT89S52与传统的51单片机相比ATMEL公司的AT89系列的单片机性能更加强大。
AT89S52单片机是ATMEL公司生产的8位高性能单片机,它具有比MCS-51系列更强大的功能,同时它也能完全兼容MCS-51系列的单片机的引脚和指令系统。
AT89S52是一种低功耗、高性能CMOS8位高性能单片机,它具有8K在线系统可编程Flash存储器。
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在线课编程,亦适于常规编程器。
2.3.2AT89S52的引脚及性能
●与MCS-51单片机产品兼容
●8K字节在线系统可编程Flash存储器
●1000次擦写周期
●4.0V-5.5V工作电压
●全静态操作:
0Hz~33Hz
●三级加密程序存储器
●256*8字节的内部数据存储器
●32个可编程I/O口线
●三个16位定时器/计数器
●八个中断源
●全双工UART串行通道
●低功耗空闲和掉电模式
●掉电后中断可唤醒
●看门狗定时器
●双数据指针
●掉电标识符
●快速编程周期
●灵活ISP编程(字节和模式)图3.AT89S52引脚结构图
其40个引脚封装如上图3所示:
2.4显示方式的选择
可采用的显示方式大致可分为如下几种:
LED点阵显示,LED数码管,LCD液晶显示,TFT彩屏显示,对本设计而言其各自有优缺点:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成对于显示文字比较适合,如采用在显示数字显得太浪费,在实际电路焊接方面由于管脚过多也会增加许多麻烦,且价格也相对较高,所以也不用此种作为显示。
采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,而且不能显示文字,不能满足本设计的要求,所以不采用LED数码管作为显示。
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于电子万年历而言,一个液晶屏即可,价格也还能接受,需要的接口线较多,但会给调试带来诸多方便。
同样,使用较多的有1602和12864两款液晶,由于本设计要在一个界面显示时间,日期,温度,问候语,节日提醒诸多信息,考虑到1602屏的大小不能满足,所以此设计中采用LCD12864液晶显示屏作为显示模块。
2.4.112864液晶的简介
12864C-1是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
所以这也是本设计采用此款LCD作为显示的原因。
基本特性:
● 低电源电压(VDD:
+3.0--+5.5V)
● 显示分辨率:
128×64点
● 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
● 内置128个16×8点阵字符
● 2MHZ时钟频率
● 显示方式:
STN、半透、正显
● 驱动方式:
1/32DUTY,1/5BIAS
● 视角方向:
6点
● 背光方式:
侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
● 通讯方式:
串行、并口可选
● 内置DC-DC转换电路,无需外加负压
● 无需片选信号,简化软件设计
● 工作温度:
0℃-+55℃,存储温度:
-20℃-+60℃
2.4.212864液晶的结构及原理
下图为ST7920型12864液晶的内部结构及引脚图;
图4.ST7920型12864LCD内部结构及引脚图
此款12864LCD有20个管脚,有一组8位的三态数据口,有8位或4位的并,串口通信方式。
有独立的背光电源及独立的背光调节功能。
其模块硬件接口说明如下表3所示;
表3.ST792012864LCD接口信号的说明
管脚号
管脚名称
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID)
H/L
R/W=“H”,E=“H”,数据被读到DB7——DB0
R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR
6
E(SCLK)
H/L
使能信号
7
DB0
H/L
三态数据线
8
DB1
H/L
三态数据线
9
DB2
H/L
三态数据线
10
DB3
H/L
三态数据线
11
DB4
H/L
三态数据线
12
DB5
H/L
三态数据线
13
DB6
H/L
三态数据线
14
DB7
H/L
三态数据线
15
PSB
H/L
H:
8位或4位并口方式,L:
串口方式(见注释1)
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效(见注释2)
18
VOUT
-
LCD驱动电压输出端
19
A
VDD
背光源正端(+5V)(见注释3)
20
K
VSS
背光源负端(见注释3)
控制器接口信号说明:
1、RS,R/W的配合选择决定控制界面的4种模式:
(如表4所示)
表4.控制器接口信号说明
RS
R/W
功能说明
L
L
MPU写指令到指令暂存器(IR)
L
H
读出忙标志(BF)及地址记数器(AC)的状态
H
L
MPU写入数据到数据暂存器(DR)
H
H
MPU从数据暂存器(DR)中读出数据
2、E信号
E状态
执行动作
结果
高——>低
I/O缓冲——>DR
配合/W进行写数据或指令
高
DR——>I/O缓冲
配合R进行读数据或指令
低/低——>高
无动作
指令说明:
模块控制芯片提供控制命令,基本指令和如下:
(RE=0:
基本指令)如表5所示;
表5.模块控制芯片的控制指令
指
指令码
功能
令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清除
显示
0
0
0
0
0
0
0
0
0
1
将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"
地址
归位
0
0
0
0
0
0
0
0
1
X
设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM的内容
显示状态开/关
0
0
0
0
0
0
1
D
C
B
D=1:
整体显示ON
C=1:
游标ON
B=1:
游标位置反白允许
进入点
设定
0
0
0
0
0
0
0
1
I/D
S
指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位
游标或显示移位控制
0
0
0
0
0
1
S/C
R/L
X
X
设定游标的移动与显示的移位控制位;这个指令不改变DDRAM的内容
功能
设定
0
0
0
0
1
DL
X
RE
X
X
DL=0/1:
4/8位数据
RE=1:
扩充指令操作
RE=0:
基本指令操作
设定CGRAM
地址
0
0
0
1
AC5
AC4
AC3
AC2
AC1
AC0
设定CGRAM地址
设定DDRAM
地址
0
0
1
0
AC5
AC4
AC3
AC2
AC1
AC0
设定DDRAM地址(显示位址)
第一行:
80H-87H
第二行:
90H-97H
读取忙标志和地址
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值
写数据到RAM
1
0
数据
将数据D7——D0写入到内部的RAM(DDRAM/CGRAM/IRAM/GRAM)
读出RAM的值
1
1
数据
从内部RAM读取数据D7——D0
(DDRAM/CGRAM/IRAM/GRAM)
2.5时钟芯片的选择
对于本设计,可考虑的时钟提供方案有如下2种:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
采用专门的时钟芯片如DS12C887、DS1307、PCF8485、DS1302时钟芯片实现时钟。
DS130是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,且价格较为便宜,操作方便。
DS1307和PCF8485是比较专业的,对精度要求较高的芯片,在价格和实用性方面不如DS1302,所以不考虑用这两款芯片。
DS12C887则是美信公司生产的专用的时钟芯片,在价格方面比DS1302要高出很多,而且用于本设计太过浪费,故不采用。
所以本设计用DS1302作为时钟芯片。
2.5.1DS1302的介绍
本文介绍的实时时钟电路DS1302是DALLA