数字电子钟.docx
- 文档编号:27855334
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:43
- 大小:112.69KB
数字电子钟.docx
《数字电子钟.docx》由会员分享,可在线阅读,更多相关《数字电子钟.docx(43页珍藏版)》请在冰豆网上搜索。
数字电子钟
目录
1前言1
1.1课题基本要求1
2总体设计方案1
2.1方案原理1
2.2硬件选择2
2.2.1单片机选择2
2.2.2显示器选择2
2.2.3时钟芯片的选择2
2.2.4温度传感器的选择2
2.3.5电路设计最终方案2
3硬件设计3
3.1系统设计框图3
3.2单片机最小系统3
3.3时钟电路4
3.3.1DS1302的结构及原理4
3.3.2时钟芯片DS1302的工作原理5
3.3.3DS1302实时显示时间的软硬件5
3.4温度采集模块5
3.5显示模块6
3.6键盘电路7
4软件设计8
4.1总流程图8
4.2初始化流程图9
4.3延时中断子程序9
4.4时间设置子程序9
5系统调试10
5.1硬件测试10
5.2软件测试10
设计心得体会12
参考文献:
11
附录一:
数字电子钟硬件原理图14
附录二:
C语言源程序14
附录三:
元件清单29
单片机数字电子钟课程设计
摘要:
数字电子钟是采用电子电路实现对年、月、日、时、分、秒、星期数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。
本文介绍了基于单片机的多功能数字电子钟设计。
系统以STC89C52RC为核心,具有时间和日期的显示及设置功能。
温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12864作为显示器,用蜂鸣器构成声音报警器。
单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器12864显示,12864还可以显示汉字;键盘用来调时。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。
关键词:
STC89C52RC单片机;12864液晶显示器;DS1302时钟芯片;DS18B20温度传感器
1前言
1.1课题基本要求
本设计基于单片机技术原理,以单片机芯片STC89C52作为核心控制器,通过硬件电路的制作已经软件程序的编制,设计制作出一个电子钟系统。
该时钟系统主要由时钟模块、显示模块、控制模块组成。
系统具有简单清晰的操作界面,能在4V~6V直流电源下正常工作。
能够准确显示时间,可随时进行时间调整。
设计以硬件软件化为指导思想,充分发挥单片机功能,大部分能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性。
由于系统所用的元器件少,单片机被占用的I/O口不多,因此具有一定的可扩展性。
2总体设计方案
2.1方案原理
本系统以STC89C52RC单片机为核心,该单片机可把数据进行处理,从而把数据传输到显示模块12864液晶显示器,实现时间及日期的显示。
以LCD液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化,还可以对时间和日期进行设置,主要靠按键来实现。
2.2硬件选择
2.2.1单片机选择
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式选择STC89C52单片机。
控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
2.2.2显示器选择
显示时间和日期可以采用LCD液晶显示器与LED数码管,LCD液晶显示器显示功能强大,可显示大量文字,图形,显示多样,清晰可见,而且接线简单,所以在此设计中采用LCD液晶显示屏。
所以选择12864液晶显示器。
2.2.3时钟芯片的选择
选择DS1302时钟芯片
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
所以采用DS1302时钟芯片实现时钟。
2.2.4温度传感器的选择
选择DS18B20温度传感器
使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。
此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。
而采用数字式温度传感器DS18B20,仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。
另外,数字式温度传感器还具有测量精度高、测量范围广等优点。
所以采用数字式温度传感器DS18B20。
2.3.5电路设计最终方案
采用AT89C52作为主控制系统;DS1302提供时钟;数字式温度传感器DS18B20监测温度;LCD12864液晶显示器显示时间和年月日,用按键调整时间,蜂鸣器报时。
3硬件设计
3.1系统设计框图
该设计以STC89C52RC单片机为中心,分别设计了键盘电路、时钟电路、LCD液晶显示电路和温度电路。
系统电路示意图如下所示。
图1系统设计框图
3.2单片机最小系统
本系统以AT89C52单片机为核心,本系统选用11.0592MHZ的晶振,,使得单片机有合理的运行速度。
起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。
STC89C52单片机最小系统电路设计如图2所示。
图2单片机最小系统
3.3时钟电路
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
3.3.1DS1302的结构及原理
⑴引脚功能及结构
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK始终是输入端。
⑵DS1302的控制字节
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
⑶数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
⑷DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
3.3.2时钟芯片DS1302的工作原理
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。
图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。
位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
表6为DS1302的日历、时间寄存器内容:
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。
“WP”
是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
3.3.3DS1302实时显示时间的软硬件
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。
图3示出DS1302的引脚排列,其中V2为后备电源,V1为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
X1和X2是振荡源,外接32.768KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。
中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
图3时钟电路
3.4温度采集模块
用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地,如图4所示。
图4DS18B20温度采集
3.5显示模块
LCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。
工作电压为4.5~5.5V,工作温度在常温下为0~55℃,宽温下为-20~70℃。
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
12864具有低电源电压3.0~5.5V;工作温度在常温下为0~55℃,宽温下为-20~70℃;显示分辨率为128×64点;2MHZ时钟频率;通讯方式串口、并口可选。
其接线如下图所示:
图512864显示电路
本实验使用并行口接法,其管脚图如下:
表112864管脚
管脚号
管脚名称
电平
管脚功能描述
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:
串口方式
16
NC
-
空脚
17
/RESET
H/L
复位端,低电平有效
18
NC
-
空脚
19
A
VDD
背光源正端(+5V)
20
K
VSS
背光源负端
3.6键盘电路
该设计总共设计了四个独立的按键即功能键、增加键,减小键,确认键分别与单片机的P3.7,P2.0,P2.1,P2.2口连接,用来进行时间和日期的设置,采用软件编程的方式输入键操作信息。
按键输入的信号会通过相应的端口进行传输,最后由LCD显示出来,键盘电路如下图所示。
按键key_menu接P3.7
按键key_jia接P2.0
按键key_jian接P2.1
按键key_enter接P2.2
图6键盘电路
4软件设计
LCD电子钟的软件部分是基于C语言进行程序设计的,程序结构总体上包括五大部分,即主程序、LCD12864液晶显示子程序、DS1302时钟芯片子程序、DS18B20温度检测显示子程序和键盘子程序五个部分以主程序为中心,主程序主要功能是对LCD进行初始化、调用适当的子程序等协调整个程序的运行。
4.1总流程图
图7主流程图
4.2初始化流程图
图8初始化流程图
4.3延时中断子程序
图9延时中断子程序
4.4时间设置子程序
这里仅画出了秒设置流程图如图4-4所示,其他时间及日期置流程图,其他时间及日期设置类似。
图10秒设置流程图
5系统调试
5.1硬件测试
电子时钟的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。
在本次电子时钟的设计调试中遇到了很多的问题。
回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:
LCD液晶显示不出来或者出来的是乱码。
解决:
用万用表对焊接电路板进行测试、发现12864的引脚有虚焊情况,进行重新焊接后,再次测试,解决出现的断码或乱码。
12864有时只亮不显示且亮度低。
解决:
根据仪器的测试,发现电路的驱动能力不足,最后接入稳压电源以及在DS1302时钟芯片的/CS、SCLK、RET端接入10K的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。
5.2软件测试
电子万年历是多功能的数字型,可以看当前日期(阴、阳历),时间,还有温度的仪器。
电子万年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中主要遇到的问题如下:
烧入程序后,12864显示闪动,而且亮度不均匀。
解决:
首先对调用的延时进行逐渐修改,可以解决显示闪动问题。
其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在返回时屏蔽掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。
参考文献:
[1]柴钰.单片机原理及应用【M】.西安电子科技大学出版社.
[2]庄俊华.史晓霞.新视野单片机教程汇编+C语言【M】.机械工业出版社.
[3]瓮嘉民.单片机应用开发技术【M】.中国电力出版社.
[4]张晓乡.89C51单片机实用教程【M】.电子工业出版社.
设计心得体会
(硬件)
在这次数字电子钟课程设计过程中,我学到了很多东西,例如DS18B20、12864、DS1302等芯片的用法及原理,用keil软件uVision4的使用来检测程序是否有误并用STC_ISP驱动程序往单片机里下载程序,更加深入了解了AT89C51单片机的知识与应用,直接体会到要学会单片机只要我们熟练控制单片机32个I/O输入输出,会对所有功能块的模式寄存器和控制寄存器进行设置,掌握程序的编写和常用元件的识别和测试。
还使我了解了电路的连线方法以及如何提高电路的性能等等。
这次设计对我查阅资料、程序编写、动手设计、对一些陌生软件的自主学习能力等都有很大的提高。
当然,再设计途中不可避免的遇见了问题:
由于板子出现虚焊,导致显示屏不出现文字,或者出现文字不稳定,经过万用表的测试这个问题已经解决;由于程序的问题,时间显示不出来或只有部分显示;修改程序时思考不周全,修改后继续出错,有时候在用keil软件时,由于程序有错误使得hex文件无法生成;在用STC_ISP驱动程序往单片机里下载程序时,因单片机坏了而无法下载;电子钟依旧无法正常工作,我又借用了同学的单片机(确认完好),重新接线后,出现了显示,但温度显示不正常,总是在显示是出现0度闪过;经过前面的一系列问题,我十分担心还是板子的问题,就又用万用表检查了一遍,但问题依旧存在,于是我就问别的小组借用了以下DS18B20,温度显示正常了,解决了这个问题。
这些错误都是我们以后要避免的,这次的困难直接导致我们小组一直弄到半夜。
我得出的结论是我们以后再做课设一定要心细,再就是坚持不懈,最终胜利一定会向我们招手。
我们采用了C语言进行编程,基本达到了设计的要求。
通过此次课程设计,我明白了熟能生巧和多学多想多做的道理,希望在以后的学习中多获得像本次课设一样的是我们充分锻炼实践的机会。
(软件)
在此次课程设计题目选定过程中,首先是觉得液晶显示比较新颖,而且更接近于实际;其次,数字时钟应用普遍广泛,这让我们小组决定选择这一题目。
在实验程序编写过程中,由于我们学习单片机时主要通过汇编语句编程来实现其功能,这使得我们先选择汇编语言,因为其语句简单易于上手;但编写过程中,随着编写语句的增加,使得程序无法理清,甚是无法阅读,最终,我们听取了同学的建议,开始改用C语言,我们从网上下载了一些C语言编写时间的程序开始阅读,而我们小组C语言基础薄弱,其本身与C++有一定差距,所以这给我们带来了很大困难,期间曾一度想放弃,在同学们的热心帮助下,我们逐渐熟悉了C语言,开始了艰难的编程过程。
时间与日期子程序编写完成之后,对LCD12864显示模块,还是一无所知,然后我们通过阅读网上出现的数字时钟实验报告中LCD12864液晶显示器功能描述和具体端口的编程,通过运用keil软件不断对我们编写的程序进行检查和寻找错误,使得程序能够正常运行,最终我们终于掌握了对LCD的显示编程。
然后是在焊板子过程中由于不熟练出现了虚焊,这个是在焊完电路通电后发现的,在接上那个屏幕输入程序后,发现屏幕只亮但并不显示数字,我们又仔细检查了一遍线路,发现是连接屏幕的RS,RW,E三根线接错了,经过修改后才显字了。
通过此次课程设计,我更加深入地了解了AT89C52单片机的知识与应用,并且增强了动手能力,还学会了运用keil软件uVision4来检测程序是否有错误,学习了汇编以及C语言编程的应用。
附录
附录一:
数字电子钟硬件原理图
图11系统接线原理图
附录二:
C语言源程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^0;//定义DS18B20的单总线
#defineLcd_BusP0
sbitLCD_RS=P2^7;//数据/命令选择
sbitLCD_RW=P2^6;//读写控制
sbitLCD_EN=P2^5;//片选信号
sbitLCD_PSW=P2^4;
sbitLCD_RST1=P2^3;
#defineLCD_DATAP0//8bit数据线
#defineLOW0
#defineHIGH1
#defineCLEAR_SCREEN0x01//清屏指令:
清屏且AC值为00H
#defineAC_INIT0x02//将AC设置为00H。
且游标移到原点位置
#defineCURSE_ADD0x06//设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#defineFUN_MODE0x30//工作模式:
8位基本指令集
#defineDISPLAY_ON0x0c//显示开,显示游标,且游标位置反白
#defineDISPLAY_OFF0x08//显示关
#defineCURSE_DIR0x14//游标向右移动:
AC=AC+1
#defineSET_CG_AC0x40//设置AC,范围为:
00H~3FH
#defineSET_DD_AC0x80
#defineFUN_MODEK0x36//扩展指令集,8位指令
#defineX1address0x80//上半屏X轴起始地址
#defineX2address0x88//下半屏X轴起始地址
#defineYaddress0x80//Y轴起始地址
#defineSet_Column0x40
#defineSet_Page0xB8
ucharcodeshu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子钟