基于AT89C52单片机多功能数字钟的.docx
《基于AT89C52单片机多功能数字钟的.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机多功能数字钟的.docx(15页珍藏版)》请在冰豆网上搜索。
![基于AT89C52单片机多功能数字钟的.docx](https://file1.bdocx.com/fileroot1/2023-2/1/13f4bbc1-8d1e-4f41-b0ad-590a17360389/13f4bbc1-8d1e-4f41-b0ad-590a173603891.gif)
基于AT89C52单片机多功能数字钟的
多功能电子时钟
摘要
本文是基于AT89C52单片机数字钟的设计,通过多功能电子时钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。
论文重点阐述了电子时钟硬件中MCU模块、时钟模块和键盘模块、显示模块等的模块化设计与制作;软件同样采用模块化设计思路,包括中断模块、闹钟模块、时间调整模块的设计,并采用C语言编写实现。
本设计实现了时间与闹钟的修改功能,年、月、日和星期的显示功能。
并且通过对比实际的时钟,查找出了误差的来源,确定了调整误差的方法,尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。
本文还涉及到非接触止闹功能,在有效范围内使用者不需用手去寻找开关而关闭闹钟,该功能使本设计更具有人性化。
该时钟还有重要日子倒计时功能,能够提前几天设定好时间,以避免遗忘重要日子。
关键词:
AT89C52单片机,电子时钟,模块化设计,C语言
Multifunctionalelectronicclock
ABSTRACT
ThisarticleisbasedonAT89C52microcontrollerdigitalclockdesign,throughmulti-functionalelectronicclockdesignideas,detaileddescriptionofthesystemhardwareandsoftwarerealizationprocess.
PaperfocusesontheelectronicclockhardwareMCUmodule,clockmoduleandkeyboardmodule,displaymodule,modulardesignandproduction;softwareasamodulardesignconcept,includingan
interruptmodule,alarmmodule,moduledesigntimetoadjustandadopttheClanguageimplementation.TheDesignandImplementationofthechangesoftimeandalarmfunctions,year,month,dayandweekdisplay.Andbycomparingtheactualclock,findoutthesourceoftheerror,theerrormethodtodeterminetheadjustment,asmuchaspossibletoreducetheerror,allowsthesystemtoachievetheactualnumberofminutesofallowableerrorrange.Thisalsoinvolvesthefunctionofnon-contactonlytroubleintheeffectiverangeofusersdonotneedahandtofindswitchandturnoffthealarm,thisfeaturemakesthedesignmoreuserfriendly.Thereareimportantdaysofthecountdownclockfunction,setagoodfewdaysaheadoftime,toavoidforgettingimportantoccasions.
KEYWORDS:
AT89C52microcontroller,electronicclock,modulardesign,Clanguage
目 录
1.2方案论证
1.2.1总体方案论证
1.2.2模块方案论证.............................................................
1.2.3止闹功能.....................................................................
2.4单片机电路设计方案
2.5跑表功能设计
2.6非接触止闹电路设计
2.7报警电路设计
2.8重要日子倒计时功能设计
2.9看门狗电路
4.3跑表功能的测试
4.4重要日子倒计时功能的测试
前 言
电子时钟己成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
随着技术的发展,人们己不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如日历的显示、闹钟的非接触式止闹、跑表功能、重要日期倒计时显示等,以带来更大的方便,而所有这些,又都是以数字化的电了时钟为基础的。
因此,研究实用电子时钟及其扩展应用,有着非常现实的意义,具有很大的实用价值。
由于数字集成电路技术的发展和采用了先进的石英技术,使电子时钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
虽然现在市场上己有现成的电子时钟集成电路芯片出售,价格便宜,使用也灵活,如可以随意设置时、分、秒的输出,改变显示数字的大小等,并目由于集成电路技术的发展,特别是MOS集成电路技术的发展,使电子时钟具有体积小、携带方便,但是本设计介绍的多功能电子时钟可以满足使用者的一些特殊要求,输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。
实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,也可作为一个定时控制器,驱动负载或显示信息,同时可以根据需要扩展其功能。
在此项目的设计研究过程中需综合运用所学的模拟电了技术、数字电了技术、单片机原理与应用、EDA等课程的知识,掌握实用电子时钟的设计、组装与调试方法,利用现代的EDA、单片机等新电了技术以及现代的设计手段,系统地培养了综合设计、操作调试、故障处理的能力,达到综合素质以及创新能力的提高。
第1章系统总体设计
1.1系统总体设计
根据题目设计要求,要求实现时间和闹钟的显示及设定、跑表、重要日子倒计时、非接触式止闹等功能。
系统上电自检后,实时实现小时、分钟、秒以及日历的显示和闹钟开关等指示信息的显示,通过按键可实现校对时间、设置闹钟时间、整点报时功能以及进行跑表和对贡要日子倒计时的设定和显示。
当闹钟时间到时,单片机通过晶体管、蜂鸣器来实现声报警。
采用光电开关实现非接触式止闹的功能。
针对此要求,本系统由以下几个模块构成,系统总体设计框图如图1-1所示:
图1-1系统总体设计框图
1.2方案论证
1.2.1总体方案论证
采用AT89C52单片机作为系统的控制核心。
单片机是一台简单的计算机,它在结构上的最大特点就是把CPU、存储器、定时器、I/O接口电路集成在一块大规模的集成电路芯片上。
它有集成度高、体积小、控制功能强、低功耗、低电压,便于携带等优点。
1.2.2模块方案论证
时钟模块采用专用时钟芯片实现,市场上现在又很多实时时钟芯片,如DS1302、PF8563、X1227等,芯片内部都集成了时钟/日历功能,给时钟设计带来了很大的方便。
因此,计时功能采用时钟芯片为宜。
键盘模块采用矩阵式键盘,此类键盘采用行列式扫描方式,当按键较多时可以有效的降低占用单片机I/O口的数目。
由于本系统采用的是4×4式矩阵键盘,I/O口的接线比较多。
显示模块采用液晶显示,液晶特别是具有汉字显示功能的液晶显示器,来实现本设计的显示功能,不仅可以显示基本的信息,而且还可以显示丰富的符号及文字指示信息,信息量丰富且直观。
液晶显示具有功耗低、体积小、重量轻、寿命长,不产生电磁辐射等优点。
1.2.3止闹功能
止闹功能采用光电开关实现非接触止闹功能。
因为光电开关利用物体对红外线的反射,可检测到物体的有无,方便有效,人体只需要靠近传感器20CM以内就可产生信号,完成止闹功能。
第2章系统模块设计
2.1时钟接口电路设计
本电子时钟系统的重要部分在于时钟和闹钟功能模块,这里所选用串行日历时钟芯片PCF8563。
与采用并行总线与单片机进行数据通信的时钟芯片相比,PCF8563与单片机的连线大为减少,极大的节省了单片机的系统资源。
时钟芯片与单片机的接口电路如图2所示。
PCF8563是PHILIPS公司推出的一款工业级内含I²C总线接口功能的具有极低功耗的多功能时钟/日历芯片。
PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。
内部时钟电路、内部振荡电路、内部低电压检测电路(1.0V)以及两线制I²C总线通信方式,不但使外围电路极其简洁,而目也增加了芯片的可靠性。
同时每次读写数据后,内嵌的字地址寄存器会自动产生增量。
当然作为时钟芯片,PCF8563亦解决了2000年问题。
因而,PCF8563是一款性价比较高的时钟芯片,它己被广泛用于电表、水表、气表、移动电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。
图2-1PCF8563时钟电路
PCF8563采用了I²C总线接口,虽然总线时序关系复杂,但我们可以利用PHILIPS公司提供的软件包,使得编程极为简单,可靠性极强。
在设计中我们卞要用到了PCF8563的计时功能和报警功能。
PCF8563内部共有16个寄存器。
其中OOH,01H为控制方式寄存器,02H-08H为时间寄存器,09H-OCH为报警功能寄存器,ODH为时钟输出寄存器,OEH和OFH为定时器功能寄存器。
由此可以看出芯片内部时间寄存器和报警寄存器在地址上是连在一起的,并且数据全部是以BCD码形式存放的,这样使得数据读写和处理变得相当简洁和便利。
在本设计中,PCF8563通过SCL,SDA,/INT,CLKOUT与单片机相连,SDA,SCL,/INT,CLKOUT均为漏极开路,必须接上拉电阻。
SCL为时钟输入端,数据随时钟信号同步输入器件或从器件输出;SDA为双向引脚,用于行数据的输入输出;/INT是中断信号输出端,与单片机的P3.3相连,可通过设置报警寄存器按指定时间在该脚产生报警信号,低电平有效;CLKOUT是时钟输出端,接至单片机的P2.1脚,当闹铃时间到时,在PCF8563的内部产生中断标志AF,同时在/INT端产生一个中断(低电平有效),中断服务程序中通过软件编程使得CLKOUT,也就是单片机的P2.1脚输出1Hz的脉冲,启动报警电路,蜂鸣器发出报警声。
2.2键盘接口电路设计
在设计键盘接口电路时,我们使用HD7279A键盘控制器来扫描4X4的16键键盘,单片机通过中断方式从HD7279A读出键码接口电路如图2-2所示:
图2-2键盘接口电路
HD7279A是比高公司生产的单片具有串行接口、可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时可连接多达64键的键盘矩阵,一片即可完成LED显示及键盘接口的全部功能。
它和微处理器之间采用串行接口,其接口和外围电路比较简单,且占用口线较少,因此可以提高单片机的效率和节省系统资源。
加之它具有较高的性能价格比,因而在微型控制器、智能仪表、控制面板和家用电器等领域获得了日益广泛的应用。
HD7279A的主要特点如下:
▶带有串行接口,无需外围元件便可直接驱动LED;
▶各位可独立控制译码/不译码、消隐和闪烁等属性;
▶具有(循环)左移/(循环)右移指令;
▶具有段寻址指令,可方便地用来控制独立的LED显示管;
▶64键键盘控制器内含去抖动电路。
HD7279A与微处理器仅需4条接口线,其中/CS为片选信号(低电平有效)。
DATA为串
行数据端,当向HD7279A发送数据时,DATA为输入端;当HD7279A输出键盘代码时,DATA
为输出端。
CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。
KEY为按
键信号输出端,该端在无键按下时为高电平;而在有键按下时变为低电平,并一直保持到按
键释放为止。
HD7279A控制指令分为纯指令和带有数据的指令两大类。
纯指令主要有六条,分别为:
(1)复位指令。
指令代码为A4H,其功能为清除所有显示,包括字符消隐属性和闪烁属性。
(2)测试指令。
指令代码为BFH,其功能为将所有的LED点亮并闪烁,可用于自检。
(3)左移指令。
指令代码为A1H,其功能为将所有的显示左移1位,移位后,最右位空(无显示),不改变消隐和闪烁属性。
(4)右移指令。
指令代码为AOH,其功能与左移指令相似,只是方向相反。
(5)循环左移指令。
指令代码为A3H,其功能为将所有的显示循环左移1位。
移位后,最左位内容移至最右位,不改变消隐和闪烁属性。
(6)循环右移指令。
指令代码为A2H,其功能与循环左移指令相似,只是方向相反。
系统键盘排列如表2-1所示。
表2-14×4矩阵键盘
1
2
3
4
5
6
7
8
9
0
A
B
C
D
E
F
其中,各键值的代表意义如下所示:
0~9:
调整时间、闹铃、重要日子倒计时时所输入的数字键值;
A:
是否设定整点报时;第一次按下,有整点报时的功能,即在整点时蜂鸣器响一下;第一次按下,无整点报时功能。
B:
第一次按下,设定重要日子倒计时功能;第一次按下,显示倒计时的天数。
C:
设定闹铃;
D:
校对调整时间;
E:
启动/停止/保持跑表的显示;第一次按下,跑表启动;第二次按下,跑表停止,并显示所跑的时间。
F:
确认键,返回显示时间的画面。
2.3液晶显示电路设计
由于本系统信息显示量大,所以我们选用OCM4X8C中文模块的液晶显示器。
它内含GB231216X16点阵国标以及简体汉字和ASCII码即可实现文本显示。
此外,OCM中文模块系统液晶显示器也可用作一般的点阵圆形显示器,并实现汉字、ASCII码,点阵圆形和变化曲线的同屏显示,此适合我们的需要。
接口电路如图2-3所示:
图2-3OCM4*8C接线图
OCM4X8C是具有串/并接口,内部含有中文字库的图形点阵液晶显示模块。
该模块的控制/驱动器采用台湾矽创电了公司的ST7920,因而具有较强的控制显示功能。
该模块具有2.7-5.5V的宽工作电压范围,且具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。
液晶模块显示负电压,也由模块提供,从而简化了系统电源设计。
模块同时还提供LED背光显示功能。
除此之外,模块还提供了画面清除、游标显示/隐藏、游标归位、显示打开/关闭、显示字符闪烁、游标移位、显示移位、垂直画面旋转、反白显示、液晶睡眠/唤醒、关闭显示等操作指令。
OCM4X8C中文模块不需初始化,设置初始化的工作都在上电时自动完成,实现了“即插即用”,其用户硬件接口采用REQ/BUSY握手协议,简单可靠。
该液晶显示器采用请求/答应握手协议,BUSY高电平有效,表示OCM忙,不能接受命令;BUSY=0时,表示OCM空闲。
同时REQ=1时通知OCM处理当前数据线上的数据。
这是一种双向通讯。
OCM4X8C的液晶显示屏为128X64点阵,可显示4行、每行8个汉字。
为了便于简单、方便地显示汉字,该模块具有2Mb的中文字型CGROM,液晶该字型ROM中含有8192个16X16点阵中文字库,同时,为了便于英文和其它常用字符的显示,具有16Kb的16X8点阵的ASCII字符库;为便于构造用户图形,提供了一个64X256点阵的GDRAM绘图区域,A为了便于构造用户所需字型,提供了4组16X16点阵的造字空间。
利用上述功能,OCM4X8C可实现汉字、ASCII码、点阵图形、自造字体的同屏显示。
OCM4X8C按照每个中文字符16X16点阵将显示屏分为4行8列,共32个区。
每个区可显示1个中文字符或2个16X8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。
OCM4X8C内部提供128X2字节的字符显示RAM缓冲区CDDRAM)。
字符显示是通过将字符显示编码写入该字符显示RAM实现的。
根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。
二种不同字符/字型的选择编码范围为:
0000~0006H显示自定义字型,02H~7FH显示半宽ASC工工码字符,A1AOH~F7F阳显示8192种GB2312中文字库字形。
字符显示RAM在液晶模块中的地址80H~9FH。
字符显示的RAM的地址与32个字符显示区域有着一一对应的关系。
为便于和多种微处理器、单片机接口,OCM4X8C提供了多种串/并接口方式,使用其串行接口方式可大大简化液晶显示模块与单片机之问的接口设计;同时,也使液晶显示模块显示汉字变得极为容易,从而改变过去单片机系统人机界面不够友好的弊端。
因此,在此系统的设计中,采用2线串行接口方式。
其工作操作时序如图2-4所示:
图2-4OCM4X8C的2线串行工作模式操作时序
由图7可以看出,单片机与液晶模块之间传送1字节的数据共需24个时钟脉冲。
首先,单片机要给出数据传输起始位,这单是以5个连续的“1”作数据起始位,如模块接收到连续的5个“1”,则内部传输被重置并且串行传输将被同步。
紧接着,“RW”位用于选择数据的传输方向(读或写),“RS”位用于选择内部数据寄存器或指令寄存器,最后的第8位固定为“0"。
在此之后,下一个字节的数据或指令将被分为2个字节来串行传送或接收。
数据或指令的高4位,被放在第2个字节串行数据的高4位,其低4位则置为“0";数据或指令的低4位被放在第3个字节的高4位,其低4位也置为“0",如此完成一个字节指令或数据的传送。
需要注意的是,当有多个数据或指令要传送时,必须要等到一个指令执行完毕后再传送下一个指令或数据,否则,会造成指令或数据的丢失。
这是因为液晶模块内部没有发送/接收缓冲区。
用OCM4X8C显示模块时应注意以下儿点:
(1)欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
(2)显示ASCII字符过程与显示中文字符过程相同。
不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
(3)当字符编码为2字节时,应先写入高位字节,再写入低位字节。
(4)模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的命令。
如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
系统开机后,自动进入时钟和闹钟开关状态显示,画面如图2-5所示。
20
10
年
06
月
15
日
星
期
二
12
时
01
分
00
秒
闹
钟
关
图2-5系统开机画面显示
2.4单片机电路设计方案
AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8Kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元。
功能强大的AT89C52单片机适合于许多较为复杂控制应用场合。
AT89C52的卞要性能参数:
▶与MCS-51产品指令和引脚完全兼容
▶8K字节可重擦写Flash闪速存储器
▶1000次擦写周期
▶全静态操作:
OHz-24MHz
▶三级加密程序存储器
▶256X8字节内部RAM
▶32个可编程工/0口线
▶3个16位定时/计数器
▶8个中断源
▶可编程串行DRAT通道
▶低功耗空闲和掉电模式
AT89C52的引脚如图2-6所示:
图2-6AT89C52引脚图
●PO口:
PO口是一组8位漏极开路型双向I∕O口,也即地址/数据总线复用作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路。
对端口PO写"1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,PO口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
●P1口:
P1是一个带内部上拉电阻的8位双向I∕O口。
P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部输入(P1.0/T2)和输入(P1.1/T2EX),
●P2口:
P2是一个带有内部上拉电阻的8位双向I/0口。
P2的输出缓冲级可驱动(吸收或输出电流)吐个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXCDPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(例如执行MOVX@R1指令)时,P2口输出P2锁存器的内容。
●P3口:
P3口是一组带有内部上拉电阻的8位双向I/0口。
P3输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/0口线外,更重要的用途是它的第一功能。
●RST:
复位输入
●ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
对Flash存储器编程期间,该引脚还用于编程脉冲(PROG)。
●/PSEN:
程序储存允许输出是外部程序存储器的读选通信号。
●/EA/VPP:
外部访问允许。
●XTAL1:
振荡器反相大器的及内部时钟发生器的输入端。
●XTAL2:
振荡器反相大器的输出端。
AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器,但并非所有的地址都被定义,从80H-FFH共128个字节只有一部分被定义,还有相当一部分没有定义。
对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。
AT89C52共有6个中断向量:
两个外部中断(INTO和INT1),3个定时器中断(定时器0,1,2)和串行口中断。
这些中断源可通过分别设置专用寄存器IE的置位或清0来控制每一个中断的允许或禁止。
IE也有一个总禁止位EA,它能控制所有中断的允许或禁止。
在本系统的设计中,将PCF8563的/INT端接到AT89C