📄 简易缩放尺.asm
字号:
;***********************************
SIGN_P_A EQU 20H.0 ;拉伸的标志位(1)表拉
SIGN_P_B EQU 20H.1;拉伸的标志位
SIGN_P_C EQU 20H.2;拉伸的标志位
SIGN_P EQU 20H.3;拉伸的标志位
SIGN_ZERO EQU 20H.4 ;零标志
SIGN_BIG EQU 20H.5 ;标志大小
SIGN_HAVE EQU 20H.6 ;有的标志
SIGN_HAVE_1 EQU 20H.7 ;有的标志
SIGN_R EQU 21H.1 ;确认键
PICK_A EQU 17H ;步进电机输出优先级;;//
PICK_B EQU 18H ;步进电机输出优先级;;;//
PICK_C EQU 19H ;步进电机输出优先级///;;;
FACT_HX EQU 1AH ;开始输入的X轴对应的坐标
FACT_LX EQU 1BH ;开始输入的X轴对应的坐标
FACT_HY EQU 1CH ;开始输入的Y轴对应的坐标
FACT_LY EQU 1DH ;开始输入的Y轴对应的坐标
END_HY EQU 1EH ;结束输入的X轴对应的坐标
END_LY EQU 1FH ;结束输入的X轴对应的坐标
ST_3 EQU 25H ;HH
ST_2 EQU 26H ;H
ST_1 EQU 27H ;L
KEYRAM EQU 28H ;重要的CASE
LOGO_A EQU 31H ;
LOGO_B EQU 32H ;
LOGO_C EQU 33H ;
END_HX EQU 34H ;结束 输入的X轴对应的坐标
END_LX EQU 35H ;结束输入的X轴对应的坐标
OUT_A_H EQU 36H ;一边的长度
OUT_A_L EQU 37H ;
OUT_B_H EQU 38H ;一边的长度
OUT_B_L EQU 39H ;
OUT_C_H EQU 3AH ;一边的长度
OUT_C_L EQU 3BH ;
START_HX EQU 40H ;转化的X轴对应的坐标
START_LX EQU 41H ;转化的X轴对应的坐
START_HY EQU 42H ;转化的Y轴对应的坐标
START_LY EQU 43H ;转化的Y轴对应的坐标
OUT_1_A_H EQU 44H ;一边的长度
OUT_1_A_L EQU 45H ;小数
OUT_1_B_H EQU 46H ;一边的长度
OUT_1_B_L EQU 47H ;小数
OUT_1_C_H EQU 48H ;一边的长度
OUT_1_C_L EQU 49H ;小数
CRAM EQU 4AH ;缓存
LINE_A_H EQU 4BH ;计算后输出一边的长度
LINE_A_L EQU 4CH ;计算后输出小数
LINE_B_H EQU 4DH ;计算后输出一边的长度
LINE_B_L EQU 4EH ;计算后输出一边的长度
LINE_C_H EQU 4FH ;计算后输出一边的长度
LINE_C_L EQU 50H ;计算后输出一边的长度
CASE_HH EQU 56H ;缓存
CASE_HL EQU 57H ;缓存
CASE_H EQU 58H ;缓存
CASE_L EQU 59H ;缓存
;*****************************
org 00h
ljmp main
org 50h
MAIN:MOV SP,#62H
MOV KEYRAM,#00H
CLR SIGN_R
CLR EA
mov FACT_HX,#01h
mov FACT_LX,#2Ch
mov FACT_Hy,#00h
mov FACT_ly,#00h
mov END_HX,#00h
mov END_LX,#00h
mov END_Hy,#00h
mov END_ly,#00h
;;;;;;;;;;;;;;;;;
LOGIN:LCALL SCAN
LCALL EUX_2
LCALL LCM
JB SIGN_R,EU_1
MOV A,KEYRAM
CJNE A,#01H,LOGIN
LOGIN_1:LCALL SCAN
LCALL EUX_2
LCALL LCM
JB SIGN_R,EU_1
MOV A,KEYRAM
CJNE A,#02H,LOGIN_1
LOGIN_2:LCALL SCAN
LCALL EUX_2
LCALL LCM
JB SIGN_R,EU_1
MOV A,KEYRAM
CJNE A,#03H,LOGIN_2
LOGIN_3:LCALL SCAN
LCALL EUX_2
LCALL LCM
JB SIGN_R,EU_1
MOV A,KEYRAM
CJNE A,#04H,LOGIN_3
MOV KEYRAM,#00H
AJMP LOGIN
EU_1: LJMP KNOW_1
EU_END:ajmp MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*****************按键数据处理区
EUX_2:MOV R2,ST_3
MOV R3,ST_2
MOV R4,ST_1
LCALL BCD3
MOV A,KEYRAM
CJNE A,#00H,EUX_3
MOV FACT_HX,R6
MOV FACT_LX,R7
RET
EUX_3:CJNE A,#01H,EUX_4
MOV FACT_HY,R6
MOV FACT_LY,R7
RET
EUX_4:CJNE A,#02H,EUX_5
MOV END_HX,R6
MOV END_LX,R7
RET
EUX_5:CJNE A,#03H,EUX_6
MOV END_HY,R6
MOV END_LY,R7
EUX_6:RET
;;;;*********************************************
;标号: BCD3 功能:无符号三字节BCD码转换成两字节十六进制数
;入口条件:R2、R3,R4 数 注意高字节是R2
;出口信息:R6,R7存放转换后的十六进制数注意高字节是R6
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
BCD3:CLR C
MOV A,R2
MOV B,#100
MUL AB
MOV R7,A
MOV R6,B
MOV A,R3
MOV B,#10
MUL AB
CLR C
ADD A,R7
MOV R5,A ;缓存
MOV A,B
ADDC A,R6
MOV R6,A
CLR C
MOV A,R4
ADD A,R5
MOV R7,A
MOV A,R6
ADDC A,#00H
MOV R6,A
RET
;=========================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;键盘扫描子程序
SCAN:
MOV P0,#7FH
MOV A,P0
CJNE A,#7FH, KEY1
MOV P0,#0BFH
MOV A,P0
CJNE A,#0BFH, KEY5
MOV P0,#0DFH
MOV A,P0
CJNE A,#0DFH,KEY9
MOV P0,#0EFH
MOV A,P0
CJNE A,#0EFH,T_O
RET
T_O:LJMP KEY13
KEY1:CJNE A,#77H,KEY2
NOP
RET
KEY2:CJNE A,#7BH,KEY3
NOP
RET
KEY3:CJNE A,#7DH,KEY4
NOP
RET
KEY4:CJNE A,#7EH,MM
NOP
MM:RET
KEY5:CJNE A,#0B7H,KEY6 ;数字键
MOV R7,#00H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY6:CJNE A,#0BBH,KEY7
MOV R7,#01H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY7:CJNE A,#0BDH,KEY8
MOV R7,#02H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY8:CJNE A,#0BEH,KEY9
MOV R7,#03H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY9:CJNE A,#0D7H,KEY10
MOV R7,#04H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY10:CJNE A,#0DBH,KEY11
MOV R7,#05H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY11:CJNE A,#0DDH,KEY12
MOV R7,#06H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY12:CJNE A,#0DEH,KEY13
MOV R7,#07H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY13:CJNE A,#0E7H,KEY14
MOV R7,#08H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY14:CJNE A,#0EBH,KEY15
MOV R7,#09H
MOV ST_3,ST_2
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY15:CJNE A,#0EDH,KEY16 ;停止键
INC KEYRAM
LCALL DELAY1
LCALL DELAY1
RET ;电机正转
KEY16:CJNE A,#0EEH,LL ;确认键
LCALL DELAY1
SETB SIGN_R
LCALL DELAY1
LCALL DELAY1
LL:RET
;;;;;;;;;;;;;
delay1:
MOV R5,#250
XX: MOV R6,#250
DJNZ R6,$
DJNZ R5, XX
RET
;;;************************
;;;;;;;;;;;;;;;;;;;;;;;;;;液晶子程序
LCM:
MOV P1,#8fH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,KEYRAM
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV A,KEYRAM
CJNE A,#00H,LCM_1
LCALL KEY_SX
RET
LCM_1: CJNE A,#01H,LCM_2
LCALL KEY_SY
RET
LCM_2:CJNE A,#02H,LCM_3
LCALL KEY_EX
RET
LCM_3: CJNE A,#03H,LCM_4
LCALL KEY_EY
LCM_4: RET
KEY_SX:
MOV P1,#83H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#84H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#85H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
;;;;***************************************
KEY_SY: MOV P1,#88H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#89H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#8AH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
;;;***************************
KEY_EX: MOV P1,#0C3H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C4H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C5H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
;;;********************************
KEY_EY: MOV P1,#0C9H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CAH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CBH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
;;*********************************
DADE:SETB P2.2
CLR P2.3
SETB P2.4 ;给下降沿
CPL P2.4
ACALL DALAY1
RET
Ming_Lin: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
;给下降沿
CPL P2.4
ACALL DALAY
RET
DALAY: MOV R5,#10H
ALJSDH:MOV R6,#123
DJNZ R6,$
DJNZ R5,ALJSDH
RET
DALAY1:MOV R7,#25
DJNZ R7,$
RET
Ming_Lin_1: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
ACALL DALAY
;给下降沿
CPL P2.4
ACALL DALAY
RET
TABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
;;;***********************************************************步进电机优先级扫描
KNOW_1:MOV LOGO_A,#02H
MOV LOGO_B,#02H
MOV LOGO_B,#02H
LCALL CONTROL
JB SIGN_P_A,KNOW_2
INC LOGO_A
KNOW_2:JB SIGN_P_B,KNOW_3
INC LOGO_B
KNOW_3:JB SIGN_P_C,POCESS_1
INC LOGO_C
POCESS_1:
CLR SIGN_HAVE
MOV PICK_A,#00H
MOV PICK_B,#00H
MOV PICK_C,#00H
MOV R0,#31H
MOV A,@R0
CLR C
SUBB A,#03H
JC POCESS_2
MOV R1,#17H
MOV A,R0
MOV @R1,A
AJMP POCESS_3
POCESS_2:MOV R1,#19H
MOV A,R0
MOV @R1,A
SETB SIGN_HAVE
POCESS_3: INC R0
MOV A,@R0
CLR C
SUBB A,#03H
JC POCESSX_2
JNB SIGN_HAVE,POCESS_10
MOV R1,#17H
AJMP POCESS_11
POCESS_10:INC R1
POCESS_11:MOV A,R0
MOV @R1,A
AJMP POCESSX_3
POCESSX_2:JNB SIGN_HAVE,POCESS_Y
DEC R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -