📄 zhuji.asm
字号:
;*******************液滴监测系统主机控制程序**********************
LED1 EQU 0A000H
LED2 EQU 0A006H
DISPRAM1 EQU 08H
DISPRAM2 EQU 09H
DISPRAM3 EQU 0AH
DISPRAM4 EQU 0BH
DISPRAM5 EQU 0CH
KEYPORT EQU 0A100H
STATION EQU 30H
COMMAND EQU 31H
SPEED EQU 32H
ALARM EQU 33H
BCDBYTETEMP1 EQU 34H
TEMP1 EQU 35H
TEMP2 EQU 36H
T0TEMP EQU 37H
TMP1 EQU 38H
TMP2 EQU 39H
TMP3 EQU 3AH
TMP4 EQU 3BH
TMP5 EQU 3CH
ORG 0000H
JMP START_MAIN
ORG 000BH
JMP MYT0
ORG 0023H
JMP MYSBUFINT
ORG 0030H
START_MAIN:
CLR P1.0
MOV SP,#50H
MOV STATION,#0
MOV COMMAND,#0
MOV SPEED,#0
MOV ALARM,#0
MOV T0TEMP,#0
MOV PCON,#80H
MOV SCON,#90H
MOV TH0,#0
MOV TL0,#35
MOV TMOD,#01H
SETB ET0
CLR F1
SETB ES
SETB EA
MOV DISPRAM1,#0
MOV DISPRAM2,#0
MOV DISPRAM3,#0
MOV DISPRAM4,#0
MOV DISPRAM5,#0
MAIN1:
MOV A,STATION
CALL BIN_TO_BCD
MOV DISPRAM5,R6
MOV DISPRAM4,R7
MOV A,SPEED
CALL BIN_TO_BCD
MOV DISPRAM3,R5
MOV DISPRAM2,R6
MOV DISPRAM1,R7
CALL DISP
MOV A,ALARM
CJNE A,#55H,MAIN2
SETB P1.0
MAIN2:
CALL KEYIN
;********************
CJNE A,#0BH,KEYSCAN1 ;OBH STATION KEY
MOV TEMP1,#0
KEYSCAN2:
CALL DISP
CALL KEYIN
MOV B,A
CJNE A,#0EH,KEYSCAN5
MOV STATION,#0
JMP MAIN1
KEYSCAN5:
CJNE A,#0DH,KEYSCAN6
MOV R5,#0
MOV R6,DISPRAM5
MOV R7,DISPRAM4
CALL BCD_TO_BIN
CJNE A,#17,$+3
JNZ KEYSCAN19
MOV STATION,#1
JMP MAIN1
KEYSCAN19:
JC KEYSCAN11
MOV STATION,#16
JMP MAIN1
KEYSCAN11:
MOV STATION,A
JMP MAIN1
KEYSCAN6:
JNB F0,KEYSCAN2 ;F0=1 NUMBER KEY
INC TEMP1
MOV A,TEMP1
CJNE A,#1,KEYSCAN3
MOV DISPRAM5,B
JMP KEYSCAN2
KEYSCAN3:
MOV TEMP1,#0
MOV DISPRAM4,B
JMP KEYSCAN2
KEYSCAN1: ; STATION KEY END
;*********************
CJNE A,#0CH,KEYSCAN2_1 ;OCH SPEED KEY
JMP KEYSCAN2_2
KEYSCAN2_1:
JMP KEYSCAN21
KEYSCAN2_2:
MOV TEMP1,#0
KEYSCAN22:
CALL DISP
CALL KEYIN
MOV B,A
CJNE A,#0EH,KEYSCAN25
MOV SPEED,#0
JMP MAIN1
KEYSCAN25:
CJNE A,#0DH,KEYSCAN26
MOV R5,DISPRAM3
MOV R6,DISPRAM2
MOV R7,DISPRAM1
CALL BCD_TO_BIN
MOV SPEED,A
CJNE A,#20,$+3
JNC KEYSCAN28
MOV A,#20
MOV SPEED,#20
JMP MAIN1
KEYSCAN28:
CJNE A,#151,$+3
JC KEYSCAN29
MOV SPEED,#150
JMP MAIN1
KEYSCAN29:
MOV SPEED,A
JMP MAIN1
KEYSCAN26:
JNB F0,KEYSCAN22 ;F0=1 NUMBER KEY
INC TEMP1
MOV A,TEMP1
CJNE A,#1,KEYSCAN23
MOV DISPRAM3,B
JMP KEYSCAN22
KEYSCAN23:
CJNE A,#2,KEYSCAN24
MOV DISPRAM2,B
JMP KEYSCAN22
KEYSCAN24:
MOV TEMP1,#0
MOV DISPRAM1,B
JMP KEYSCAN22
KEYSCAN21: ;SPEED KEY END
;*************************
CJNE A,#0AH,KEYSCAN31
MOV A,STATION ;SEND KEY PRESS
JZ KEYSCAN31
MOV A,SPEED
JZ KEYSCAN32
CLR ES ;SEND "STATION+01H+SPEED"
SETB TB8
MOV SBUF,STATION
JNB TI,$
CLR TI
CALL DISP
CALL DISP
CLR TB8
MOV SBUF,#01H
JNB TI,$
CLR TI
CALL DISP
CALL DISP
CLR TB8
MOV SBUF,SPEED
JNB TI,$
CLR TI
SETB ES
JMP MAIN1
KEYSCAN32: ;SEND "STATION+02H+00H"
CLR ES
SETB TB8
MOV SBUF,STATION
JNB TI,$
CLR TI
CALL DISP
CALL DISP
CLR TB8
MOV SBUF,#02H
JNB TI,$
CLR TI
CALL DISP
CALL DISP
CLR TB8
MOV SBUF,#00
JNB TI,$
CLR TI
SETB ES
JMP MAIN1
KEYSCAN31:
;************** ; CANCEL KEY PRESS
CJNE A,#0EH,KEYSCAN41
MOV ALARM,#00H
CLR P1.0
JMP MAIN1
KEYSCAN41:
;***************
; DETECT ALL KEY PRESS
CJNE A,#0FH,KEYSCAN58
MOV TMP1,DISPRAM1
MOV TMP2,DISPRAM2
MOV TMP3,DISPRAM3
MOV TMP4,DISPRAM4
MOV TMP5,DISPRAM5
MOV DISPRAM1,#10
MOV DISPRAM2,#10
MOV DISPRAM3,#10
MOV DISPRAM4,#10
MOV DISPRAM5,#10
MOV R2,#1
MOV R3,#16
DETECT3:
CLR ES
SETB TB8
MOV SBUF,R2
JNB TI,$
CLR TI
CLR TB8
CALL DISP
MOV SBUF,#02
JNB TI,$
CLR TI
MOV SBUF,#0
JNB TI,$
CLR TI
CLR F1
SETB ES
SETB TR0
DETECT2:
JB F1,DETECT1
CALL DISP
JMP DETECT2
DETECT1:
INC R2
DJNZ R3,DETECT3
MOV DISPRAM1,TMP1
MOV DISPRAM2,TMP2
MOV DISPRAM3,TMP3
MOV DISPRAM4,TMP4
MOV DISPRAM5,TMP5
KEYSCAN58:
;******************
JMP MAIN1
MYT0:
PUSH ACC
CLR TR0
CLR TF0
MOV TH0,#0
MOV TL0,#35
INC T0TEMP
MOV A,T0TEMP
CJNE A,#20,MYT0EXIT
MOV T0TEMP,#0
SETB F1
MYT0EXIT:
SETB TR0
POP ACC
RETI
MYSBUFINT:
CLR ES
JNB RI,MYSBUFINTEXIT
CLR RI
MOV STATION,SBUF
JNB RI,$
CLR RI
MOV SPEED,SBUF
JNB RI,$
CLR RI
MOV ALARM,SBUF
MOV A,STATION
CALL BIN_TO_BCD
MOV DISPRAM5,R6
MOV DISPRAM4,R7
MOV A,SPEED
CALL BIN_TO_BCD
MOV DISPRAM3,R5
MOV DISPRAM2,R6
MOV DISPRAM1,R7
MYSBUFINTEXIT:
SETB ES
RETI
BIN_TO_BCD:
MOV B,#100
DIV AB
MOV R5,A
MOV A,B
MOV B,#10
DIV AB
MOV R6,A
MOV R7,B
RET
BCD_TO_BIN:
MOV B,R5
MOV A,#100
MUL AB
MOV BCDBYTETEMP1,A
MOV B,R6
MOV A,#10
MUL AB
ADD A,R7
ADD A,BCDBYTETEMP1
MOV BCDBYTETEMP1,A
MOV A,B
JZ BCD_TO_BIN1
MOV BCDBYTETEMP1,#151
BCD_TO_BIN1:
MOV A,BCDBYTETEMP1
RET
KEYIN:
CLR F0
MOV B,#55H ;IF A=55H THEN NO KEY PRESS
CLR P1.6
CLR P1.7
MOV DPTR,#KEYPORT
MOVX A,@DPTR
CPL A
JZ KEYINEXIT1
SETB P1.7 ;P1.6=0 P1.7=1
MOVX A,@DPTR
MOV R2,#8
MOV R1,#1
KEYIN2:
RRC A
JNC KEYIN1
INC R1
DJNZ R2,KEYIN2
SETB P1.6 ;P1.6=1 P1.7=0
CLR P1.7
MOVX A,@DPTR
MOV R2,#8
MOV R1,#1
KEYIN3:
RRC A
JNC KEYIN4
INC R1
DJNZ R2,KEYIN3
KEYIN4:
MOV A,R1
ADD A,#7
JMP KEYINEXIT
KEYIN1:
MOV A,R1
DEC A
KEYINEXIT:
CJNE A,#10,$+3
JNC KEYINEXIT2
SETB F0 ;F0=1 THEN IS NUMBER KEY
KEYINEXIT2:
MOV B,A
CLR P1.6
CLR P1.7
KEYINEXIT3:
MOVX A,@DPTR
CPL A
JZ KEYINEXIT1
PUSH DPH
PUSH DPL
CALL DISP
POP DPL
POP DPH
JMP KEYINEXIT3
KEYINEXIT1:
MOV A,B
RET
DISP_DEL:
PUSH 06H
PUSH 07H
MOV R6,#1
DISP_DEL1:
MOV R7,#200
DJNZ R7,$
DJNZ R6,DISP_DEL1
POP 07H
POP 06H
RET
DISP:
PUSH 02H
MOV DPTR,#LED1
MOV R0,#DISPRAM1
MOV R2,#3
DISP1:
MOV A,@R0
CALL GETTAB
MOVX @DPTR,A
INC R0
INC DPTR
CALL DISP_DEL
DJNZ R2,DISP1
MOV DPTR,#LED2
MOV R0,#DISPRAM4
MOV R2,#2
DISP2:
MOV A,@R0
CALL GETTAB
MOVX @DPTR,A
INC R0
INC DPTR
CALL DISP_DEL
DJNZ R2,DISP2
POP 02H
RET
GETTAB:
INC A
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;'0-9'
DB 0BFH,0BFH,88H,83H,0C6H,0A1H,86H,8EH,8CH ;'NO DISP, A -- F P'
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -