秒表程序 汇编语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
; 定义计时单元地址
HOUR EQU 30H ;存放小时变量
MIN EQU 31H ;存放分钟变量
SEC EQU 32H ;存放秒钟变量
DEDA EQU 33H ;存放10ms计数值
; 按键端口状况值
K1_N EQU 34H ;存放按键当前端口状况值
K1_P EQU 35H ;存放按键上次端口状况值
K1_C EQU 37H ;存放按键计数单元
X EQU 36H ;LCD 地址变量
; 按键引脚定义
K1 EQU P3.3 ;按键1引脚定义
K2 EQU P3.4 ;按键2引脚定义
;LCD 引脚定义
RS EQU P3.5 ;LCD RS引脚定义
RW EQU P3.6 ;LCD RW引脚定义
E EQU P3.7 ;LCD RS引脚定义
ORG 0000H ;程序由地址0开始执行
JMP MAIN
ORG 0BH ;定时器0中断地址设置
JMP T0_INT
;―――――――――――――主程序――――――――――――――MAIN: ;开始
MOV SP,#60H ;堆栈指针指向60H
CLR E ;E=0,禁止读/写LCM
ACALL SET_LCD ;调LCD控制子程序
ACALL INIT ;初始化变量
MOV K1_P,#01H ;按键上次端口设置1
ACALL INIT_TIMER ;初始化定时器
ACALL MEU ;调用工作菜单子程序
LOOP:ACALL CONV ;时间计数处理
ACALL LOOP1 ;调用清零键子程序
ACALL KEY ;判断是否有键按下
JZ LOOP ;无键按下转LOOP
MOV K1_P,K1_N ;交换数据
ACALL KEY0 ;调用按键功能子程序
JMP LOOP ;跳LOOP处循环
; 初始变量清零子程序
INIT: ;初始变量清零
CLR A ;A清为零
MOV K1_C,A ;K1_C 初始为0
MOV DEDA,A ;DEDA初始为0
MOV SEC,A ;SEC初始为0
MOV MIN,A ;MIN初始为0
MOV HOUR,A ;HOUR初始为0
MOV K1_N,A ;K1_N初始为0
MOV K1_P,A ;K1_P初始为0
CLR TR0 ;启动中断
RET
;定时器初始化设置子程序
INIT_TIMER: ;定时器初始化
MOV TMOD,#01H ;定时器0模式1
MOV IE, #10000010B ;开通中断
RET
;中断服务程序
T0_INT: ;定时器T0中断程序
PUSH ACC ;入栈保护
INC DEDA
MOV A,DEDA ;10ms 计数值加1 CJNE A,#100,TT
MOV DEDA,#0
INC SEC ;秒加1
MOV A,SEC
CJNE A,#60,TT
INC MIN ;分加1
MOV SEC,#0
MOV A,MIN
CJNE A,#60,TT
INC HOUR ;时加1
MOV MIN,#0
MOV A,HOUR
CJNE A,#24,TT
MOV DEDA,#0
MOV SEC,#0 ;秒、分、时单元清0 MOV MIN,#0
MOV HOUR,#0
TT: POP ACC ;出栈
RETI ; 中断程序返回
;判断键是否按下子程序
LOOP1:
JB K2,LOOP2 ;判清零键是否按下
JMP MAIN ;跳转主程序处LOOP2: RET
; 判断K1键是否按下
KEY:
CLR A ;A清零
MOV K1_N,A ;A值送入K1_N
MOV C,K1 ;K1值送入C
RLC A ;同进位标志左移一位
ORL K1_N,A ;两个位作逻辑OR运算
MOV A,K1_N ;K1_N值送入A
XRL A,K1_P ;有键按下,A 中内容不为零RET
;K1键第一次按功能子程序
KEY0:
MOV A, K1_P ;K1_P值送入A
JB ACC.0,KEY3 ;A的0位是1,转KEY3
INC K1_C ;K1_C加1
MOV A, K1_C ;K1_C值送入A
CJNE A,#01H,KEY1 ;K1键是否第一次按?
MOV DPTR,#MENU1 ;是,存入MENU1信息
MOV A,#1 ;设置第一行显示
CALL LCD_PRINT ;调用显示字符子程序
SETB TR0 ;启动中断
RET
;K1键第二次按功能子程序
KEY1:
MOV A,K1_C ;K1_C值送入A
CJNE A,#02H,KEY2 ;K1键是否第二次按?
MOV DPTR,#MENU2 ;是,存入MENU2信息MOV A,#1 ;设置第一行显示
CALL LCD_PRINT ;调用显示字符子程序
CLR TR0 ;停止中断
RET ;
;K1键第三次按功能子程序
KEY2:
MOV A, K1_C ;K1_C值送入A
CJNE A, #03H,KEY3 ;K1键是否第三次按?
MOV DPTR,#MENU3 ;是,存入MENU3信息MOV A, #1 ;设置第一行显示
CALL LCD_PRINT ;调用显示字符子程序
SETB TR0 ;启动中断
RET
;K1键第四按功能子程序
KEY3:
MOV A,K1_C ;K1_C值送入A
CJNE A,#04H,KEY4 ;K1键是否第四次按?
MOV DPTR,#MENU4 ;是,存入MENU4信息