单片机课程-日历时钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一日历时钟设计
一、设计内容:
采用MCS-51系列单片机进行日历时钟设计并通过实验仪验证通过。
二、设计要求:
1.设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM 等)
2.设计键盘/显示器接口电路。
3.通过软件编程实现日历时钟的显示(显示年、月、日和时:分:秒)
4.通过键盘可预置日历时钟。
5.实现作息时间控制输出。
一、单片机最小系统
XTAL1
1.89C52单片最小系统
XTAL1
目录
摘要 (7)
前言 (8)
1 概论 (8)
概述 (8)
时钟日历的特性 (8)
2 系统原理与硬件设计 (9)
硬件选择 (10)
AT89C51单片机简介 (10)
时钟芯片介绍 (15)
LED简介 (20)
3 程序设计 (22)
4 调试过程及数据分析 (19)
K EI L调试 (19)
实验台调试 (19)
5 结果分析 (30)
6 心得体会 (30)
7 致谢 (30)
8参考文献 (20)
摘要
本次单片机课程设计利用PCF8563日历实时时钟实现年月日时分秒的显示。
本次课程设计需要用到CPU模块、ZLG7290键盘与显示模块、时钟模块(PCF8563)。
PCF8563这种时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新在计算机汇编语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。
此外,这种时钟芯片带有锂电池做后备电源,具备永不停止的计时功能和可编程方波输出功能,可用作实时测控系统的采样信号等。
这种时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。
本次设计中的LED数码管电子时钟电路采用24小时制记时方式,日期和时间用16位数码管显示。
设计采用AT98C51单片机,使用5V电源供电。
本次设计采用AT89C51单片机的扩展芯片和ZLG7290键盘与显示模块做驱动,由多块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。
关键词:PCF8563、AT89C51、时钟日历
前言
一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。
除此之外还广泛应用办公自动化领域、商业营销领域、汽车及通信系统、计算机外部设备等各领域中,并且单片机已成为计算机发展和应用的一个重要方面。
由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。
本次设计根据AT89C51单片机系统扩展的基本原理和方法、常用总线标准和典型接口电路
的应用,结合本次设计的题目要求进行系统扩展,通过单片机驱动时钟芯片进行年、月、日、时、分、秒显示,最后通过74LS154译码和动态显示的方式完成设计任务,设计论文中附有电路图、程序清单、各数据存储单元的所在地址和输入输出口对应表。
因水平有限,难免有疏落不足之处,恳请老师和同学能给予批评指正
1 概论
概述
随着电子技术的迅速发展,特别是随着大规模集成电路产生而出现的微型计算机,给人类生活带来了极大的方便。
走入家庭,从洗衣机、微波炉到音响、汽车,到处都可以见到单片机应用的踪影。
如果说微型计算机技术的出现使现代科学研究得到了质的飞跃,那么也可以毫不夸张的说:“单片机技术的出现则是给现代工业测控领域带来了一次新的工业革命”。
目前,单片机以其可靠性高和智能性等特点被广泛应用到工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等领域中,并已经进入家庭,因此,单片机技术的开发和应用水平已经逐步成为一个国家自动化发展水平的标志之一。
时钟日历的特性
PCF8563
1.PCF8563 是 PHILIPS 公司推出的一款工业级内含 I C 总线接口功
能的具有极低功耗的多功能时钟/日历芯片 PCF8563 的多种报警功能
定时器功能时钟输出功能以及中断输出功能能完成各种复杂的定时服
务甚至可为单片机提供看门狗功能内部时钟电路内部振荡电路内部
低电压检测电路以及两线制 I2C 总线通讯方式不但使外围电路及其
简洁而且也增加了芯片的可靠性同时每次读写数据后内嵌的字地址
寄存器会自动产生增量当然作为时钟芯片 PCF8563 亦解决了 2000 年
问题因而PCF8563 是一款性价比极高的时钟芯片它已被广泛用于电表
水表气表电话传真机便携式仪器以及电池供电的仪器仪表等产品领
域
2 系统原理与硬件设计
1.本次的设计题目是日历时钟设计,要求实现年、月、日、时、分、秒
的正常显示,需要硬件和软件的结合来实现。
本次设计利用时钟日历芯
片PCF8563的特性和AT89C51单片机的功能利用实现的。
时钟芯片在电
源的作用下向通过P1口向AT89C51单片机输入时间信号,AT89C51单片
机在接受到时间信号后通过P0将信号送到单片机另一扩展芯片
ZLG7290,驱动LED数码管显示。
同时,系统通过p0口接收键盘输入信
号。
系统框图如下:
画出系统框图
硬件选择清单
(1)时钟芯片选择选用时钟日历芯片PCF8563
(2)单片机的选择选用AT89C51单片机,并配备晶振。
(3)键盘及显示电路选择采用扩展芯片ZLG7290作为接口键盘及led驱动器,共(待定)极数码管显示。
(4)电源选择采用直流5V电源供电。
(6) ROM和RAM
AT89C51单片机简介
AT89C51单片机是一种低功耗,高性能的片内含有4KB可编程/擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的8位COMS微控制器,使用高密度,非易失存储技术制造,并且与AT89C51引脚和指令系统完全兼容。
芯片上的FPEROM允许在线编程或采用通用的非易失存储编程器对存储器重复编程。
引脚说明 AT89C51单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图(a)(b)所示
(a) (b)
图AT89C51单片机逻辑图与引脚图
AT89C51单片机的内部硬件结构中除了程序存储器由FPEROM取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:
(1)VCC:供电电压
(2)GND:接地
(3)时钟电路
XTAL1(19脚)——芯片内部振荡电路(单级反相放大器)输入端。
XTAL2(18脚)——芯片内部振荡电路(单级反相放大器)输出端。
(4)控制信号
RST(9脚)复位信号:
ALE(30脚)地址锁存信号
PSEN(29脚)片外程序存储器读选通:
EA/Vpp(30脚)
(5)I/O接口
时钟芯片介绍
2 PCF8563简介
PCF8563 是PHILIPS 公司推出的一款带IC 总线,具有极低功耗的多功能时钟/日历芯片PCF8563 的多种报警功能。
定时器功能时钟输出功能以及中断输出功能能完成各种复杂的定时服务甚至可为单片机提供看门狗功能内部时钟。
电路内部振荡电路内部低电压检测电路以及两线制IC 总线通讯方式不但使外围电路及其简洁而且也增加了芯片的可靠性当然作为时钟芯片PCF8563 亦解决了2000 年问题因而PCF8563 是一种性价比极高的时钟芯片。
它广泛应用于电话传便携式仪器以及电池供电的仪器仪表等产品领域。
指标如下:
1. 宽电压范围 ~ 复位电压Vlow=;
2. 超低功耗典型值为 A;
3. 四种报警功能和定时器功能;
4. 内部复位电路内部振荡器电路和内部低压检测电路;
5. 中断输出和可编程时钟输出功能;
6. 400kHzIC 总线
图1为PCF8563内部结构。
PCF8563内部包括16个8位寄存器,可自动增量的地址寄存器,内置32.768Hz的振荡器(带有一个内部集成的电容),分频器(用于给实时时钟RTC提供源时钟),可编程时钟输出,定时器,报警器,掉电检测器和400 kHz的I2C总线接口。
所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。
前2个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,其中内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址ODH控制CLKOUT引脚的输出频率,地址OEH和OFH分别用于定时器控制寄存器和定时器寄存器。
秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为BCD,星期和星期报警寄存器不以BCD格式编码。
PCF8563 的管脚排列及描述如下图及表所示:
3 系统硬件设计
硬件电路设计包括PCF8563时钟与mega16单片机的接口电路、数码显示电路以及键盘电路3个部分。
PCF8563采用32.768 kHz可编程时钟输出频率,I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
单片机与PCF8563之间双向传送数据,最高传送速率为100 Kb/s。
FC总线的优点是简单和有效。
由于接口直接在组件之上,
因此,I2C总线占用的空间非常小,减少了电路板的空间和器件引脚的数量,降低了成本。
图2为PCF8563与mega16单片机的接口电路,PCF8563的SCL与单片机的引脚PC0连接;SDA与单片机的引脚PC1连接,实现时间、日期等数据的读取。
ZLG7290 I C接口键盘及LED驱动器
一特点
I2C串行接口提供键盘中断信号方便与处理器接口
可驱动 8 位共阴数码管或 64 只独立 LED 和 64 个按键
可控扫描位数可控任一数码管闪烁
提供数据译码和循环移位段寻址等控制
8 个功能键可检测任一键的连击次数
无需外接元件即直接驱 LED 可扩展驱动电流和驱动电压
提供工业级器件多种封装形式 PDIP24 SO24
显示部分
键盘部分
LED简介
LED数码管根据LED的接法不同分为共阴和共阳两类,将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它数字的显示原理与此类同。
LED的7段数码管利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。
在这次的设计中采用的均是共阴极的LED显示,当I/O口输出为高电平的时候,对应段就被点亮。
LED数码管的结构图如图(b)所示。
(a)
(b)
图 LED分类结构图和结构图
图 LED分类结构图和结构图
图 LED分类结构图和结构图
(2) 动态显示电路
将所有位的段选线的同名端联在一起,由一个8位I/O口控制,形成段选线的多位复用。
而各位的公共阳极或公共阴极则分别由相应的I/O口线控制,实现各位的分时选通,即同一时刻只有被选通位是能显示相应的字符,而其他所有位都是熄灭的。
由于人眼有视觉暂留现象,只要每位显示间隔足够短,则会造成多位同时点亮的假象。
这就需要单片机不断地对显示进行控制,CPU需要不断地进行显示刷新,动态显示电路参见图,图中是扩展了五位的LED数码管显示,用一个74LS154作为五个LED的段选输入,采用动态显示的方式连接。
类似地,16位的LED数码管显示也可以用这种方法来实现。
图五位LED数码管的动态显示
3.程序设计
本次设计采用汇编语言编程,主程序主要实现显示的初始化和调用各子程序工作的功能,读取时间的子程序主要实现初始化,时间信息的采集和显示段码的码的存取。
在显示刷新子程序中采用动态显示方式,每次从显示缓冲区中取出一个段码由译码器送出,相应位码由ZLG7290送出,轮流显示。
主程序
程序清单如下:
;------------------------------------------
; 定义 PCF8563 的地址
;------------------------------------------
SECOND EQU 6F00H ; 秒寄存器
MINUTE EQU 6F02H ; 分寄存器
MINUTE_ALARM EQU 6F03H ; 分闹钟寄存器
HOUR EQU 6F04H ; 时寄存器
HOUR_ALARM EQU 6F05H ; 时闹钟寄存器
DATE EQU 6F07H ; 日寄存器
MONTH EQU 6F08H ; 月寄存器
YEAR EQU 6F09H ; 年寄存器
REG_A EQU 6F0AH ; 寄存器 A
REG_B EQU 6F0BH ; 寄存器 B
REG_C EQU 6F0CH ; 寄存器 C
REG_D EQU 6F0DH ; 寄存器 D
;------------------------------------------
SECOND_BUFFER EQU 51H ;秒缓冲区
MINUTE_BUFFER EQU 52H ;分缓冲区
HOUR_BUFFER EQU 53H ;时缓冲区
DATE_BUFFER EQU 54H ;日缓冲区
MONTH_BUFFER EQU 55H ;月缓冲区
YEAR_BUFFER EQU 56H ;年缓冲区
;------------------------------------------
ZZLG7290 EQU 0af01H ;ZLG7290 状态/命令口地址
DZLG7290 EQU 0af00H ;ZLG7290 数据口地址
LEDMOD EQU 00H ;左边输入八位字符显示
;外部译码键扫描方式,双键互锁LEDFEQ EQU 2FH ;扫描速率
LEDCLS EQU 0C1H ;清除显示 RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址;-----------------------
; 主程序
;-----------------------
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: ;MOV 51H,#00H ;秒
;MOV 52H,#30H ;分
;MOV 53H,#13H ;时
;MOV 54H,#25H ;日
;MOV 55H,#11H ;月
;MOV 56H,#10H ;年
;MOV SP,#60H
JNB , YYY ;按键按下读年月日,按键没有按下读时分秒
LCALL INITZLG7290
LCALL WRITETIME
JJJ: LCALL READTIME
LCALL DISPLAY
JNB ,III
AJMP JJJ
年月日的读取和显示的子程序
YYY: LCALL INITZLG7290
III: LCALL WRITETIME
RRR: LCALL READTIME
LCALL DISPLAY1
JNB ,RRR ;按键未释放继续读年月日
AJMP JJJ ;按键释放跳转读时分
ZLG7290初始化子程序
INITZLG7290:
PUSH DPH ;保存现场
PUSH DPL
PUSH ACC
MOV DPTR ,#ZZLG7290
MOV A,#LEDMOD ;置ZLG7290工作方式 MOVX @DPTR,A
MOV A,#LEDFEQ ;置键盘扫描速率
MOVX @DPTR,A
MOV A,#LEDCLS ;清除 LED 显示
MOVX @DPTR,A
POP ACC ;恢复现场
POP DPL
POP DPH
RET
时分秒显示子程序程序DISPLAY: MOV A,SECOND_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#0
LCALL DISLED ;显示秒低位
MOV A,SECOND_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#1
LCALL DISLED ;显示秒高位
MOV R5,#16
MOV R4,#2
LCALL DISLED ;显示"-"
MOV A,MINUTE_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#3
LCALL DISLED ;显示分钟低位
MOV A,MINUTE_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#4
LCALL DISLED ;显示分钟高位
MOV R5,#16
MOV R4,#5
LCALL DISLED ;显示"-"
MOV A,HOUR_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#6
LCALL DISLED ;显示小时低位
MOV A,HOUR_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#7
LCALL DISLED ;显示小时高位
RET
年月日显示子程序
DISPLAY1:MOV A,DATE_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#0
LCALL DISLED ;显示日的低位
MOV A,DATE_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#1
LCALL DISLED ;显示日高位
MOV R5,#16
MOV R4,#2
LCALL DISLED ;显示"-"
MOV A,MONTH_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#3
LCALL DISLED ;显示月低位
MOV A,MONTH_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#4
LCALL DISLED ;显示月高位
MOV R5,#16
MOV R4,#5
LCALL DISLED ;显示"-"
MOV A,YEAR_BUFFER
ANL A,#0FH
MOV R5,A
MOV R4,#6
LCALL DISLED ;显示年低位
MOV A,YEAR_BUFFER
SWAP A
ANL A,#0FH
MOV R5,A
MOV R4,#7
LCALL DISLED ;显示年高位
RET
写时间子程序WRITETIME:
PUSH DPH ;写时间
PUSH DPL
PUSH ACC
MOV DPTR,#REG_A ;开启振荡器和允许计时
MOV A,#00100000B
MOVX @DPTR,A
MOV DPTR,#REG_B ;设定SET=1,禁止更新资料
MOV A,#B
MOVX @DPTR,A
MOV DPTR,#SECOND ;设定秒
MOV A,SECOND_BUFFER
MOVX @DPTR,A
MOV DPTR,#MINUTE ;设定分
MOV A,MINUTE_BUFFER
MOVX @DPTR,A
MOV DPTR,#HOUR ;设定时
MOV A,HOUR_BUFFER
MOVX @DPTR,A
MOV DPTR,#DATE ;设定日
MOV A,DATE_BUFFER
MOVX @DPTR,A
MOV DPTR,#MONTH ;设定月
MOV A,MONTH_BUFFER
MOVX @DPTR,A
MOV DPTR,#YEAR ;设定年
MOV A,YEAR_BUFFER
MOVX @DPTR,A
MOV DPTR,#REG_B ;设定SET=0,BCD模式,24小时制
MOV A,#00000010B
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
读时间子程序
READTIME: ;读时间
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#REG_A ;读取寄存器 A
RTCBUSY: MOVX A,@DPTR
JB ,RTCBUSY ;测试UIP位,如果UIP=0;则执行以下程序 MOV DPTR,#SECOND ;读取秒资料
MOVX A,@DPTR
MOV SECOND_BUFFER,A
MOV DPTR,#MINUTE ;读取分数据
MOVX A,@DPTR
MOV MINUTE_BUFFER,A
MOV DPTR,#HOUR ;读取时资料
MOVX A,@DPTR
MOV HOUR_BUFFER,A
MOV DPTR,#DATE ;读取日资料
MOVX A,@DPTR
MOV DATE_BUFFER,A
MOV DPTR,#MONTH ;读取月资料
MOVX A,@DPTR
MOV MONTH_BUFFER,A
MOV DPTR,#YEAR ;读取年资料
MOVX A,@DPTR
MOV YEAR_BUFFER,A
POP ACC
POP DPH
POP DPL
RET
数码管显示子程序
DISLED: PUSH DPH ;保存现场
PUSH DPL
PUSH ACC
MOV A,#LEDWR0 ;置显示起始地址
ADD A,R4 ;加位置偏移量
MOV DPTR,#ZZLG7290
MOVX @DPTR,A ;设定显示位置
MOV DPTR,#TAB ;置显示常数表起始位置
MOV A,R5
MOVC A,@A+DPTR ;查表
MOV DPTR,#DZLG7290
MOVX @DPTR,A ;显示数据
POP ACC ;恢复现场
POP DPL
POP DPH
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
DB 40H,00H
END
4 调试过程及数据分析
KeiL调试
启动KEIL软件,对每个写好的主程序和子程序进行单步调试,直到程序没有错误为止。
实验台调试
根据程序的设计在试验箱上分别连接好各个端口的连接线,用串口线把计算机和试验箱的仿真头连接好,打开试验箱,根据要求完成接线。
如下所示:(1)系统各跳线器处在初始设置状态,8P数据线将CPU模块的P11F3和P1F3连接,P12F3和P0F3连接用导线对应连接时钟模块的CS_887、INT887、ALE、/WR、/RD到CPU模块的P27、P32、ALE、/WR、/RD,时钟模块的复位信号/RESET接+5V,F4区域的CS_ZLG7290接CPU模块的P26, RESET接电平开关的K0(开关打到下面)。
(2)启动PC机,打开Keil uVision2软件,加载程序,编译,下载,运行。
(3)LED将显示实时时钟,且一秒钟更新一次。
单击Keil软件上的“Start/Stop Debug Session”按钮,再单击“RUN”按钮,运行程序。
观察试验箱上出现的效果,分析程序的对错,直到调试出正确的结果。
5 结果分析
实验的结果实现了预期的效果,开关按下的时候显示年月日,开关没有按下显示的是时分秒。
并能够在断电的情况下,通过时钟芯片中的锂电池提供电源,保证时钟能够继续计时而不丢失原来的数据。
各个时标的进位和周期频率都很没有出现错误。
6心得体会
经过两个周的努力,我们顺利完成了基于89C51单片机控制的电子时钟日历LED显示系统的设计,所完成的工作主要包括以下几个方面:
(1)准备阶段的工作
课程设计的前两天,我们通过网络和图书馆里相关的书籍,了解单片机微控制器的主要作用和使用方法,以及应用等等。
通过网络了解了PCF8563的功能和应用。
了解了用LED数码管显示电子时钟日历的工作原理、分析LED显示系统。
详细了解了AT89C51 单片机应用中的数据转换显示、数码管显示原理。
(2)程序设计
我们通过了一个周的时间完成了程序的设计。
在设计过程中,我们通过网络和相关图书学到了很多知识,并通过无数遍的调试,我们完成了主程序,初始化程序,读写显示程序等等。
(2)系统硬件设计
本次的设计基于AT89C51单片机的LED显示系统主要由89C51单片机处理器控制、位扫描控制电路、端码显示驱动电路及与计算机的接口电路组成。
此外还包括一些基本的电路如电源电路,晶振电路,及接口电路。
由于PCF8563为一款优秀的时钟芯片,因此本次设计使用了动态扫描方式进行LED显示,在显示驱动电路中用4线——16线的译码器ZLG7290进行显示译码。
8参考文献
[1] 徐维祥,刘旭敏.单片微型机原理与应用.辽宁:大连理工大学出版社,2003
[3] 梅丽凤,王艳秋.单片机原理及接口技术.北京:清华大学出版社,2005
[2] 王幸芝,钟爱琴,王闪.AT89系列单片机原理与接口技术.北京:北京航空航天大学出版社,2004
[4] 付家才.单片机控制工程实践技术[M]. 北京:化学工业出版社,
[5] 潘新民.微型计算机控制技术 [M].北京:人民邮电出版社,
[6] 胡汉才.单片机原理及其接口技术.北京:清华大学出版社, 1995
[7] 杨文龙.单片机原理及应用.陕西:西安电子科技大学出版社,1999。