📄 noname1.asm
字号:
ORG 00H
AJMP START
ORG 0003H
AJMP INSERT1 ;紧急停机,外中断0
ORG 000BH
AJMP INSERT2 ;定时器发脉冲
;*******************************
START: CLR P0
RS BIT P1.7
RW BIT P1.6
E BIT P1.5
DB0_DB7 DATA P1
;********************************
;MOV TMOD,#0
;MOV TL0,#0
;MOV TH0,#0
;SETB EA
;SETB ET0
;SETB TR0
;MOV R5,#50
;MOV SP,#60H
KS1: ACALL INIT
ACALL CLS
MOV A,#80H ;显示地址为第一行第一位
ACALL Write
MOV DPTR,#L1 ;显示 WELCOME!
ACALL PR_STRING
MOV A, #0C0H ;显示地址为第2行第一位
ACALL Write
MOV DPTR,#L2 ;显示start
ACALL PR_STRING
KS2: ACALL SCAN
CJNE R0, #01H, KS2 ;开始选择模式,只有按键1作用,其他按键无效
KS3: ACALL CLS
MOV A,#80H ;显示地址为第一行第一位
ACALL Write
MOV DPTR,#L3 ;显示 push-pull?
ACALL PR_STRING
MOV A, #0C1H ;显示地址为第2行第一位
ACALL Write
MOV A, #59H ;显示 Y
ACALL WriteDDR
MOV A, #0CEH ;显示地址为第2行第15位
ACALL Write
MOV A, #4EH ;显示 N
ACALL WriteDDR
KS4: ACALL SCAN
CJNE R0, #04H, WXCZ1 ;进入选择模式界面,按键4为返回,否则再判断
NOP
AJMP KS1
WXCZ1: CJNE R0, #03H, OTHER
NOP ;进入选择模式界面,按键3无效
AJMP KS4
OTHER: CJNE R0, #02H, PP ;进入选择模式界面,按键为2进入选择single或in-phase
KS5: ACALL CLS
MOV A,#80H ;显示地址为第一行第一位
ACALL Write
MOV DPTR,#L4 ;显示 SELECT:
ACALL PR_STRING
MOV A, #0C0H ;显示地址为第2行第一位
ACALL Write
MOV DPTR,#L5 ;显示SIG IN-PH
ACALL PR_STRING
KS6: ACALL SCAN ;键盘扫描
CJNE R0, #04H, WXCZ2 ;按键4的话返回上一级
NOP
AJMP KS3
WXCZ2: CJNE R0, #03H, INPH ;按键3的话无效
NOP
AJMP KS6
INPH: CJNE R0,#02H, SINGLE ;按键2的话同步注射 (50H)=02H
MOV 50H, #02H
AJMP ADJ ;跳转到微调
SINGLE: MOV 50H, #03H ;按键1的话单管注射 (50H)=03H
AJMP ADJ ;跳转到微调
PP: MOV 50H, #01H ; 推挽式 (50H)=01H
ADJ: ACALL CLS
MOV A,#80H ;显示地址为第一行第一位
ACALL Write
MOV DPTR,#L6 ;显示 ADJUST?
ACALL PR_STRING
MOV A, #0C0H ;显示地址为第2行第1位
ACALL Write
MOV DPTR,#L2 ;显示start
ACALL PR_STRING
KS7: ACALL SCAN
CJNE R0,#04H, WXCZ3 ;按返回键的话则按模式分别返回
MOV A, 50H
CJNE A, #01H , KS8
MOV 50H, A
AJMP KS3
KS8: MOV 50H, A
AJMP KS5
WXCZ3: CJNE R0,#03H, KONG ;按键3无效
NOP
AJMP KS7
KONG: CJNE R0,#02H, BEGAD ;按键2无效
NOP
AJMP KS7
BEGAD: NOP
AJMP BEGAD
;****************************************************************
SCAN: MOV R0, #00H
;JB P0.1, PAN2 ;判断P0.1脚,为高电平的话去判断P0.2,为低的话判断键盘
CLR C
MOV A, P0
ANL A, #0F0H
CJNE A, #00H, CHUDOU ;没有键按下就返回,否则先消除抖动
SJMP SCAN
RET
;***********************************************************
CHUDOU: ACALL DELAY
CJNE A, #00H, JUKEY1 ; 确实有按键发生的话就判断键值
SJMP SCAN ; 误动作的话就返回,继续扫描
RET
;*************************************************************
JUKEY1: CJNE A, #80H, JUKEY2 ;按键4的话给50H赋4
MOV R0, #04H
RET
;*************************************************************
JUKEY2: CJNE A, #40H, JUKEY3 ;按键3的话给50H赋3
MOV R0, #03H
RET
;**************************************************************
JUKEY3: CJNE A, #20H, JUKEY4 ;按键2的话给50H赋2
MOV R0, #02H
RET
;*************************************************************
JUKEY4: CJNE A, #10H, JUKEY5 ;按键1的话给50H赋1
MOV R0, #01H
RET
;*************************************************************
JUKEY5: ACALL CLS ;其他的话就显示错误,先清屏
MOV A,#85H ;显示地址为第一行第5位
ACALL Write
MOV DPTR,#L0 ;显示 ERROR!
ACALL PR_STRING
RET
;*************************************************************
L1: DB 20h,20h,20h,20h,57h,45h,4ch,43h,4fh,4dh,45h,20h,21H,00h ;显示 WELCOME!
L2: DB 73H,74H,61H,72H,74H,00H ; 显示 start
L3: DB 50H,55H,53H,48H,2DH,50H,55H,4CH,4CH,3FH,00H ;显示PUSH-PULL?
L4: DB 53H,45H,4CH,45H,43H,54H,00H ;显示SELSCT
L5: DB 73H,69H,67H,20H,20H,20H,20H,20H,20H,20H,69H,6EH,2DH,70H,68H,00H ;显示sig in-ph
L6: DB 41H,44h,4aH,55H,53H,54H,00H ;显示 ADJUST
;L2: DB 4DH,4FH,44H,00H ;显示 MOD
L0: DB 45H,52H,52H,4FH,52H,21H,00H ;显示 ERROR!
;L5: DB 4DH,4FH,44H,20H,4FH,46H,20H,4FH,50H,45H,00H ; MOD OF OPE
;L6: DB 4DH,41H,4EH,55H,20H,20H,20H,20H,41H,55H,54H,4FH,4DH,00H ; MANU AUTOM
;L7: DB 4DH,4FH,44H,20H,4FH,46H,20H,49H,4EH,4AH,00H ;MOD OF INJ
;******************************
INIT:
MOV A,#38H
LCALL Write
MOV A,#0EH
LCALL Write
MOV A,#06H
LCALL Write
RET
;*******************************
CheckBusy:
PUSH ACC
CB_Loop: CLR RS
SETB RW
CLR E
SETB E
MOV A,DB0_DB7
CLR E
JB ACC.7,CB_Loop
POP ACC
ACALL DELAY
RET
;********************************
Write:
ACALL CheckBusy
CLR E
CLR RS
CLR RW
SETB E
MOV DB0_DB7,ACC
CLR E
RET
;********************************
WriteDDR:
ACALL CheckBusy
CLR E
SETB RS
CLR RW
SETB E
MOV DB0_DB7,ACC
CLR E
RET
;**********************************
CLS:
MOV A,#01H
ACALL Write
RET
;**********************************
PR_STRING:
PUSH ACC
PR_LOOP: CLR A
MOVC A,@A+DPTR
JZ END_PR
ACALL WriteDDR ;?? writeDDR?
INC DPTR
AJMP PR_LOOP
END_PR: POP ACC
RET
;**********************************
DELAY:
MOV R6,#5
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;***********************************
INSERT1:
CPL P1.4 ;
PUSH ACC ;
PUSH PSW ;
CLR C ;
CLR TR0 ;
MOV A, TL0 ;
ADD A, #08H ;
ADD A, 30H ;
MOV TL0,A ;
MOV A,TH0 ;
ADDC A,31H ;
MOV TH0,A ;
SETB TR0 ;
POP PSW ;
POP ACC ;
RETI
;**********************************
INSERT2:
PUSH ACC
PUSH PSW
CLR P1.0
CLR P1.1
CLR TR0
POP PSW
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -