变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),
不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当
/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于
施加12V编程电源(VPP)。
3 控制系统的硬件设计
3.1 单片机型号的选择
通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。
89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8
位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的
MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在
单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。
3.2 数码管显示工作原理
数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为
8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接
在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,
10
其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
图3.1 共阴数码管
3.3 键盘电路设计
该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,
该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。达到时间调节的目的。
图3.2 多功能控制键
11
3.4 整个电路原理图
图3.3 系统电路原理图 4 控制系统的软件设计
4.1 程序设计
本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、
延时程序四大模块。在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。
定时计数中断程序:
MOV TMOD,#00H ;写控制字 MOV TH0,#0F0H ;写定时常数 MOV TLO,#0CH
SETB TR0 ;启动T0
12
SETB ETO ;允许T0中断 SETB EA ;开放CPU中断 AJMP $
时间调整程序:
SETMM: cLR ET0 ;关定时器T0中断 CLR TR0 ;关闭定时器T0 LCALL DL1S ;调用1秒延时程序
JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显
示(省电)
MOV R2,#06H ;进入调时状态,赋闪烁定时初值 SETB ET1 ;允许T1中断 SETB TR1 ;开启定时器T1
SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待 SETB 00H ;键释放,分调整闪烁标志置1 SET4: JB P3.7,SET3 ;等待键按下
LCALL DL05S ;有键按下,延时0.5秒
JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态 MOV R0,#77H ;按下时间小于0.5秒加1分钟操作 LCALL ADD1 ;调用加1子程序 MOV A,R3 ;取调整单元数据 CLR C ;清进位标志
CJNE A,#60H,HHH ;调整单元数据与60比较
HHH: JC SET4 ;调整单元数据小于60转SET4循环 LCALL CLR0 ;调整单元数据大于或等于60时清0 CLR C ;清进位标志 AJMP SET4 ;跳转到SET4循环
CLOSEDIS:SETB ET0 ;省电(LED不显示)状态。开T0
中断
SETB TR0 ;开启T0定时器(开时钟) CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
13
LCALL DISPLAY ;有键按下,调显示子程序延时削抖 JB P3.7,CLOSE ;是干扰返回CLOSE等待 WAITH: JNB P3.7,WAITH ;等待键释放
LJMP START1 ;返回主程序(LED数据显示亮) SETHH: CLR 00H ;分闪烁标志清除(进入调小时状
态)
SETHH1: JNB P3.7,SET5 ;等待键释放 SETB 01H SET6: JB P3.7,SET7 LCALL DL05S JNB P3.7,SETOUT MOV R0,#79H LCALL ADD1 MOV A,R3 ; CLR C ;
CJNE A,#24H,HOUU
HOUU: JC SET6 LCALL CLR0 AJMP SET6 SETOUT: JNB P3.7,SETOUT1 释放
LCALL DISPLAY JNB P3.7,SETOUT CLR 01H CLR 00H CLR 02H CLR TR1 CLR ET1 SETB TR0 SETB ET0
14
;小时调整标志置1 ;等待按键按下 ;有键按下延时0.5秒
;按下时间大于0.5秒退出时间调整 ;按下时间小于0.5秒加1小时操作 ;调加1子程序 ;计时单元数据与24比较
小于24转SET6循环 ;大于或等于24时清0操作 ; 跳转到SET6循环
;调时退出程序。等待键
;延时削抖
;是抖动,返回SETOUT再等待 ;清调小时标志 ;清调分标志 ;清闪烁标志 ;关闭定时器T1 ;关定时器T1中断 ;开启定时器T0
;开定时器T0中断(计时开始)