中断服务中包含了秒表程序和时钟运行程序。其中,XS_MEM为秒表程序的LED1、LED2显示变量,单位为10MS。TS_MEM为秒表程序的秒单元,在LED3、LED4中显示。定时器每隔5MS产生一次中断,中断初值TL0=(65536-N)MOD256,TH0=(65536-N)/256。其中N=5000/(12/11.0592)=4608。
3.4 按键扫描程序框图
各按键功能如要求所述,按键扫描流程如下。
有键按下? 否 开始
调用按键声程序 K1处理 K2处理 K3处理 K4处理 K5处理 是 按键判断
是 按键释放? 否
返回
3.5 LED指示灯程序框图
开 闹铃开关? 关 开始
3.6 主程序框图
P0.0点亮 P0.1点亮 模式0 模式1 模式2 P0.7点亮 模式判断 模式3 模式4 模式5 P0.2点亮 P0.3点亮 P0.4点亮 P0.5点亮 开始 调用清内存程序 设定时器初值 中断初始化 调用闹铃程序
调用扫描显示程序 调用LED扫描程序 调用按键扫描程序 4. 程序清单
LED1 LED2 LED3 LED4
EQU EQU EQU EQU
7FH 7EH 7DH 7CH
7BH ;扫描显示计数器 7AH 79H
SCAN_COUNT EQU TIMER_COUNT EQU MODE_REG TEMP S_MEM M_MEM H_MEM
EQU
EQU EQU
78H 77H
76H 75H
;秒表变量,10MS
;秒表变量,S
EQU EQU
XS_MEM TS_MEM M_ARM H_ARM
EQU 74H EQU EQU EQU
73H 72H 71H
;闹铃分钟
;闹铃小时
FLASH_FLAG EQU 20H.0 ARM EQU 20H.1 STOP
EQU
20H.2
;闹铃开关标志
;秒表暂停标志
;时分/分秒切换标志
CHANGE ORG
0000H
EQU 20H.3
LJMP MAIN ORG 000BH LJMP TO_INT0 ORG
0030H
;--------------主程序-------------------- MAIN: LCALL CLR_MEM MOV SP,#2FH
MOV TL0,#(65536-4608) MOD 256
;清除内存
MOV TH0,#(65536-4608)/256
MOV TMOD,#00010001B SETB ET0 SETB ET1
SETB EA SETB TR0 SETB TR1 SETBPT0
MOV TIMER_COUNT,#0
;--------------闹铃程序------------------ ALARMSCAN:
JNB ARM,CLOSE MOV A,H_ARM
CJNE A,H_MEM,CLOSE MOV A,M_ARM CJNE A,M_MEM,CLOSE CLR P1.2 LJMP KEYSCAN
CLOSE:
SETB P1.2
;--------------键盘扫描程序------------- KEYSCAN:
JNB P3.2,K1 JNB P3.3,K2 JNB P3.4,K3
JB P3.5,J36 LJMP K4
J36:JB
P3.6,WAIT
LJMP K5
WAIT:
LCALL LED LCALL
;-------------按键功能------------------ K1: MOV TEMP,P3
LCALL D10ms MOV A,P3 CJNE A,TEMP,K1 LCALL RING
;调用按键声程序
;去抖动
CONVERT_BCD
SJMP ALARMSCAN
INC MODE_REG
;模式寄存器+1
MOV A,MODE_REG
CJNE A,#6,K11 MOV MODE_REG,#0
K11: LCALL CONVERT_BCD K2:
MOV TEMP,P3 LCALL D10ms MOV A,P3 CJNE A,TEMP,K2 LCALL RING
JNB P3.2,K11 RET
MOV A,MODE_REG
CJNE A,#0,K21 LJMP ARM_SWIT
K21:CJNE A,#5,K22 LJMP STOP_WATCH K22:RET