内容正文:
项目八 实时时钟
任务一 矩阵键码操作
任务二 利用定时器设计可校时时钟
任务三 使用 I 2 C 总线
任务四 掌握时钟芯片 PCF8563 的功能
任务五 利用 PCF8563 设计多功能时钟
返回
1
任务一 矩阵键码操作
一、任务描述
利用 P3 口完成矩阵式键盘的设计,通过对矩阵式键盘的认识及使用达到以下目的:了解矩阵式键盘的工作原理,键盘的编码,键盘的工作方式和键盘使用时的编程方法;掌握多功能键盘的设计并能处理按键编程中的特殊问题;了解单片机人机对话中的输入设备的基本使用方法;掌握键盘识别的多种编程方法。
二、矩阵式键盘基础知识
矩阵式键盘适用于按键数量较多的场合,它由行线和列线组成,按键位于行、列的交叉点上。
下一页
返回
任务一 矩阵键码操作
如图 8−1 所示,一个 4×4 的行、列结构可以构成一个含有 16 个按键的键盘。很明显,在按键数量较多的场合,矩阵键盘与独立键盘相比要节省很多 I/O 口。
1. 矩阵键盘的工作原理
按键设置在行、列线的交点上,行、列线分别连接到按键的开关两端。行线通过上拉电阻接到+5 V 上。平时无按键动作时,行线处于高电平状态,而当有按键按下时,列线电平状态将由与此行线相连的列线电平决定。由于矩阵键盘中行、列线为多键共用,各按键均影响该键所在行和列的电平,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。
上一页
下一页
返回
任务一 矩阵键码操作
2. 按键的识别方法
1)扫描法
当键被按下时,让所有列线处于低电平,按键所在行电平将被拉成低电平,根据此行电平的变化,便能判定此行有键被按下。为了判定是哪一列的键被按下,可让列线依次处于低电平,而其余列线处于高电平,按键所在的列电平将被拉成低电平,根据此列电平的变化,便能判定按键所在的列。
根据上面的分析,很容易得出矩阵键盘按键的识别方法,此方法分两步进行:
第一步:识别键盘是否有键闭合。
上一页
下一页
返回
任务一 矩阵键码操作
让所有列线均置低电平,检查各行线电平是否有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下(实际编程时应考虑按键抖动的影响,通常总是采用软件延时的方法进行消抖处理)。
第二步:识别具体闭合的按键(亦称之为扫描法)。逐列置低电平,其余各列置高电平,检查各行线电平的变化,则可确定此行被按下按键的行和列。
2)线反转法
扫描法要逐行扫描查询,当被按下的键处于最后一列时,则要经过多次扫描才能最后获得此按键所处的行列值。
上一页
下一页
返回
任务一 矩阵键码操作
而线反转法则显得很简练,无论被按键是处于第 1 列或是最后一列,均只需经过两步便能获得此按键所在的行列值,线反转法的原理如图 8−2 所示。
第一步:将行线编程为输入线,列线编程为输出线,并使输出线输出为全零电平,则行线中电平由高到低所在行为按键所在行。
第二步:同第一步完全相反,将行线编程为输出线,列线编程为输入线,并使输出线为全零电平,则列线中电平由高到低所在列为按键所在列。
综合一、二步的结果,可确定按键所在行和列,从而识别出所按的键。
上一页
下一页
返回
任务一 矩阵键码操作
假设 3 号键被按下,那么第一步即在 P1.0~P1.3 输出全 0,读入 P1.4~P1.7 位,结果 P1.7=0,而 P1.4、P1.5 和 P1.6 均为 1,说明第一行有键被按下;第二步让 P1.4~P1.7 位输出全 0,然后读入 P1.0~P1.3 位,结果 P1.0=0,而 P1.1、P1.2 和 P1.3 均为 1,说明第 4 列有键被按下。综合一、二步,即第 1 行第 4 列按键被按下,此按键即 3 号键。
3. 键盘的工作方式
键盘的工作方式有三种,即:编程扫描、定时扫描和中断扫描工作方式。
上一页
下一页
返回
任务一 矩阵键码操作
4. 按键中应注意的问题
1 )多功能键
在单片机应用系统中,为了简化硬件线路,用一个按键通过软件来实现多个按键的功能,称为多功能键。
2 )复合键
复合键是用软件实现一键多功能的另一个途径。所谓复合键,就是两个或两个以上的键的联合,当这些键同时按下的时候,才能转去执行相应的功能程序。
上一页
下一页
返回
任务一 矩阵键码操作
3 )重键
实际按键操作中,如果无意同时或先后按下两个以上的键,这时就很难确认哪个键按下是有效的,对其处理完全由软件编程决定,通常总是采取单键按下有效,多键同时按下无效的策略。
4 )连击
所谓连击,就是一次按键产生多次击键的效果。通常我们对键盘的编程中,都有等待按键释放的处理,其出发点就是为了消除连击,使得一次按键只产生一次键功能的执行。
上一页
下一页
返回
任务一 矩阵键码操作
但连击也是可以利用的。例如我们设计了一个时钟调整功能键(具体可参考任务四),用于设定当前时间中的分钟,其初始状态是 0 ,这时如果要调到 25 分时,则必须不断地击此功能键 25 次,显得很烦琐。如果利用连击,则只需按住此键不放,让其计数到所需值后再释放此键即可。
三、矩阵式键盘接口实例
1. 硬件电路
图 8 − 6 中,采用 P3.2 和 P3.3 作列线, P3.4 、 P3.5 和 P3.6 做行线构成 2×3 的键盘矩阵,系统晶振为 12 MHz 。系统采用 1 个共阳极数码管以静态显示方法显示出当前按键的键号。
上一页
下一页
返回
任务一 矩阵键码操作
其中 P0 口做段码输出, P2.0 做数码管的位码控制端。采用线反转法对矩阵式键盘进行编程,当检测到相应的按键按下时,该数码管上面同时显示出相应的键号。键盘编码以顺序编码,从 01H 到 06H 代表 KEY1 到 KEY6 的 6 个按键。
2. 编程思路分析
按照矩阵式键盘原理图分析,首先采用编程扫描的工作方式来监视键盘有无输入信号,当检测到有键闭合时,采用线反转法来确定具体的按键,然后判断按键的键号并显示在数码管上。数码管采用静态显示,显示程序用一个子程序来完成。在检测按键时,不采用多功能键和复合键;在重键设计中,采取单键按下有效,多键同时按下无效的策略;同时不考虑按键的连击情况。
上一页
下一页
返回
任务一 矩阵键码操作
3. 软件流程图
整个程序流程图如图 8 − 7 所示。
4. 汇编源程序
5. 程序分析
( 1 )该程序的执行结果是:上电后系统显示“ 0 ”,当有按键时,显示按键的键号。
( 2 ) MAIN: MOV SP,#6FH
MOV R0,#7FH ;初始化,用于设定 SP 初值和清内部 RAM 为零
CLR A
上一页
下一页
返回
任务一 矩阵键码操作
MAIN_2:MOV @R0,A
DJNZ R0,MAIN_2
这一段指令用于给内部 RAM 单元清零。 R0 中初始值为 7FH , A 中内容为 0 ,把 A 中内容送给 R0 中内容为地址的单元( 7FH )中,实际相当于清零 RAM 单元。
上一页
返回
任务二 利用定时器设计可校时时钟
时钟是大家比较熟悉的内容。在单片机系统中,既可以利用单片机内部定时器实现计时设计时钟,也可以利用专用时钟芯片设计具有复杂功能的时钟。本任务利用单片机内部定时器进行定时,设计具有基本时钟功能的简易时钟。
一、任务描述
本时钟具有时、分、秒计时显示功能,并可校时。利用六位数码管实现计时显示,利用矩阵键盘进行校时。
下一页
返回
任务二 利用定时器设计可校时时钟
二、程序设计
( 1 )利用 T0 进行时钟计时定时,利用 T1 进行中断显示定时。
( 2 )利用矩阵键盘进行校时: 1 键第一次闭合启动校时,第二次闭合重启计时;
2 键闭合一次小时加 1 , 5 键闭合一次小时减 1 ;
3 键闭合一次分钟加 1 , 6 键闭合一次分钟减 1 。
( 3 )利用 6 位数码管进行时钟“时”“分”“秒”显示。
上一页
返回
任务三 使用 I 2 C 总线
一、任务描述
在实际生产使用和现场开发中, I 2 C 总线是一种通用的通信方式。本节通过对 I 2 C 总线协议的学习,掌握 I 2 C 总线的时序、原理及应用。结合 I 2 C 总线的虚拟接口程序,完成对各类I 2 C 总线器件的读写操作。
二、I 2 C 总线
1. I 2 C 总线器件
I 2 C 总线( Inter Integrated Circuit BUS )是 Philips 公司推出的二线制串行扩展总线,总线上扩展的外围器件及外设接口通过总线寻址。
下一页
返回
任务三 使用 I 2 C 总线
目前单片机厂商推出了许多带有 I 2 C 总线接口的单片机和许多具备 I 2 C 总线的外部接口芯片。 I 2 C 总线通用外围扩展器件有 SRAM 、 EEPROM 、 ADC 、 DAC 、 RTC 、 I/O 口、 DTMF等。外围设备模块有 LED 驱动控制器构成的 LED 显示器,各种 LCD 驱动控制器构成的段式、图形点阵、字符点阵液晶显示器等。通过 I 2 C 总线通用 I/O 口器件可构成许多通用接口如键盘、码盘、打印机接口和 LCD 接口等。
2. I 2 C 总线工作原理
I 2 C 总线由数据线 SDA 和时钟线 SCL 构成。总线上挂接单片机、外围器件和外设接口。
上一页
下一页
返回
任务三 使用 I 2 C 总线
所有挂接在 I 2 C 总线上的器件和接口电路都应具有 I 2 C 总线接口,而且所有的 SDA 和 SCL 同名端相连。采用 I 2 C 总线的系统结构如图 8 − 8 所示。
I 2 C 总线通常为主从工作方式。系统中只有一个主器件(单片机),总线上其他器件都是具有 I 2 C 总线的外围从器件。在主从工作方式中,主器件启动数据的发送(发出启动信号),产生时钟信号,发出停止信号。为了实现通信,每个从器件均有唯一一个器件地址,具体地址由 I 2 C 总线委员会分配(参见表 8 − 1 )。
上一页
下一页
返回
任务三 使用 I 2 C 总线
三、I 2 C 总线串行外围扩展
1. I 2 C 总线外围扩展
I 2 C 总线为双向同步串行总线,内部为双向传输电路,总线端口为开漏结构,故总线上必须有上拉电阻 R,上拉电阻通常选择 5 ~ 10 kΩ 。
2. I 2 C 总线节点寻址方法
挂接到总线上的所有外围器件、外设接口都是总线上的节点。在任何总线上只有一个主控器件(主节点)实现总线的控制操作,总线上的其他从节点都有一个固定的节点地址。
上一页
下一页
返回
任务三 使用 I 2 C 总线
I 2 C 总线上的单片机都可以成为主节点, I 2 C 总线上所有的外部器件都有规范的器件地址。器件地址由 7 位组成,它和 1 位方向位构成了 I 2 C 总线器件的寻址 SLA 。
器件地址( DA3 ~ DA0 ):是 I 2 C 总线外围器件固有的地址编码,器件出厂时就已给定。
例如, I 2 C 总线 EEPROM : AT24CXX 的器件地址为 1010 , 4 位 LED 驱动器 SAA1064 的器件地址为 0111 。
引脚地址( A2A1A0 ):是由 I 2 C 总线外围器件地址端口 A2 、 A1 、 A0 在电路中接电源或接地的不同,形成的地址数据。
上一页
下一页
返回
任务三 使用 I 2 C 总线
数据方向( R/W ):数据方向位规定了总线上主节点对从节点的数据传送方向, R 表示接
收, W 表示发送。
表 8 − 1 表示了一些常用外围器件的节点地址和寻址字节。
3. I 2 C 总线时序及工作方式
( 1 ) I 2 C 总线上的数据传送时序。
I 2 C 总线上数据传送时序如图 8 − 9 所示。图 8 − 9为 I 2 C 总线上进行一次数据传输的通信格式。总线上传送的每一帧数据均为一个字节。但启动 I 2 C 总线后,传送的字节数没有限制,只要求每传送一个字节后,对方回应一个应答位。在发送时,首先发送的是数据的最高位。
上一页
下一页
返回
任务三 使用 I 2 C 总线
每次传送开始有起始信号,结束时有停止信号。
I 2 C 总线为同步传输总线,总线信号完全与时钟同步。 I 2 C 总线上与数据传送有关的信号有起始信号( S )、终止信号( P )、应答信号( A )及位传送信号等。
( 2 ) I 2 C 总线工作方式。
发送起始信号( (S )
在利用 I 2 C 总线进行一次数据传输时,首先由主机发出启动信号启动 I 2 C 总线。在SCL 为高电平期间, SDA 出现下降沿则为启动信号。具有 I 2 C 总线接口的从器件会检测到该信号。
上一页
下一页
返回
任务三 使用 I 2 C 总线
发送寻址信号
主机发送启动信号后,再发出寻址信号。器件地址有 7 位和 10 位两种,这里只介绍 7位地址寻址方式。寻址信号由一个字节构成,高 7 位为地址位,最低位为方向位,用以表明主机与从器件的数据传送方向。方向位为“ 0 ”,表明主机对从器件的写操作;方向位为“ 1 ”时,表明主机对从器件的读操作。
应答信号( (A )
I 2 C 总线协议规定,每传送一个字节数据(含地址及命令字)后,都要有一个应答信号,以确定数据传送是否正确。
上一页
下一页
返回
任务三 使用 I 2 C 总线
应答信号由接收设备产生,在 SCL 信号为高电平期间,接收设备将 SDA 拉为低电平,表示数据传输正确,产生应答。
数据传输
主机发送寻址信号并得到从器件应答后,便可进行数据传输,每次一个字节,但每次传输都应在得到应答信号后再进行下一字节传送。
非应答信号
当主机为接收设备时,主机对最后一个字节不应答,以向发送设备表示数据传送结束。
上一页
下一页
返回
任务三 使用 I 2 C 总线
发送停止信号( (P) )
在全部数据传送完毕后,主机发送停止信号,即在 SCL 为高电平期间, SDA 上产生一上升沿信号。
4. 主方式下的数据操作格式
I 2 C 总线的数据操作格式是以条块图解形式来表达 I 2 C 总线的一次完整的数据传送过程。I 2 C 总线上一次完整的数据传送如图 8 − 9所示。
上一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
一、任务描述
利用 I 2 C 总线虚拟接口程序来完成对时钟芯片 PCF8563 的基本读写操作,同时掌握PCF8563 寄存器的使用操作,能够使用 PCF8563 完成时钟读写和定时控制操作。
二、PCF8563 基本介绍
PCF8563 是 Philips 公司推出的一款工业级内含 I 2 C 总线接口功能的具有极低功耗的多功能时钟/日历芯片,具有定时器功能、多种报警功能、时钟输出功能及中断输出功能等。由于采用 I 2 C 总线接口方式,应用电路简捷,提高了电路的工作可靠性,目前已被广泛应用于电表、水表、煤气表、电话、传真等仪器仪表领域。
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
1. PCF8563 的特点
① 宽电压范围:工作电压为 1.0~5.5 V。
② 低休眠电流:典型值为 0.25 μA。
③ 可编程时钟输出:可输出时钟频率为 32.768 kHz、1 024 Hz、32 Hz、1 Hz。
④ 具有四种报警功能和定时器功能。
⑤ 内含复位电路、振荡器电路和掉电检测电路。
⑥ 开漏中断输出。
⑦ 400 kHz I 2 C 总线工作方式:其从地址为读 0A3H,写 0A2H。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
2. PCF8563 的主要功能
PCF8563 主要由 16 个 8 位寄存器、一个可自动增量的地址寄存器、一个内置 32.768 kHz
的振荡器(带有一个内部集成的电容)、一个分频器(用于给实时时钟 RTC 提供源时钟)、一个可编程时钟输出、一个定时器、一个报警器、一个掉电检测器和一个 400 kHz I 2 C 总线接口组成。其结构如图 8−10 所示。
3. PCF8563 的引脚功能
PCF8563 的引脚排列如图 8−11 所示,各引脚功能见表 8−2。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
4. PCF8563 的工作原理
(1) PCF8563 寄存器。
PCF8563 有 16 个 8 位寄存器。内存地址 00H~01H 用于控制寄存器和状态寄存器,地址02H~08H 用于时间寄存器(秒~年寄存器),地址 09H~0CH 用于报警寄存器(定义报警条件),地址 0DH 控制 CLKOUT 引脚的输出频率,地址 0EH 和 0FH 分别用于定时器控制寄存器和定时器寄存器。秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为 BCD,星期和星期报警寄存器不以 BCD 格式编码。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
表 8−3 列出各寄存器概况及对应的内存地址和功能,同时列出了它们的 BCD 格式编码。
表中“−”表示无效位,“0”表示此位应置逻辑。
(2) 读写 PCF8563 寄存器。
在 I 2 C 总线中,对 I 2 C 总线器件内部存储单元读写时,除了要寻址该器件的节点地址外,还须指定存储器读写的子地址(SUBADDR),按照 PCF8563 的器件手册,读、写 N 个字节的数据操作格式如下。
(3) PCF8563 控制/状态寄存器(00H~01H)。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
PCF8563 控制/状态寄存器为 RAM 空间的 00H~01H 地址单元,I 2 C 总线的主器件可对其读、写以实现对它的控制。其控制/状态寄存器格式如表 8−4 所示。
(4) PCF8563 时间寄存器(02H~08H)。
PCF8563 时间寄存器为 RAM 空间的 02H~08H 地址单元,计数器寄存器的各个单元中存放相应的计时 BCD 码,如表 8−5 所示。
5. PCF8563 与 I 2 C 总线
PCF8563 使用 I 2 C 总线传送数据。PCF8563 可以作为一个从接收器或从传送器,此时的时钟信号线 SCL 只能作输入信号线,数据信号线 SDA 则作为一条双向信号线。有关 I 2 C 总线的信息请参看上一节。PCF8563 的从地址为读 0A3H,写 0A2H。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
三、PCF8563 典型应用电路
图 8−12 是一个 PCF8563 典型电路,图中 BT、D14、D15 构成了 PCF8563 的掉电保护电路。C 13 是微调电容,大约几十 pF,通过可调电容对石英晶片频率进行小范围内调节。C 11 、C 12 是滤波电容。和单片机连接只有 3 根线:时钟线(即 SCL,连到单片机 P1.4 引脚),数据线(即 SDA,连到单片机 P1.5 引脚),中断线(即 INT ,连接到单片机引脚 P1.7 )。
四、PCF8563 应用实例
利用 PCF8563 设计一个简易实时时钟,读出 PCF8563 内部寄存器的数据(时、分、秒)并显示到数码管上。其电路如图 8 − 13 所示。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
1. 硬件电路图
利用 AT89S51 和 PCF8563 以 I 2 C 总线接口相连接,其中 P1.4 用作 SCL 虚拟 I 2 C 总线时钟线, P1.5 用作 SDA 虚拟 I 2 C 总线数据线, P1.7 用作 PCF8563 内部中断接口。用 P0口作段码输出口,用 P2.0 ~ P2.5 口作位码输出口来完成 6 位动态 LED 显示,晶振为12 MHz 。
2. 编程思路
程序总共分为 5 个模块:
( 1 ) 初始化程序 MAIN_INIT 。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
主要是把内部 RAM 清零和 SP 初始化,设定显示缓冲区和显示指针初值,设定时钟初始值(设定为 2008 年 10 月 20 日星期一下午 2 点( 14 点) 30 分 00 秒)。写 PCF8563 时钟程序WR_8563 :写入设定好的时钟初始值。
( 2 ) 读时钟程序 RD_8563 。
将秒、分、时三个字节的时间信息读出并整理后放入 MRD 为首址的接收缓冲区中。
( 3 ) 刷新程序 SHUAXIN 。
将秒、分、时三个字节由压缩 BCD 码转换成非压缩 BCD 码,同时存放在显示缓冲区DISBUF 中。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
( 4 ) 动态刷新显示子程序 DISPLAY 。
主程序采用每 2 ms 调用一次显示程序,用主程序的运行时间来代替常用的延时子程序。6 个数码管从右向左的位码控制分别是 P2.5 ~ P2.0 ,所以从最左边向右边移位显示的位码初始值 WEI_MA 应为 0DFH ,中间位码的改变以 RR 来完成。数码管所对应的缓冲区分别是30H ~ 35H ,其中 30H 对应最左边的数码管,也就是 30H 对应的缓冲区中内容为小时高位的内容。
( 5 ) 延时子程序 DEL_2 ms 。
因为主程序一个运行周期可能不到 2 ms ,所以在主程序循环中加上一段延时子程序,用以使得主程序的运行周期达到 2 ms 。此时间可根据实际情况来调整(本程序时间约为 1.5 ms )。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
在显示子程序中,为了表明时、分、秒的区别,把时和分的个位的数码管灯点亮。
3. 软件流程图
主程序流程图如图 8 − 14 所示:
4. 汇编源程序
5. 程序分析
( 1 ) 该程序的执行结果是:上电后系统显示“ 14.30.00 ”,表示当前时间并按每秒计时。
上一页
下一页
返回
任务四 掌握时钟芯片 PCF8563 的功能
( 2 ) 主程序采用每 2 ms 调用一次显示程序,用主程序的运行时间来代替常用的延时子程序。因为主程序一个运行周期可能不到 2 ms ,所以在主程序循环中加上一段延时子程序(本程序中大约为 1.5 ms ),用以使得主程序的运行周期达到 2 ms 。
上一页
返回
任务五 利用 PCF8563 设计多功能时钟
一、任务描述
依据前面单元所学到的知识,利用 51 单片机来虚拟出 I 2 C 总线接入带 I 2 C 总线的时钟接口器件 PCF8563 ,再结合键盘矩阵和 LED 显示设计并制作出具有如下功能的实时时钟:
( 1 ) 自动计时,由 6 位 LED 显示器显示时、分、秒。
( 2 ) 具备校准功能,可以由按键设置当前时间。
( 3 ) 一年时差不超过 5 分钟。
( 4 ) 可以显示年、月、日。
( 5 ) 可以通过按键调整当前年、月、日。
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
二、总体方案分析
1. 计时方案
( 1 ) 方案一:软件控制。
利用 51 单片机内部的定时 / 计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能够使读者在定时 / 计数器的使用、中断及程序设计方面得到锻炼与提高,但程序编写麻烦,并且由于技术的发展,以及设计思路的更新,这种方法在实际生产使用和现场开发中已不多采用。
( 2 ) 方案二:采用实时时钟芯片。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
针对计算机系统对实时时钟功能的普遍需求,各大芯片生产厂家陆续推出了一系列的实时时钟集成电路,如 PCF8563 、 DS1287 、 DS1302 等。这些芯片具备年、月、日、时、分、秒计时功能和多点定时功能,硬件接口方便,程序编写简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能。
本系统将采用具有 I 2 C 总线接口的实时时钟器件 PCF8563 来实现时钟的计时。
2. 键盘方案
键盘有两种设计方式:独立式按键和矩阵式键盘,本系统中用到了 5 个按键,一个功能键,一个设定键,一个上翻键,一个下翻键,一个确定键,并且采用本项目任务一中介的2×3 矩阵式键盘来完成设置。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
3. 显示方案
对于实时时钟而言,显示显然是另一个重要的环节,本系统采用 6 位 LED 动态显示。
三、硬件设计
1. 电路原理图
实时时钟电路如图 8 − 15 所示,实时时钟芯片采用 PCF8563 ,配备 6 位 LED 显示和 6 个矩阵式接口键盘;报警电路由 P1.3 控制蜂鸣器来完成。
2. 系统工作分析
本实时时钟具备以下功能。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 1 ) 时钟显示。
系统正常运行时, 6 位 LED 数码管从左到右依次显示时、分、秒,采用 24 小时计时。显示时间时时、分、秒之间用 LED 数码管的 dp 点隔开。
( 2 ) 按键控制。
采用 5 个矩阵式键盘,一个功能键,一个设定键,一个上翻键,一个下翻键,一个确定键,用来设定时间。在整个程序设计中采用了一键多功能的作用,在软件中实现一个按键依据按下次数的不同实现不同的功能。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 3 ) 时间显示。
上电后,系统自动进入正常时间显示模式,从当前时间开始计时。当按下功能键时,进入到年月日显示模式,显示当前的年月日。进入调整时间模式时,只显示当前要调整的秒、分或时,没有被调整的显示暗码。
( 4 ) 时间调整。
按下功能键,进入时间调整模式,系统只显示秒的内容,其余 4 位 LED 均处于全暗状态,等待按键设置。此时按动上翻键后秒将会加一,此时按动下翻键后秒将会减一。按下确认键后,保存当前的设定值到 PCF8563 中,并处于当前模式。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
若再按动设定键则用来调整分钟,此时时钟和秒的 4 位 LED 指示均全暗,分钟显示当前的分钟数,按上翻、下翻键后可以对分钟进行增一和减一调整,按下确认键后,保存当前的设定值到 PCF8563 中。再按下设定键则用来调整时,此时秒钟和分钟的 4 位 LED 指示均全暗,时显示当前的小时数,按上翻下翻键后可以对小时进行增一或减一调整,按下确认键后,保存当前的设定值到 PCF8563 中,并处于当前模式。年月日的调整模式以及报警时间设定模式的操作与时间调整模式相似。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
四、软件设计
1. 软件设计思路
( 1 ) 定时动态扫描。
通常采用的循环动态扫描方法在使用时必须反复调用循环显示,甚至在调整时间的按键程序中也应当常调显示子程序,否则显示在按键不松的情况下可能会出现短暂的“黑屏”现象,这种动态显示方式降低了 CPU 的工作效率。
系统中采用定时器来完成动态扫描显示。用 T0 定时器设定 2 ms 的时间间隔,每次定时时间到时就输出一位 LED 显示信号,定时器每中断 6 次后循环到第一位 LED 显示。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
在本项目采用定时器 0 用作显示定时,按方式 1 工作,每隔 2 ms 溢出中断一次。
( 2 ) 按键设定程序。
本任务中的按键只有 5 个,所以每个按键的功能就比较多,即按键都是多功能键,其按键设定子程序设计就比较复杂。下面以表格形式(见表 8 − 6 )列出按键的各个功能, FUNCOU和 SETCOU 用来表示各个按键所处的不同状态。
( 3 ) 主程序。
初始化与按键控制,读时间并对定时时间进行判断。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
主程序初始化后,就开始进行对PCF8563 的读时间;读完后送显示缓冲区,然后开始依次扫描 6 个按键来判别是否进入相应的按键子程序中,完成主程序循环。
2. 系统资源分配
为方便阅读程序,先对片内 RAM 及标志位的分配加以说明。
( 1 ) DISBUF :显示缓冲区。使用( 30H ~ 35H ) 6 个 RAM 作 LED 的显示缓冲区,每一个缓冲区对应一个 LED ,在定时时间到时就把 6 个缓冲区中的数送给相应的 LED 显示。
( 2 ) MRD :接收数据缓冲区首址。使用( 60H ~ 6AH ) 10 个单元用来存放从 PCF8563中读出来的时间信息。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 3 ) MTD :发送数据缓冲区首址。使用( 50H ~ 5AH ) 10 个单元用来存放要写入 PCF8563中的时间信息。
( 4 ) SET_MRD :当前时间缓存区首址。使用( 40H ~ 4AH ) 10 个 RAM 单元,在按键设定程序中用来保存当前从 PCF8563 中读出来的时间,利用上翻下翻按键来修改其中的值,当确认按键按下时,把 SET_MRD 中的信息备份到 MTD 并写入 PCF8563 中。
( 5 ) FUNCOU 、 SETCOU ( 3AH 、 3BH ):两个计数器。用于按键设定子程序中对当前功能和设定两个按键的按下次数进行计数,即表示当前处于何种设定状态。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 6 ) KEY_MA ( 39H ):用于保存当前按键的键码,以确定是哪个按键被按下。
( 7 ) KEY_F0 ( 20H.0 ):用于表示当前是否进入按键设定,其值 =1 表示已进入按键设定。
初值为 0 ,并且在按键功能设定完后清零。
( 8 ) KEY_F1 ( 20H.1 ):用于其值 =1 时表示功能键的第一次按下,其他情况下为 0 ;初
值为 0 ,并且在按键功能设定完后清零。
3. 软件流程图
根据上述工作流程,软件设计可分为以下几个功能模块。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 1 ) 主程序:主要包括初始化程序、 8563 时钟写程序、 8563 读时钟程序、显示刷新子程序、按键测试子程序。流程图如图 8 − 16 所示。
( 2 ) 初始化程序:包括定时器 0 、内部 RAM 、 I/O 、显示缓冲区、计数单元等的初始化。
( 3 ) 定时器程序:为定时器 0 中断服务子程序,主要是完成循环显示。
( 4 ) 按键扫描及设定:主程序中由按键扫描程序判定有无键按下,当有按键按下时调用按键设定子程序。按键设定子程序主要用来调整时间、调整年月日和调整报警时间。按键调整流程如图 8 − 17 所示。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
五、汇编源程序
六、程序分析
( 1 ) 该程序的执行结果是:上电后系统显示“ 14.30.00 ”,表示当前时间,并按每秒计时。
当有按键时,根据按键的不同显示不同的内容。
( 2 ) 主程序采用 T0 中断做显示程序,定时器定时 2 ms ,定时时间常数是 F830H ,所以在主程序里或按键调整时可以不考虑按键所引起的“黑屏”问题。
上一页
下一页
返回
任务五 利用 PCF8563 设计多功能时钟
( 3 ) 程序中采用了三个显示刷新子程序,当正常显示时使用 SHUAXIN 子程序,用于显示正常时间; SHAUXINA 主要用于按键调整时时分秒的显示刷新; SHUAXINB 主要用于按键调整时年月日的显示刷新。
上一页
返回
图 8 - 1
返回
图 8 - 2
返回
图 8 - 6
返回
图 8 - 7
返回
图 8 - 8
返回
表 8 - 1
返回
图 8 - 9
返回
图 8 - 10
返回
图 8 - 11
返回
表 8 - 2
返回
表 8 - 3
返回
表 8 - 4
返回
表 8 - 5
返回
图 8 - 12
返回
图 8 - 13
返回
图 8 - 14
返回
图 8 - 15
返回
表 8 - 6
返回
图 8 - 16
返回
图 8 - 17
返回
$$