📄 key_jmp.asm
字号:
;*******************************Copyright (c)********************************
;** 广州周立功单片机发展有限公司研究所
;** http://www.zlgmcu.com
;********************************文件信息*************************************
;文件名:Key_Jmp.asm
;功能:使用DP-51S实验仪学习散转指令和散转程序的设计方法
;说明:
;1.检测键盘KL1~KL8并判断其键值
;2.根据键值的不同,使用散转程序执行相应的服务子程序
;3.正确设置跳线JP1使P1.0~P1.7分别与LKBIT1~KBIT7\KEY_REC相连,即把跳线置于下端
;5.注意领会散转程序的编写方法和软件实现的键盘去抖动的方法
;最后修改时间:2003年3月21
;*************************************************************************
LED_ADDR EQU 2000H ;定义键盘、数码管操作地址
DATA_BUF DATA 30H ;定义显示缓冲区首地址
DATA_SL DATA 37H
ORG 8000H ;伪指令,指定程序从8000H开始存放
AJMP MAIN ;跳转指令,程序跳转到MAIN处
ORG 8100H ;伪指令,指定以下程序从8100H开始存放
MAIN:
MOV SP,#60 ;给堆栈指针赋初值
MOV DATA_BUF,#0DH ;数据“d“
MOV DATA_BUF+1,#12H ;数据“P”
MOV DATA_BUF+2,#10H ;数据“-”
MOV DATA_BUF+3,#05H ;数据“5”
MOV DATA_BUF+4,#01H ;数据“1”
MOV DATA_BUF+5,#05H ;数据“S”
ON_PROG:
ACALL DISPLAY
ACALL GET_KEY
AJMP ON_PROG
GET_KEY:
MOV P1,#0FFH
JB P1.7,KEY_NEXT
ACALL DISPLAY
MOV DPTR,#LED_ADDR
MOV R7,#08H
MOV DATA_SL,#0FEH
MOV R1,#00H
KEY_UP:
MOV A,DATA_SL
MOVX @DPTR,A
JNB P1.7,KEY_NEXT
INC R1
RL A
MOV DATA_SL,A
DJNZ R7,KEY_UP
KEY_NEXT:
MOV R1,#0FFH
RET
;***********************
;蜂鸣器输出声响子程序
;**********************
MUSIC:
MOV R5,#40H ;控制音长
MIC:
CPL P1.3
ACALL DELAY100US ;控制音调
DJNZ R5,MIC
RET
DELAY100US:
MOV R7,#0FFH
DJNZ R7,$
RET
DISPLAY:
MOV R7,#06H ;给R7赋初值,存放数码管的个数
MOV R0,#DATA_BUF ;把显示缓冲区首地址送R0
MOV DATA_SL,#0FEH
LOOP:
MOV A,@R0 ;取若显示的数据
ACALL TABLE ;查段码表,得出该数据对应的段码
MOV DPTR,#LED_ADDR ;LED数码管地址送DPTR
MOVX @DPTR,A
MOV A,DATA_SL ;位码送A
MOV P1,A ;输出位码
ACALL DELAY ;调延时子程序
MOV P1,#0FFH ;输出位码
Rl A ;取下一个数码管
MOV DATA_SL,A ;保存该位码值
INC R0 ;取下一个数据显示
DJNZ R7,LOOP ;6位数据显示完否?
RET
;**************
;延时子程序
;**************
DELAY:
MOV R6,#10H
DELAY0: MOV R5,#40H
DELAY1: DJNZ R5,DELAY1
DJNZ R6,DELAY0
RET
;查表子程序
TABLE: INC A ;基地址加一
MOVC A, @A+PC ;查段码表,取其相应的段码
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H ;0-9的段码
DB 088H,083H,0c6H,0a1H,86H,8eH,0bfH,89H,8cH ;A-F、-、P的段码
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -