基于51单片机的电子万年历的设计.docx
- 文档编号:4991981
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:21
- 大小:254.31KB
基于51单片机的电子万年历的设计.docx
《基于51单片机的电子万年历的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子万年历的设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于51单片机的电子万年历的设计
目录
摘要I
AbstractII
1引言1
2功能要求1
3方案论证与设计1
3.1控制部分的方案选择1
3.2测温部分的方案选择1
3.3显示部分的方案选择2
4系统硬件电路设计2
4.1主控器AT89C522
4.2时钟电路DS13023
4.2.1.DS1302的性能特性3
4.2.2DS1302数据操作原理3
4.3测温电路的设计5
4.3.1温度传感器工作原理5
4.3.2DS18B20与单片机的接口电路8
4.4显示电路的设计9
4.5键盘接口的设计10
5系统程序的设计10
5.1阳历程序设计10
5.2时间调整程序设计11
5.3温度程序设计12
5.3.1主程序12
5.3.2读出温度子程序12
5.3.3温度转换命令子程序12
5.3.4计算温度子程序13
5.3.5显示数据刷新子程序13
6调试及性能分析13
6.1调试步骤14
6.2性能分析14
7总结14
参考文献14
致谢14
基于51单片机的电子万年历的设计
摘要
电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。
硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。
主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、温度检测采用DS18B20温度传感器、键盘接口电路用普通按键接上拉电阻完成;软件利用C语言编程实现单片机程序控制。
单片机通过时钟芯片DS1302获取时间数据,DS18B20采集温度信号送该给单片机处理,单片机再把时间数据和温度数据送给74LS154译码,然后通过三极管C9015放大驱动LED数码管显示阳历年、月、日、时、秒、闹钟、星期、温度。
关键词电子万年历;单片机;温度传感器;时钟;数码显示
Abstract
Electronicperpetualcalendarwhichisanapplicationofthesingle-chipprocessorsystem,isutilizedbycombininghardwareandsoftware.AndHardwareiscomposedoffivemodules:
Maincontrolunit,clockcircuit,temperaturetestcircuit,displaycircuit,keyboardinterface.MaincontrolboardadoptsAT89S52,clockcircuitadoptstheDS1302clockchip,displaymoduleadoptstheLEDdigitaltube,andtemperaturetestadoptstheDS18B20temperaturesensor,keyboardinterfacecircuitiscompletedbyconnectingordinarybuttonwithpull-upresistor.SoftwaretakesadvantageofCtoprogram,soastorealizetheprogrammedcontrolofsingle-chipprocessor.Single-chipprocessorgetsthetimedatathroughusingtheDS1302clockchip.TheDS18B20gatherstemperaturesignalsandtransmitsthemtosingle-chipprocessor.Then,single-chipprocessortransmitsthetimedataandthetemperaturedatatothe74LS154decoder.Lastly,theLEDdisplayssolarcalendaryear,year,month,day,hour,minute,second,alarmclock,weekandtemperaturewithbeingenlargedanddrivenbytheC9015triode.
Keywords:
Electronicperpetualcalendar;single-chipprocessor;temperaturesensor;clock;digitaldisplay
1引言
随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,单片微型计算机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。
电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用。
LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。
功能也越来越齐全,除了公历年月日、时分秒、星期显示及闹铃。
但通过我们对各种电子钟表、历的不断观察总结发现目前市场的钟、历都存在一些不足之处,比如:
时钟不精确、产品成本太高、无环境温度显示等,这都给人们的使用带来了某些不便。
为此设计了一种功能全面、计时准确、成本低廉的基于51单片机的万年历。
2功能要求
1.万年历能用数码管显示阳历年、月、日、星期、[小]时、分、秒并设置指定时间的闹铃。
2.数字式温度计要求测温范围-50~100°C,LED数码管直读显示。
3方案论证与设计
3.1控制部分的方案选择
1.用可编程逻辑器件设计。
可采用ALTERA公司的FLEX10K系列PLD器件。
设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。
但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。
从成本上来讲,用可编程逻辑器件来设计也没有什么优势。
2.用凌阳16位单片机设计。
凌阳16位单片机有丰富的中断源和时基,方便本实验的设计。
它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。
I/O口功能也比较强大,方便使用。
用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。
这些都方便对设计进行扩展,使设计更加完善。
成本也相对低一些。
但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高。
3.主控芯片使用51系列AT89C52单片机,时钟芯片用美国DALLAS公司推出的一种高性能、低功耗、带RAM的时钟DS1302。
采用DS1302作为主要计时芯片,可以做到计时准确。
更重要的是,DS1302可以在很小电流的后备电源(2.5~5V电源,在2.5V时耗电小于300nA)下继续计时,停电后时钟无需重新调整,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电,还可自设闹铃,阳历、星期与年月日自动对应。
本系统采用了此方案。
3.2测温部分的方案选择
1.在日常生活及工农业生产中经常要乃至温度的检测及控制,传统的测温元件有热电偶和热电阻。
而热电偶和热电阻测一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。
2.与前面相比,采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125°C,最大分辨率可达0.0625°C。
DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
3.3显示部分的方案选择
1.液晶显示方式。
液晶显示效果出众,可以运用菜单项来方便操作,但是在显示时,特别是使用秒表功能时扫描速度跟不上,屏幕会有明显的闪烁。
而且由于61板的存储空间有限,液晶显示就不能与语音播抱程序同时实现。
这些大大影响了电子万年历的性能。
2.相比液晶显示,8段数码管虽然操作比液晶显示略显繁琐,但可视范围十分宽,而且经济实惠,也不需要复杂的驱动程序。
所以最后选择LED数码管显示方案。
综上所述,按照系统设计功能的要求,确定硬件系统由主控制器、时钟模块、测温电路、显示模块、键盘接口共5个模块组成,总体系统构成框图如图3.1所示。
图3.1电子万年历系统构成框图
4系统硬件电路设计
电子万年历电路原理图见附件一,系统由主控制器AT89C52、时钟芯片DS1302、温度传感器DS18B20传感器、显示电路及键盘扫描电路组成。
4.1主控器AT89C52
ATMEL公司生产的AT89C52单片机采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flsah程序存储器。
它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。
主要性能特点有:
8KBFlashROM,可以檫写1000次以上,数据保存10年。
256字节内部RAM。
电源控制模式
——时钟可停止和恢复;
——空闲模式;
——掉电模式。
6个中断源。
4个中断优先级。
4个8位I/O口。
全双工增强型UART。
3个16位定时/计数器,T0、T1(标准80C51)和增加的T2(捕获和比较)。
全静态工作方式:
0~24MHz。
4.2时钟电路DS1302
4.2.1.DS1302的性能特性
实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;
用于高速数据暂存的31×8位RAM;
最少引脚的串行I/O;
2.5~5.5V电压工作范围;
2.5V时耗电小于300nA;
用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
简单的3线接口;
可选的慢速充电(至Vcc1)的能力。
DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。
它经过一个简单的串行接口与微处理器通信。
实时时钟/日历提供秒、分、时、日、周、月和年等信息。
对于小于31天的月和月末的日期自动调整,还包括闰年校正的功能。
时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302有主电源/后备电源双电源引脚:
Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中,Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。
DS1302由Vcc1或Vcc2中较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc时,DS13026由Vcc1供电。
4.2.2DS1302数据操作原理
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。
无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。
在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作是写入时写入数据。
时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
上电运行时,在Vcc大于等于2.5V之前,RST脚必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
DS1302的引脚及内部结构图如图4.1所示,表4.1为各引脚的功能。
DS1302的控制字如图4.2所示。
控制字节的最高位(位7)必须是逻辑1;如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。
位5~1(A4~A0)指示操作单元的地址。
最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。
控制字节总是从最低位开始输入/输出。
为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。
位6规定时钟或RAM,而位0规定读或写。
在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能寄存数据。
在多字节方式中,读或写从地址0的位0开始。
必须按数据传送的次序写最先的8个寄存器。
但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。
不管是否写了全部31字节,所写的每一字节都将传送至RAM。
表4.1DS1302引脚功能
引脚号
引脚名称
功能
1
Vcc2
主电源
2,3
X1,X2
振荡源,外界32.768kHz晶振
4
GND
地线
5
RST
复位/片选线
6
I/O
串行数据输入/输出端(双向)
7
SCLK
串行数据输入端
8
Vcc1
后备电池
76543210
1
RAM
A4
A3
A2
A1
A0
RAM
图4.2DS1302的控制字
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
其日历、时间寄存器及其控制字见表3.2,其中奇数为读操作,偶数为写操作。
时钟暂停:
秒寄存器的位7定义位时钟暂停位。
当它为1时,DS1302停止震荡,进入低功耗的备份方式。
通常在对DS1302进行写操作时(如进入时钟调整程序),停止震荡。
当它为0时,时钟将开始启动。
AM-PM/12-24[小]时方式:
[小]时寄存器的位7定义为12或24[小]时方式选择位。
它为高电平时,选择12[小]时方式。
在此方式下,位5是AM/PM位,此位是高电平时表示PM低电平表示AM。
在24[小]时方式下,位5为第二个10[小]时位(20~23h)。
表4.2内部寄存器地址和内容
积存器名
命令字节
取值范围
积存器内容
写
读
7
6
5
4
3
2
1
0
秒积存器
80H
81H
00~59
CH
10S
SEC
分积存器
82H
83H
00~59
0
10min
MIN
[小]时积存器
84H
85H
00~23或01~12
12/24
0
10A/P
HR
HR
日积存器
85H
87H
01~28,29,30,31
0
0
10DATE
DATE
月积存器
88H
89H
01~12
0
0
0
10M
MONTH
周积存器
8AH
8BH
01~07
0
0
0
0
0
DAY
年积存器
8CH
D3H
00~99
10YEAR
YEAR
DS1302的晶震选用32.768kHz,电容推荐值为33pF,因为震荡频率较低,也可以不接电容,对计时精度影响不大。
4.3测温电路的设计
测温电路主要使用温度传感器DS18B20,由于精度要求不高所以采用2位共阳LED数码管以动态扫描法实现温度显示。
其设计原理图如附件一所示。
4.3.1温度传感器工作原理
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要示通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
独特的单线接口仅需要一个端口引脚进行通信;
多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
无须外部器件;
可通过数据线供电,电压范围为3.0~3.5V;
零待机功耗;
温度以9或12数字量读出;
用户可定义的非易失性温度报警设置;
报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
DS18B20采用3脚PR—35封装或8脚SOIC封装,其内部结构框图如图4.3所示。
64位ROM的位结构如图4.4所示。
开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
非易失性温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个调整暂存RAM和一个易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节存储器,结构如图4.5所示。
头2个字节包含测得的温度信息,第3和第4节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应
8位检验CRC
48位序列号
8位工厂代码(10H)
MSBLSBMSBLSBMSBLSB
图4.464位ROM结构图
温度LSB
1字节
2字节
3字节
4字节
5字节
EEROM
6字节
7字节
8字节
9字节
温度MSB
TH用户字节1
TL用户字节2
TH用户字节1
配置寄存器
TL用户字节2
保留
保留
保留
CRC
图4.5高速暂存RAM结构图
精度的数值。
该字节各位的定义如图4.6所示。
低5位一直1,M是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即用来设置分辨率,定义方法见表4.3。
由表4.3可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间就越长。
因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625°C/LSB形式表示。
温度值格式如图4.7所示。
TM
R1
R0
1
1
1
1
1
图4.6配置寄存器
表4.3DS18B20分辨率的定义规定
R1
R0
分辨率/位
测量最大转换时间/ms
0
0
9
93.75
0
1
10
187.5
1
0
11
375
1
1
12
750
表4.4DS18B20温度与测得值对应表
温度/°C
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010001
0191H
+10.125
0000000010100010
00A2H
+0.5
0000000000001000
0008H
0
0000000000000000
0000H
-0.5
1111111111111000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FE6FH
-55
1111110010010000
FC90H
23
22
21
20
2-1
2-2
2-3
2-4
S
S
S
S
S
S6
S5
S4
图4.7温度数字值格式
当符号位S=0时,表现测得的温度值为正值,可以直接将二进制位转换为十进制,当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码再计算十进制值。
表4.4是一部分温度值对应的二进制温度数据。
DS18B20完成温度转换后,把测得的温度值与RAM中的TH、TL字节内容作比较。
若T>TH或T 因此,可用多只DS18B20同时测量温度并进行报警搜索。 在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。 主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC作比较,以判断主机收到的ROM数据是否正确。 DS18B20的测温原理如图4.8所示。 图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。 图中还隐含着计数门,当计算门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。 计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55°C所对应的一个基数分别置入减法计数器1、温度寄存器中,减法计数器1和温度寄存器被预置在-55°C所对应的一个基数值。 减法计数器1对低温系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存的值将加1,减法计数器1的预置值将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。 图4.8中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门未关闭就重复上述过程,直到温度寄存器值达到被测温度值。 另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。 系统对DS18B20的各种操作必须按协议进行。 操作协议为: 初始化DS18B20(发复位脉冲)发ROM功能指令发存储器操作命令处理数据。 4.3.2DS18B20与单片机的接口电路 DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为引线,3脚接电源。 另一种是寄生电源供电方式。 单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。 当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。 采用寄生电源供电方式时VDD和GND端均接地。 由于单线制只有一根线,因此发送接口必须是三态的。 4.4显示电路的设计 显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。 考虑到第一次扫描17位数码管显示时会出现闪烁情况,设计时17个数码管分3排同时扫描。 第一排8个数码管分别为千年、百年、十年、年、十月、月、十日、日,第二排7个数码管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 万年历 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)