📄 qq.asm
字号:
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP OUT
ORG 0030H
XYZ EQU 30H ;时间常数地址
;************************************************
;主程序
;名称:MAIN
;作者:叶辽原
;************************************************
MAIN: MOV SP,#60H ;设置SP指针
MOV R0,#50H ;显示缓冲区首地址时50H
ML0: CLR A
MOV @R0,A ;显示缓冲区清零
INC R0
CJNE R0,#55H,ML0
MOV R0,#40H ;键值存放首地址
ML1: CLR A
MOV @R0,A ;键值存放区清零
INC R0
CJNE R0,#44H,ML1
;MOV P3,#01H ;初始化P3口
MOV A,#03H ;数码管显示0
MOV B,A
SETB P3.2
SETB P1.7
SETB P3.3
CLR P3.1
MOV R3,#3
ML2: CLR C
MOV A,B
MOV R2,#8
ML3: RRC A
MOV P3.0,C
NOP
NOP
SETB P3.1
NOP
NOP
CLR P3.1
DJNZ R2,ML3
DJNZ R3,ML2
CLR P3.1
NOP
NOP
MOV IE ,#10000010B
MOV TMOD,#01H
MOV TL0,#35H
MOV TH0,#0F8H
SETB TR0
MOV XYZ,#0FFH
ML4: LCALL KEY ;调用键扫描子程序
;// LCALL OUT ;调用信号输出子程序
SJMP ML4
;************************************************
;键扫描程序
;名称:KEY
;作者:叶辽原
;************************************************
KEY: ;// MOV R2,#5 ;按键扫描次数
MOV A,#2
KEY1: JNB P1.0,NET1 ;+1键按下,转处理程序
JNB P1.1,NET2
JNB P1.2,NET33
JNB P1.3,NET44
;// DJNZ R2,KEY1 ;连续扫描5次按键
KEY2: RET
NET33: AJMP NET3
NET44: AJMP NET4
;************************************************
;+1处理子程序
;名称:NET1
;作者:叶辽原
;************************************************
NET1: DEC A
JZ NET5 ;延时消除按键抖动
LCALL DELAY ;调用延时程序等待1MS
SJMP KEY1
NET5: JNB P1.0,NET5
MOV R0,#40H ;键值首地址给指针(低位)
CLR C ;进位位复位
MOV A,@R0 ;取键值
ADD A,#1 ;键值加1
DA A ;转换成2位十进制BCD码
MOV @R0,A ;存回去
JC NET11 ;有进位位,转进位处理程序
NET10: LCALL CHAIZI ;调用拆字程序
LCALL DISPLAY ;调用显示程序
MOV R0,#52H
CJNE @R0,#2,NET111
DEC R0
CJNE @R0,#5,NET112
DEC R0
CJNE @R0,#5,NET113
AJMP MAIN
NET111: JC NET13
AJMP MAIN
NET112: JC NET13
AJMP MAIN
NET113: JC NET13
AJMP MAIN
LCALL NET10TO16
NET13: SJMP KEY2
NET11: LCALL BWJCLCX ;百位加处理程序
SJMP NET10
;************************************************
;+10处理子程序
;名称:NET2
;作者:叶辽原
;************************************************
NET2: DEC A
JZ NET6 ;延时消除按键抖动
LCALL DELAY ;调用延时程序等待1MS
SJMP KEY1
NET6: JNB P1.1,NET6
MOV R0,#40H ;键值首地址给指针(个位和十位)
CLR C ;复位进位位
MOV A,@R0 ;取十位和个位
ADD A,#10 ;键值加10
DA A ;转换成2位十进制BCD码
MOV @R0,A
JC NET21 ;有进位位,转进位处理程序
NET20: LCALL CHAIZI ;调用拆字程序
LCALL DISPLAY ;调用显示程序
MOV R0,#52H
CJNE @R0,#2,NET121
DEC R0
CJNE @R0,#5,NET122
DEC R0
CJNE @R0,#5,NET123
AJMP MAIN
NET121: JC NET23
AJMP MAIN
NET122: JC NET23
AJMP MAIN
NET123: JC NET23
AJMP MAIN
LCALL NET10TO16
NET23: SJMP KEY2
NET21: LCALL BWJCLCX ;百位加处理程序
SJMP NET20
;************************************************
;-1处理子程序
;名称:NET3
;作者:叶辽原
;************************************************
NET3: DEC A
JZ NET7 ;延时消除按键抖动
LCALL DELAY ;调用延时程序等待1MS
AJMP KEY1
NET7: JNB P1.2,NET7
LCALL NET10TO16
MOV A,XYZ
CJNE A,#0,NET71
AJMP MAIN
NET71: CJNE A,#0FFH,NET72
LJMP MAIN
NET72: JC NET73
LJMP MAIN
NET73: CLR C
SUBB A,#1
MOV XYZ,A
MOV 31H,A
LCALL NET16TO10
;MOV R0,#40H ;键值首地址给指针
;CLR C
;MOV A,@R0 ;取出十位和个位
;SUBB A,#1 ;键值减1
;DA A ;转换成2位十进制BCD码
;MOV @R0,A
;JC NET31 ;有借位
;NET30: LCALL CHAIZI ;调用拆字程序
LCALL DISPLAY ;调用显示程序
MOV R0,#50H
MOV R1,#40H
MOV A,@R0
INC R0
MOV @R1,A
MOV A,@R0
SWAP A
ORL A,@R1
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
;LCALL NET10TO16
AJMP KEY2
;NET31: LCALL BWJICLCX ;调用百位减处理程序
;SJMP NET30
;************************************************
;-10处理子程序
;名称:NET4
;作者:叶辽原
;************************************************
NET4: DEC A
JZ NET8 ;延时消除按键抖动
LCALL DELAY ;调用延时程序等待1MS
AJMP KEY1
NET8: JNB P1.3,NET8
LCALL NET10TO16
MOV A,XYZ
CJNE A,#0,NET81
NET80: AJMP MAIN
NET81: CJNE A,#0FFH,NET84
SJMP NET80
NET84: JC NET85
SJMP NET80
NET85: CLR C
CJNE A,#10,NET83
NET82: CLR C
SUBB A,#10
MOV XYZ,A
MOV 31H,A
LCALL NET16TO10
;MOV R0,#40H ;键值首地址给指针
;CLR C
;MOV A,@R0 ;取出十位和个位
;SUBB A,#10 ;键值减10
;DA A ;转换成2位十进制BCD码
;MOV @R0,A
;JC NET41 ;有借位
;NET40: LCALL CHAIZI ;调用拆字程序
LCALL DISPLAY ;调用显示程序
;LCALL NET10TO16
MOV R0,#50H
MOV R1,#40H
MOV A,@R0
INC R0
MOV @R1,A
MOV A,@R0
SWAP A
ORL A,@R1
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
LJMP KEY2
NET83: JC NET80
SJMP NET82
;NET41: LCALL BWJICLCX ;调用百位减处理程序
;SJMP NET40
;************************************************
;百位加子程序
;名称:BWJCLCX
;作者:叶辽原
;************************************************
BWJCLCX: INC R0
INC @R0 ;百位加1
RET
;************************************************
;百位减子程序
;************************************************
;BWJICLCX: INC R0
;DEC @R0 ;百位减1
;RET
;************************************************
;拆字子程序
;个位在50H,十位在51H,百位在52H
;名称:CHAIZI
;作者:叶辽原
;************************************************
CHAIZI: MOV R1,#40H ;键值首地址
MOV R0,#50H ;显示缓冲区首地址(个位数)
MOV A,@R1 ;取出十位和个位
ANL A,#0FH ;取个位数据
MOV @R0,A ;个位数据存显示缓冲区
MOV A,@R1
SWAP A ;十位和个位交换
ANL A,#0FH ;取十位
INC R0
MOV @R0,A ;十位数据存显示缓冲区
INC R1
INC R0
MOV A,@R1
MOV @R0,A ;百位数据存显示缓冲区
RET
;************************************************
;显示子程序
;名称:DISPLAY
;作者:叶辽原
;************************************************
DISPLAY: SETB P3.2 ;打开164
SETB P1.7
SETB P3.3
MOV R0,#50H ;设置显示缓冲区首地址指针
MOV R2,#3 ;设置显示位数
MOV DPTR,#TAB
DISPLAY0: MOV A,@R0 ;取出要显示的个位数据
MOVC A,@A+DPTR ;取要显示数据的段码
CLR C
CLR P3.1
MOV R3,#8
DISPLAY1: RRC A
MOV P3.0,C
SETB P3.1
NOP
NOP
CLR P3.1
DJNZ R3,DISPLAY1
INC R0
DJNZ R2,DISPLAY0
CLR P3.1
RET
TAB: DB 03H,09FH,025H,0DH,099H ;共阳数码管字型码(低电平点亮)
DB 049H,41H,1FH,01H,09H
;************************************************
;信号发生程序
;名称:OUT
;作者:叶辽原
;************************************************
OUT: ;/ SETB RS0
;MOV 31H,XYZ
MOV TL0,#35H
MOV TH0,#0F8H
DJNZ 31H,OUT1
CPL P3.7
MOV 31H,XYZ
OUT1: RETI
;************************************************
;延时1MS子程序
;名称:DELAY
;作者:叶辽原
;************************************************
DELAY: MOV R2,#20
DELAY2: MOV R3,#200
DELM1: DJNZ R3,DELM1
DJNZ R2,DELAY2
DELAYX: RET
;************************************************
;十进制转十六进制子程序
;名称:NET10TO16
;作者:叶辽原
;************************************************
NET10TO16: MOV R0,#52H
MOV R1,#XYZ
MOV @R1,#0
MOV A,@R0
MOV B,#100
MUL AB
MOV @R1,A
DEC R0
MOV A,@R0
MOV B,#10
MUL AB
ADD A,@R1
DEC R0
ADD A,@R0
MOV @R1,A
MOV 31H,A
MOV XYZ,A
RET
;***********************************************
;十六进制转十进制子程序
;名称:NET16TO10
;作者:叶辽原
;***********************************************
NET16TO10: MOV R0,#52H
MOV B,#100
DIV AB
MOV @R0,A
MOV A,#10
XCH A,B
DIV AB
DEC R0
MOV @R0,A
DEC R0
MOV @R0,B
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -