📄 复件 键盘 - copy.asm
字号:
ORG 0000H
SJMP START
ORG 0030H
START: MOV SCON,#00H ;初始化串行口方式0
MOV DPTR,#TABLE ;查表
LCALL QINGLING
MOV P1,#0FFH ;读取键值
MOV A,P1
CPL A
ANL A,#0FH
JZ START
LCALL D10MS
MOV A,P1
CPL A
ANL A,#0FFH
JZ START
MOV B,A
KEY: MOV A,P1
CPL A
ANL A,#0FFH
JNZ KEY ;判断是那个键按下,并执行相应操作
LCALL D10MS
MOV A,B
MOV R2,#04H ;操作数R2,R3
MOV R3,#02H
JB ACC.0,K1
JB ACC.1,K2
JB ACC.2,K3
JB ACC.3,K4
AJMP start
K1: AJMP JIA
K2: AJMP JIAN
K3: AJMP CHENG
K4: AJMP CHU
JIA: MOV A,R2 ;加
MOV B,R3
MOV R4,#15
ADD A,B
AJMP SHOW
JIAN: MOV A,R2 ;减
MOV B,R3
MOV R4,#16
SUBB A,B
AJMP SHOW
CHENG: MOV A,R2 ;乘
MOV B,R3
MOV R4,#17
MUL AB
AJMP SHOW
CHU: MOV A,R2 ;除
MOV B,R3
MOV R4,#18
DIV AB
AJMP SHOW
SHOW: MOV R1,A ;结果存入R5
MOV A,#19 ;等号
LCALL DISPLAY
MOV A,R3 ;第二位数
LCALL DISPLAY
MOV A,R4 ;符号
LCALL DISPLAY
MOV A,R2 ;第一位数
LCALL DISPLAY
LCALL D1S
LCALL QINGLING
;结果
;分几种情况讨论:
;1、加法和乘法是结果可能有两位,高低位分别输出
;2、除法可能会有余数
;3、减法可能会有负数
RESULT: MOV A,R1 ;结果 ;
CJNE A,#00H,NEXTZF ;判断A的正负,A不等于0跳转到NEXTZF
NEXTZF: JC SMALL ;A小于0,则CY=1,跳转到SMALL,输出负数
AJMP BIG ;否则跳转到BIG
BIG: CJNE A,#0FH,NEXTYE ;判断A,是否为两位
NEXTYE: JNC LIANGWEI ;A大于0FH,CY=0,A为两位跳转到LIANGWEI
LJMP YIWEI ;否则跳转到YIWEI
YIWEI: MOV R7,B
CJNE R7,#00H,YUSHU ;B不为0,则有余数,跳转到YUSHU
AJMP WUYU ;否则没有余数,跳转到WUYU
SJMP $
;子程序
D10MS: MOV R7,#10H ;10MS延时程序
DS11: MOV R6,#0FFH
DS22: DJNZ R6,DS22
DJNZ R7,DS11
RET
QINGLING:MOV R0,#04H ;清零
LOOP: MOV A,#20
LCALL DISPLAY
DJNZ R0,LOOP
LCALL D1S
RET
;显示
DISPLAY:MOVC A,@A+DPTR ;查表
MOV SBUF,A ;输出
DELAY: JNB TI,DELAY ;八个字节是否发送完
CLR TI ;清标志位
RET
D1S: MOV R7,#010 ;1S延时程序
DS1: MOV R6,#200
DS2: MOV R5,#250
DS3: DJNZ R5,DS3
DJNZ R6,DS2
DJNZ R7,DS1
RET
SMALL: LCALL DISPLAY ;有负数存在,先输出A
MOV A,#16 ;输出负号
LCALL DISPLAY ;
LCALL D1S ;
LJMP START ;主程序循环
LIANGWEI:MOV B,#10H ;取16模
DIV AB ;分高低位输出
PUSH A ;
MOV A,B ;
LCALL DISPLAY ;
POP A ;
LCALL DISPLAY ;
LCALL D1S ;
LJMP START
YUSHU: PUSH A ;有余数,将A压入堆栈
MOV A,B ;将余数B输出
LCALL DISPLAY ;
POP A ;弹出A
ORL A,#04H ;加小数点,并输出A
LCALL DISPLAY ;
LCALL D1S
LJMP START ;
WUYU: LCALL DISPLAY ;无余数,直接输出A
LCALL D1S ;
LJMP START ;
TABLE: DB 0BBH,09H,0EAH,6BH,59H,73H,0F3H,0BH,0FBH,7BH
DB 0F1H,0B2H,0E9H,0F2H,0D2H
DB 49h,40h,0d9h,51h,60H,00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -