收藏和点赞,您的关注是我创作的动力
概要
电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、温度检测采用DS18B20温度传感器、键盘接口电路用普通按键接上拉电阻完成;软件利用C语言编程实现单片机程序控制。单片机通过时钟芯片DS1302获取时间数据,DS18B20采集温度信号送该给单片机处理,单片机再把时间数据和温度数据送给74LS154译码,然后通过三极管C9015放大驱动LED数码管显示阳历年、月、日、时、秒、闹钟、星期、温度。
一、系统总体设计
1 阳历程序设计
因为使用了时钟芯片DS1302,阳历程序只需从DS1302各寄存器中读出年、周、月、日、[小]时、分、秒等数据,再处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓冲单元。阳历程序流程图见图5.1所示。
2 时间调整程序设计
调整时间用5个调整按钮,1个作为移位、控制用,2个作为加和减用,还有2个作为闹钟调整使用,分别定义为控制按钮、加按钮、减按钮、闹钟加按纽、闹钟减按纽。在调整时间过程中,要调整的位与别的位应该有区别。所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。利用定时器计时,当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整程序流程图如图5.2所示。
3 温度程序设计
系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序等等。
1 主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次。其程序流程图见5.3。
2 读出温度子程序
主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图5.4所示。
3 温度转换命令子程序
温度转换子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图5.5所示。
二、基本内容
功能要求
-
万年历能用数码管显示阳历年、月、日、星期、[小]时、分、秒并设置指定时间的闹铃。
-
数字式温度计要求测温范围-50~100°C, LED数码管直读显示。
-
液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,但是在显示时,特别是使用秒表功能时扫描速度跟不上,屏幕会有明显的闪烁。而且由于61板的存储空间有限,液晶显示就不能与语音播抱程序同时实现。这些大大影响了电子万年历的性能。
-
相比液晶显示,8段数码管虽然操作比液晶显示略显繁琐,但可视范围十分宽,而且经济实惠,也不需要复杂的驱动程序。所以最后选择LED数码管显示方案。
综上所述,按照系统设计功能的要求,确定硬件系统由主控制器、时钟模块、测温电路、显示模块、键盘接口共5个模块组成,总体系统构成框图如图3.1所示。
图3.1 电子万年历系统构成框图
三、 系统硬件电路设计
电子万年历电路原理图见附件一,系统由主控制器AT89C52、时钟芯片DS1302、温度传感器DS18B20传感器、显示电路及键盘扫描电路组成。
1 主控器 AT89C52
ATMEL公司生产的AT89C52单片机采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flsah程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。主要性能特点有:
8KB Flash ROM,可以檫写1000次以上,数据保存10年。
256字节内部RAM。
电源控制模式
——时钟可停止和恢复;
——空闲模式;
——掉电模式。
6个中断源。
4个中断优先级。
4个8位I/O口。
全双工增强型UART。
3个16位定时/计数器,T0、T1(标准80C51)和增加的T2(捕获和比较)。
全静态工作方式:0~24MHz。
2 时钟电路 DS1302
(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供电。
(2)DS1302数据操作原理
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。
四、 参考文献
[1] AT89C51,http://www.zlgmcu.com,广州周立功单片机发展有限公司
[2] DS1302 Trickle Charge Timekeeping Chip,www.dalsemi.com
[3] 刘嘉新 李明 于明淳 DS18B20在林学气象测量中的应用,2002年7月第30卷第4期
[4] 蒋敏,单片微机万年历设计,职大学报2002年第2期
[5] 邸春芳,电脑实时时钟的设计,(西南石油学院电子信息工程学院)
[6] 维普资讯 http://www.cqvip.com
[7] 王越明,电子万年历的设计,黑龙江煤矿机电设备厂,维普资讯 http://www.cqvip.com
[8] 适用于51系列单片机的一种万年历优化算法,维普资讯 http://www.cqvip.com
[9] 吴有富,推导万年星期历的turoc-c程序,贵州民族学院
[10] 刘峰 周炳峻 李晓静,遥控电脑万年历的改造,河北,应用与改造
[11] 藤迪安,最新万年历,《黑龙江珠算》1996年第5期
[12] 韩志军 刘新民,数字温度传感器DS18B20及其应用,2003年3月第1卷第1期
[13] 江太辉 邓展威 DS18B20数字式温度传感器的特性与应用《电子技术》2003年第12期
[14] 陈跃东DS18B20集成温度传感器原理及其应用,安徽机电学院学报2002年l2月第l7卷第4期
四、 文章目录
目 录
摘 要 I
Abstract II
1 引言 1
2 功能要求 1
3 方案论证与设计 1
3.1 控制部分的方案选择 1
3.2 测温部分的方案选择 1
3.3 显示部分的方案选择 2
4 系统硬件电路设计 2
4.1 主控器 AT89C52 2
4.2 时钟电路 DS1302 3
4.2.1. DS1302的性能特性 3
4.2.2 DS1302数据操作原理 3
4.3 测温电路的设计 5
4.3.1 温度传感器工作原理 5
4.3.2 DS18B20与单片机的接口电路 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