📄 tiaoshi2.asm
字号:
KeyValue EQU 30H
DisplayCode EQU 31H
ROW EQU 32H
Column EQU 33H
ScanCount EQU 34H
ScanCode EQU 35H
DisplayBuffer EQU 36H
ORG 0
SJMP Start
Start:
MOV SP,#5FH ;初始化程序
MOV DisplayCode,#00H ;设定初始不显示
MOV ScanCode,#0EFH ;设定扫描顺序
MOV ScanCount,#5
MOV P3,#00H
MOV R2,#00H
MOV R3,#19H
MOV R6,#19H
MOV R1,#4 ;缓存区清零
MOV R0,#DisplayBuffer
RegistLoop:
MOV @R0,#00H
INC R0
DJNZ R1,RegistLoop
Main: ;扫描程序开始,采用逐行查询扫描的方式
MOV A,ScanCode
RR A
ORL A,#0F0H
MOV ScanCode,A
MOV P3,#00H
MOV P1,A
MOV A,P1
MOV R5,A
XRL A,ScanCode
JZ NotKey ;若未检测到按键按下,则继续扫描下一行
AJMP HaveKey ;若检测到按键按下,则跳至相应程序执行
NotKey:
DJNZ ScanCount,KELO ;记录扫描圈数,一轮扫描完成后重新置入初值
MOV ScanCount,#5
MOV ScanCode,#0EFH
KELO: PUSH ScanCode ;将主程序当前扫描行代码压入堆栈
DECI: MOV R0,#35H ;循环显示缓存区内的数值
MOV R4,#04H
MOV ScanCode,#0FFH
CLR C
LIU: INC R0
MOV P3,@R0
MOV A,ScanCode
RLC A
MOV ScanCode,A
MOV P1,A
AJMP Delay1
PEN: DJNZ R4,LIU
FIJ: DJNZ R3,DECI
MOV R3,#19H
DJNZ R6,FIJ
MOV R6,#19H
POP ScanCode ;释放主程序当前扫描行代码
AJMP Main ;跳至主程序继续执行扫描
CLEA: ;清除现有显示数据,为下一次的显示做准备
MOV R2,#00H
MOV R0,#DisplayBuffer
MOV R1,#4
DEL:
MOV @R0,#00H
INC R0
DJNZ R1,Del
AJMP NotKey
HaveKey:
AJMP FindKeyValue
LOOP: MOV A,KeyValue
AJMP Decode
SHOW:
MOV A,DisplayCode
XRL A,#77H
JZ NotKey
MOV A,DisplayCode
XRL A,#7CH
JZ CLEA
MOV DisplayBuffer,DisplayBuffer+1
MOV DisplayBuffer+1,DisplayBuffer+2
MOV DisplayBuffer+2,DisplayBuffer+3
MOV DisplayBuffer+3,DisplayCode
PET: INC R2 ;小数点显示
CJNE R2,#2,NotKey
MOV A,DisplayCode
ADD A,#80H
MOV DisplayBuffer+3,A
AJMP NotKey
FindKeyValue: ;计算扫描到的按键键值
MOV A,R5
FindRow:
SWAP A
ANL A,#0FH
MOV Row,#0
NextRow:
RRC A
JNC FindColumn
INC Row
JMP NextRow
FindColumn:
MOV A,R5
ANL A,#0FH
MOV Column,#0
NextColumn:
RRC A
JNC CalculateKeyValue
INC Column
JMP NextColumn
CalculateKeyValue:
MOV A,Column
MOV B,#4
MUL AB
ADD A,Row
MOV KeyValue,A
AJMP LOOP
Decode: ;将计算出的键值进行译码
MOV DPTR,#DisplayCodeTable
MOVC A,@A+DPTR
MOV DisplayCode,A
AJMP SHOW
DisplayCodeTable:
DB 3FH ; 显示数字“0”
DB 06H ; 显示数字“1”
DB 5BH ; 显示数字“2”
DB 4FH ; 显示数字“3”
DB 66H ; 显示数字“4”
DB 6DH ; 显示数字“5”
DB 7DH ; 显示数字“6”
DB 07H ; 显示数字“7”
DB 7FH ; 显示数字“8”
DB 6FH ; 显示数字“9”
DB 77H
DB 7CH
DB 39H
DB 5EH
DB 79H
DB 71H
DB 00H
Delay1:
MOV R7,#2
DJNZ R7,$
AJMP PEN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -