3. 各模块参数传递图
AOVEROVER外部中断模块计时模块扫描键盘模块OVERASEC2MIN2ASEC1 MIN1A模式选择模块BIT0BIT1BIT2BIT3DOT数码管显示模块 图 1系统参数传递图
4. 分析与计算
LED闪烁频率最低为0.5Hz,周期2s,每1s对LED取反可实现。为了能产生一秒定时,对T0、T1进行8×48才行。T2用来控制扫描数码管,不要求定时时间太长。且T2最大分频为8×12,本设计选择对T2为8×12分频。T0控制LED的闪烁频率,LED三个闪烁频率对应的周期分别为1s、0.5s和0.1s。定时器T0的工作频率为24.5÷(8×48)MHz=63.802KHz,套用初值公式不难得到LED三种闪烁频率对应的T0初值分别为06C6H、8363H和E714H。T2产生一秒定时,故T1初值理论应为06C6H。但考虑到模式3是用T1实现计时的,对时间精度要求高,后来实际测试发现用该初值的T1产生一秒,一小时后大约会快44秒,按比例校准初值后为03BEH,校准初值后的计时一小时肉眼已发现不了明显误差,故T1初值实
6
际设置为03BEH。定时器T2的工作频率为24.5÷(8×12)MHz=255.208KHz,T2用来扫描数码管,每进一次T2的中断选中一个数码管。扫描一遍数码管位T2定时时长的四倍,为了让人眼看到的数码管的显示是连续的,这个时间必须足够短。T2的初值设置的是0FCC7H,不难计算扫描一遍数码管的时间约为13ms,这个扫描速度对人眼来说已经足够快,故T2的初值就设置为0FCC7H。
四、流程图
1. 模式选择模块流程图
模块代码写在定时器T0中断程序中,流程图如下图3:
进入T0中断A=?A=0A=1A=2A=3MOV TH0,#83HMOV TH0,#83HMOV TH0,#06HMOV TH0,#0E7HMOV TL0,#63HMOV TL0,#63HMOV TL0,#0C6HMOV TL0,#014HCPL LEDCPL LEDCPL LEDCPL LED送参数给数码送参数给数码送参数给数码送参数给数码管显示模块,管显示模块,管显示模块,管显示模块,显示 0-5.0 显示 1-1.0 显示 2-0.5 显示时间 退出T0中断图 2模式选择模块流程图
7
2. 计时模块流程图
计时模块代码写在定时器T1中断程序中,每1秒进一次中断,流程图如下图3,需要说明的是R4、R5、R6、R7、R0和OVER在主程序中首先被赋了一次值,R4、R5、R6和R7的初始值分别为0AH、06H、0AH和06H,用来实现显示计时时间时四位数码管显示数字之间的进位关系;R0初始值14H,对定时器T1 20分频,产生20s计时;OVER初始值为0,即默认开启自动切换方式。SEC1、SEC2、MIN1和MIN2初始值均为0,表示计时起点为00分00秒。
进入T1中断R4=0?否DEC R4INC SEC1R0=0?否DEC R0是MOV R4,#10MOV SEC1,#0是MOV R0,#14H是R5=0?是否DEC R5INC SEC2OVER=1?是A=02H?否MOV R5,#06MOV SEC2,#0否是R6=0?是MOV R6,#10MOV MIN1,#0A=03H?是否DEC R6INC MIN1响一声喇叭否R7=0?是MOV R7,#06MOV MIN2,#0否DEC R7INC MIN2SETB OVERSETB TF0INC A退出T1中断图3 计时模块流程图
8
3. 数码管显示模块流程图
定时器T2大约每3.2ms进一次中断,每进一次中断选中一个数码管,显示特定字符。在中断服务程序中需要调用子程序SHOW,给P1赋特定的值,实现显示。要显示的字符信息存储在BIT0、BIT1、BIT2、BIT3和DOT低四位中。
进入T2中断清除T2中断标志位ACC,PSW,DPL,DPH入栈MOV A,FLAGANL A,#03HMOV FLAG,AINC FLAGA=?A=0A=1A=2A=3选中数码管选中数码管选中数码管选中数码管第0位第1位第2位第3位MOV A,BIT0MOV A,BIT1MOV A,BIT2MOV A,BIT3调用子程调用子程调用子程调用子程序SHOW序SHOW序SHOW序SHOWDOT.0?P1.0DOT.1?P1.0DOT.2?P1.0DOT.3?P1.0控制该位小控制该位小控制该位小控制该位小数点的显示数点的显示数点的显示数点的显示ACC,PSW,DPL,DPH出栈退出T2中断图 4 显示模块流程图
进入SHOWA=?显示 0 A=0A=5显示 5 显示 1 A=1A=6显示 6 显示 2 A=2A=7显示 7 显示 3 A=3A=8显示 8 显示 4 A=4A=9显示 9 A=10显示 - 返回
9
4. 外部中断模块流程图
进入外部中断0中断INC AANL A,#03HSETB OVER (禁止自动切换)SETB CT1中断标志位TF0置位,以迅速响应退出中断 图5 外部中断模块流程图10