📄 电动卷尺贴片段码控制程序.asm
字号:
CALL WRA
MOV A,#0FH
CALL WRA
MOV A,#01H
CALL WRA
MOV A,#06H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT20:
CJNE A,#04H,FT21
MOV A,#20H
CALL WRA
MOV A,#0BH
CALL WRA
MOV A,#04H
CALL WRA
MOV A,#20H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT21:
CJNE A,#03H,FT22
MOV A,#20H
CALL WRA
MOV A,#0DH
CALL WRA
MOV A,#01H
CALL WRA
MOV A,#06H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT22:
CJNE A,#02H,FT23
MOV A,#20H
CALL WRA
MOV A,#0BH
CALL WRA
MOV A,#08H
CALL WRA
MOV A,#20H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT23:
CJNE A,#01H,FT24
MOV A,#20H
CALL WRA
MOV A,#0BH
CALL WRA
MOV A,#01H
CALL WRA
MOV A,#06H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT24:
MOV A,#20H
CALL WRA
MOV A,#20H
CALL WRA
MOV A,#20H
CALL WRA
MOV A,#20H
CALL WRA
MOV A,#14H
CALL WRA
LJMP FT100
FT100:
RET
;*********************************************************************
;(20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
;入口条件:待转换的单字节BCD码整数在累加器A中。
;出口信息:转换后的单字节十六进制整数仍在累加器A中。
;影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH:
MOV B,#10H ;分离十位和个位
DIV AB
MOV R4,B ;暂存个位
MOV B,#10 ;将十位转换成十六进制
MUL AB
ADD A,R4 ;按十六进制加上个位
RET
;*********************************************************************
;(21)标号: BH2 功能:双字节BCD码整数转换成双字节十六进制整数
;入口条件:待转换的双字节BCD码整数在R2、R3中。
;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
BCDH2:
MOV A,R3 ;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;扩大一百倍
MUL AB
ADD A,R3 ;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;*************************************************************************
;(23)标号: BHD2 功能:双字节BCD码小数转换成双字节十六进制小数
;入口条件:待转换的双字节BCD码小数在R4、R5中。
;出口信息:转换后的双字节十六进制小数在R2、R3中。*
;影响资源:PSW、A、R2~R6 堆栈需求: 2字节
BHD2:
MOV R6,#10H ;准备计算两个字节小数
BHD3:
MOV A,R5 ;按十进制倍增
ADD A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3 ;将进位标志移入结果中
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
DJNZ R6,BHD3 ;共计算16bit小数
MOV A,R4
ADD A,#0B0H ;剩余部分达到0.50否?
JNC BHD4 ;四舍
INC R3 ;五入
MOV A,R3
JNZ BHD4
INC R2
BHD4:
RET
;*********************************************************************
DATAJISUAN:
PUSH 02H
CLR A ;BCD码初始化
MOV DATA6,A
MOV DATA5,A
MOV DATA4,A
MOV R2,#10H ;转换双字节十六进制整数
DJISUAN:
MOV A,67H ;从高端移出待转换数的一位到CY中
RLC A
MOV 67H,A
MOV A,66H
RLC A
MOV 66H,A
MOV A,DATA4 ;BCD码带进位自身相加,相当于乘2
ADDC A,DATA4
DA A ;十进制调整
MOV DATA4,A
MOV A,DATA5
ADDC A,DATA5
DA A
MOV DATA5,A
MOV A,DATA6
ADDC A,DATA6
MOV DATA6,A
DJNZ R2,DJISUAN
MOV DATA0,#06H
POP 02H
RET
;******************************************************
;*************************************
DELAY1MS:
PUSH 04H
MOV R4, #64H ;0FEH
DEL1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R4, DEL1
NOP
POP 04H
RET
NOP
NOP
LJMP MAIN
;*************************************
DELAY1S:
PUSH 06H
MOV R6,#04H
DEL2:
NOP
LCALL DELAY100MS
NOP
DJNZ R6,DEL2
NOP
POP 06H
NOP
RET
NOP
NOP
LJMP MAIN
;*************************************
DELAY100MS:
PUSH 05H
MOV R5,#64H
DEL3:
NOP
LCALL DELAY1MS
NOP
DJNZ R5,DEL3
NOP
POP 05H
NOP
RET
NOP
NOP
LJMP MAIN
;*************************************
ANNIUJC:
MOV 28H,#00H
MOV 29H,#00H
MOV 2AH,#00H
CLR P2.5
JB P1.0,ANNIU1
LCALL DELAY100MS
SETB YUNSUAN
SETB CHU
JNB P1.0,$
SETB P2.5
LJMP ANNIU26
ANNIU1:
JB P1.1,ANNIU2
LCALL DELAY100MS
SETB NUM9
SETB SHUZI
JNB P1.1,$
SETB P2.5
LJMP ANNIU26
ANNIU2:
JB P1.2,ANNIU3
LCALL DELAY100MS
SETB NUM8
SETB SHUZI
JNB P1.2,$
SETB P2.5
LJMP ANNIU26
ANNIU3:
JB P1.3,ANNIU4
LCALL DELAY100MS
SETB NUM7
SETB SHUZI
JNB P1.3,$
SETB P2.5
LJMP ANNIU26
ANNIU4:
JB P1.5,ANNIU5
LCALL DELAY100MS
SETB NUM4
SETB SHUZI
JNB P1.5,$
SETB P2.5
LJMP ANNIU26
ANNIU5:
JB P1.4,ANNIU6
LCALL DELAY100MS
SETB NUM5
SETB SHUZI
JNB P1.4,$
SETB P2.5
LJMP ANNIU26
;*********************************
ANNIU6:
SETB P2.5
CLR P2.4
JB P1.4,ANNIU7
LCALL DELAY100MS
SETB NUM6
SETB SHUZI
JNB P1.4,$
SETB P2.4
LJMP ANNIU26
ANNIU7:
JB P1.5,ANNIU8
LCALL DELAY100MS
SETB YUNSUAN
SETB CHENG
JNB P1.5,$
SETB P2.4
LJMP ANNIU26
ANNIU8:
JB P1.0,ANNIU9
LCALL DELAY100MS
SETB JIAN
SETB YUNSUAN
JNB P1.0,$
SETB P2.4
LJMP ANNIU26
ANNIU9:
JB P1.1,ANNIU10
LCALL DELAY100MS
SETB NUM3
SETB SHUZI
JNB P1.1,$
SETB P2.4
LJMP ANNIU26
ANNIU10:
JB P1.2,ANNIU11
LCALL DELAY100MS
SETB NUM2
SETB SHUZI
JNB P1.2,$
SETB P2.4
LJMP ANNIU26
ANNIU11:
JB P1.3,ANNIU12
LCALL DELAY100MS
SETB NUM1
SETB SHUZI
JNB P1.3,$
SETB P2.4
LJMP ANNIU26
;*********************************
ANNIU12:
SETB P2.4
CLR P2.7
JB P1.0,ANNIU13
LCALL DELAY100MS
SETB YUNSUAN
SETB JIA
JNB P1.0,$
SETB P2.7
LJMP ANNIU26
ANNIU13:
JB P1.1,ANNIU14
LCALL DELAY100MS
SETB DENGYU
JNB P1.1,$
SETB P2.7
LJMP ANNIU26
ANNIU14:
JB P1.2,ANNIU15
LCALL DELAY100MS
SETB POINT
JNB P1.2,$
SETB P2.7
LJMP ANNIU26
ANNIU15:
JB P1.3,ANNIU16
LCALL DELAY100MS
SETB NUM0
SETB SHUZI
JNB P1.3,$
SETB P2.7
LJMP ANNIU26
ANNIU16:
JB P1.4,ANNIU17
LCALL DELAY100MS
SETB FOUR
SETB FENSHU
JNB P1.4,$
SETB P2.7
LJMP ANNIU26
ANNIU17:
JB P1.5,ANNIU18
LCALL DELAY100MS
SETB TWO
SETB FENSHU
JNB P1.5,$
SETB P2.7
LJMP ANNIU26
;**********************************
ANNIU18:
SETB P2.7
CLR P2.6
JB P1.0,ANNIU19
LCALL DELAY100MS
SETB STOP
CLR FRONT
CLR BACK
JNB P1.0,$
SETB P2.6
LJMP ANNIU26
ANNIU19:
JB P1.1,ANNIU20
LCALL DELAY1S
CPL ONOFF
JNB P1.1,$
SETB P2.6
LJMP ANNIU26
ANNIU20:
JB P1.2,ANNIU21
LCALL DELAY100MS
CPL INCM
JNB P1.2,$
SETB P2.6
LJMP ANNIU26
ANNIU21:
JB P1.3,ANNIU22
LCALL DELAY100MS
CPL CALC
JNB P1.3,$
SETB P2.6
LJMP ANNIU26
ANNIU22:
JB P1.4,ANNIU23
LCALL DELAY100MS
SETB EIGHT
SETB FENSHU
JNB P1.4,$
SETB P2.6
LJMP ANNIU26
ANNIU23:
JB P1.5,ANNIU24
LCALL DELAY100MS
SETB SIXTY
SETB FENSHU
JNB P1.5,$
SETB P2.6
LJMP ANNIU26
ANNIU24:
SETB P2.6
JB P3.3,ANNIU25
LCALL DELAY1S
JB P3.3,ANNIU241
LJMP ANNIU26
ANNIU241:
CLR BACK
SETB FRONT
LJMP ANNIU26
ANNIU25:
JB P3.1,ANNIU26
LCALL DELAY1S
JB P3.1,ANNIU251
LJMP ANNIU26
ANNIU251:
CLR FRONT
SETB BACK
ANNIU26:
RET
NOP
NOP
LJMP MAIN
;**********************************************
WRITE:
CLR LCDWR
NOP
NOP
SETB LCDWR
NOP
NOP
RET
;*************************************
WR:
CLR LCDCS
SETB LCDDATA
CALL WRITE
CLR LCDDATA
CALL WRITE
SETB LCDDATA
CALL WRITE
RET
;*************************************
ML:
CLR LCDCS
NOP
SETB LCDDATA
CALL WRITE
CLR LCDDATA
CALL WRITE
CALL WRITE
RET
;*************************************
LCDON:
CLR LCDDATA
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
SETB LCDDATA
CALL WRITE
CALL WRITE
CALL WRITE
SETB LCDCS
RET
;*************************************
LCDOFF:
CLR LCDDATA
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
CALL WRITE
SETB LCDDATA
CALL WRITE
CLR LCDDATA
CALL WRITE
CALL WRITE
SETB LCDCS
RET
;*************************************
TABLE:
DB 82H,9FH,0C1H,85H,9CH,0A4H,0A0H,8FH,80H,84H
DB 02H,1FH,041H,05H,1CH,024H,020H,0FH,00H,04H
DB 0FCH,0F7H,0FBH,0E0H,0E8H,0FDH
WRA:
CJNE A,#1AH,WRA1
WRA1:
JC WRA2
MOV A,#0FFH
AJMP WRA3
WRA2:
MOV DPTR, #TABLE
MOVC A, @A+DPTR
WRA3:
JB ACC.0,WRA4
SETB LCDDATA
JMP WRA5
WRA4:
CLR LCDDATA
WRA5:
CALL WRITE
JB ACC.1,WRA6
SETB LCDDATA
JMP WRA7
WRA6:
CLR LCDDATA
WRA7:
CALL WRITE
JB ACC.2,WRA8
SETB LCDDATA
JMP WRA9
WRA8:
CLR LCDDATA
WRA9:
CALL WRITE
JB ACC.3,WRA10
SETB LCDDATA
JMP WRA11
WRA10:
CLR LCDDATA
WRA11:
CALL WRITE
JB ACC.4,WRA12
SETB LCDDATA
JMP WRA13
WRA12:
CLR LCDDATA
WRA13:
CALL WRITE
JB ACC.5,WRA14
SETB LCDDATA
JMP WRA15
WRA14:
CLR LCDDATA
WRA15:
CALL WRITE
JB ACC.6,WRA16
SETB LCDDATA
JMP WRA17
WRA16:
CLR LCDDATA
WRA17:
CALL WRITE
JB ACC.7,WRA18
SETB LCDDATA
JMP WRA19
WRA18:
CLR LCDDATA
WRA19:
CALL WRITE
RET
;*************************************
;三字节浮点数运算
;**********************************************************
;(1) 标号: BTOF 功能:浮点BCD码转换成格式化浮点数
;入口条件:浮点BCD码操作数在[R0]中。
;出口信息:转换成的格式化浮点数仍在[R0]中。
BTOF:
INC R0
INC R0
INC R0 ;READ L
MOV 07H,@R0
DEC R0
MOV 06H,@R0
DEC R0
MOV 05H,@R0 ;R5R6R7=0.HML(DEC)
DEC R0 ;R0 TO JIE_MA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -