📄 tiaoshi6
字号:
KeyValue EQU 30H ;显示键值存储变量
DisplayCode EQU 31H ;显示码存贮变量
ROW EQU 32H ;行代码存贮变量
Column EQU 33H ;列代码存贮变量
ScanCount EQU 34H ;扫描圈数存贮变量
ScanCode EQU 35H ;扫描码存贮变量
DisplayBuffer EQU 36H ;以此开始的连续四个单元用以存放显示码
KeyvaluBuffer EQU 40H ;以此开始的连续四个单元用以存放键值
QIANWEI EQU 44H ;显示数值千位存贮变量
BAIWEI EQU 45H ;显示数值百位存贮变量
SHIWEI EQU 46H ;显示数值十位存贮变量
GEWEI EQU 47H ;显示数值个位存贮变量
LSCOUNT EQU 48H ;步进电机左转点动计数
RSCOUNT EQU 49H ;步进电机右转点动计数
ORG 0
SJMP Start
Start:
MOV SP,#5FH ;初始化程序
MOV DisplayCode,#00H ;设定初始不显示
MOV LSCOUNT,#00H
MOV RSCOUNT,#00H
MOV ScanCode,#0EFH ;设定扫描顺序
MOV ScanCount,#5
MOV P2,#00H
MOV R2,#00H
MOV R3,#19H
MOV R6,#19H
MOV R1,#4 ;显示码缓存区清零
MOV R0,#DisplayBuffer
DisplayLoop:
MOV @R0,#00H
INC R0
DJNZ R1,DisplayLoop
MOV R1,#4 ;键值缓存区清零
MOV R0,#KeyvaluBuffer
Keyvaluloop:
MOV @R0,#00H
INC R0
DJNZ R1,Keyvaluloop
Main: ;扫描程序开始,采用逐行查询扫描的方式
MOV A,ScanCode
RR A
ORL A,#0F0H
MOV ScanCode,A
MOV P2,#00H
MOV P3,A
MOV A,P3
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 P2,@R0
MOV A,ScanCode
RLC A
MOV ScanCode,A
MOV P3,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
DELSHOW:
MOV @R0,#00H
INC R0
DJNZ R1,DELSHOW
MOV R0,#KeyvaluBuffer
MOV R1,#4
DELKEY: ;清除键值缓存区内数据
MOV @R0,#00H
INC R0
DJNZ R1,DELKEY
AJMP NotKey
HaveKey:
AJMP FindKeyValue
LOOP: MOV A,KeyValue
AJMP Decode
SHOW:
MOV A,DisplayCode
XRL A,#77H
JZ MOTORCICLE
MOV A,DisplayCode
XRL A,#7CH
JZ CLEA
MOV DisplayBuffer,DisplayBuffer+1
MOV KeyvaluBuffer,KeyvaluBuffer+1
MOV DisplayBuffer+1,DisplayBuffer+2
MOV KeyvaluBuffer+1,KeyvaluBuffer+2
MOV DisplayBuffer+2,DisplayBuffer+3
MOV KeyvaluBuffer+2,KeyvaluBuffer+3
MOV DisplayBuffer+3,DisplayCode
MOV KeyvaluBuffer+3,Keyvalue
PET: INC R2 ;小数点显示
CJNE R2,#2,NotKey
MOV A,DisplayCode
ADD A,#80H
MOV DisplayBuffer+3,A
AJMP NotKey
DIANDONG: JNB P1.4,PANDIN1
JNB P1.5,PANDIN2
JNB P1.6,PANDIN1
JNB P1.7,PANDIN2
AJMP DIANDONG
PANDIN1: INC RSCOUNT
AJMP RIGHTTURN
PANDIN2: INC LSCOUNT
AJMP LEFTTURN
MOTORCICLE:
MOV TMOD ,#00000001B
LEFTTURN: MOV QIANWEI,KeyvaluBuffer ;电机1左转驱动程序
MOV BAIWEI,KeyvaluBuffer+1
MOV SHIWEI,KeyvaluBuffer+2
MOV GEWEI,KeyvaluBuffer+3
MOV TH0,#0FFH
MOV TL0,#0A0H
SETB TR0
PULSE1: MOV A,GEWEI
JZ TELI4
JNB TF0,$
CLR TF0
CPL P1.0
MOV TH0,#0FFH
MOV TL0,#0A0H
DEC GEWEI
AJMP PULSE1
TELI4: MOV GEWEI,#9
MOV A,SHIWEI
JZ TELI1
DEC SHIWEI
AJMP PULSE1
TELI1: MOV SHIWEI,#9
MOV A,BAIWEI
JZ TELI2
DEC BAIWEI
AJMP PULSE1
TELI2: MOV BAIWEI,#9
MOV A,QIANWEI
JNZ FENXI1
MOV A,LSCOUNT
CJNE A,#00H, Notkey
AJMP RIGHTTURN
FENXI1: DEC QIANWEI
AJMP PULSE1
CLR TR0
MOV A,LSCOUNT
CJNE A,#00H,Notkey
NOP
NOP
NOP
RIGHTTURN: CPL P1.1 ;电机1右转驱动程序
MOV QIANWEI,KeyvaluBuffer
MOV BAIWEI,KeyvaluBuffer+1
MOV SHIWEI,KeyvaluBuffer+2
MOV GEWEI,KeyvaluBuffer+3
MOV TH0,#0FFH
MOV TL0,#0A0H
SETB TR0
PULSE2: MOV A,GEWEI
JZ COMU1
JNB TF0,$
CLR TF0
CPL P1.0
MOV TH0,#0FFH
MOV TL0,#0A0H
DEC GEWEI
AJMP PULSE2
COMU1: MOV GEWEI,#9
MOV A,SHIWEI
JZ COMU2
DEC SHIWEI
AJMP PULSE2
COMU2: MOV SHIWEI,#9
MOV A,BAIWEI
JZ COMU3
DEC BAIWEI
AJMP PULSE2
COMU3: MOV BAIWEI,#9
MOV A,QIANWEI
JNZ FENXI2
MOV A,RSCOUNT
CJNE A,#00H,Notkey
AJMP COMU4
FENXI2: DEC QIANWEI
AJMP PULSE2
CPL P1.1
CLR TR0
MOV A,RSCOUNT
CJNE A,#00H,Notkey
COMU4: AJMP MOTORCICLE
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 + -