秒表程序 汇编语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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信息

相关文档
最新文档