📄 调整脉冲.asm
字号:
;画脉冲程序,按键13,9时,调整周期,按键10,14时,调整幅度
CON82551 EQU 0EFFFH
PA82551 EQU 0EFFCH
PB82551 EQU 0EFFDH
PC82551 EQU 0EFFEH
CON8255C EQU 0FFFFH
PA8255C EQU 0FFFCH
PB8255C EQU 0FFFDH
PC8255C EQU 0FFFEH
COM EQU 50H
DAT EQU 40H
XX EQU 60H
YY EQU 61H
ZZ EQU 62H
NUM EQU 63H
LRI EQU 64H
LRD EQU 65H
PINLV EQU 66H
FUDU EQU 68H
SHANG EQU 70H
YU EQU 71H
KEY EQU 72H
ORG 0000H
LJMP MAIN
ORG 0035H
MAIN: LCALL CSH
LCALL DISP
LOOP0: LCALL SCAN
CJNE A,#0FFH,LOOP1
LCALL DISP
LJMP LOOP0
LOOP1: LCALL DELAY1
LCALL SCAN
CJNE A,#0FFH,LOOP2
LJMP LOOP0
LOOP2: MOV KEY,A
LCALL SCAN
CJNE A,#0FFH,LOOP2 ;增大周期
MOV A,KEY
CJNE A,#7EH,AN1
LCALL CLEAR
LCALL MS40
INC PINLV
LJMP OU
AN1: CJNE A,#7DH,AN2 ;增大幅度
LCALL CLEAR
LCALL MS40
MOV R4,FUDU
CJNE R4,#23,AA ;判断是否增加到最大值
LJMP OU
AA: INC FUDU
LCALL SET_FUDU
LJMP OU
AN2: CJNE A,#0BEH,AN3 ;减小周期
LCALL CLEAR
LCALL MS40
DEC PINLV
LJMP OU
AN3: CJNE A,#0BDH,LOOP0 ;减小幅度
LCALL CLEAR
LCALL MS40
MOV R4,FUDU
CJNE R4,#0,A3 ;判断是否到最小值
LJMP OU
A3: DEC FUDU
LCALL SET_FUDU
OU: LCALL DISP
LCALL MS40
LJMP LOOP0
CSH:
MOV DPTR,#CON8255C
MOV A,#80H
MOVX @DPTR,A ;设8255PA,PB,PC为输出方式
MOV DPTR,#CON82551 ;初始化程序,写入8255控制字
MOV A,#80H
MOVX @DPTR,A
MOV COM,#3EH
LCALL OUTI ;关液晶显示器
LCALL MS40
LCALL MS40
LCALL MS40
MOV COM,#3FH
LCALL OUTI ;开液晶显示
LCALL CLEAR ;清屏
LCALL MS40
LCALL MS40
LCALL MS40
MOV PINLV,#6
MOV FUDU,#0
MOV ZZ,#0
LCALL SET_FUDU
LCALL START_LINE
MOV XX,#3 ;设置起始行
MOV YY,#00
MOV LRI,#09H
MOV LRD,#0DH
RET
DISP:
MOV R3,#00
D1: MOV R5,PINLV
DIS1: MOV XX,#3 ;画脉冲的上半部分
MOV R4,SHANG
SSS0: DEC XX ;改变幅度
DJNZ R4,SSS0
LCALL SET_PAGE
LCALL SET_LIE
MOV R4,YU ;修正幅度的改变值
MOV A,#01H
S1: RR A
DJNZ R4,S1
MOV DAT,A
LCALL OUTD
INC YY
INC R3
CJNE R3,#64,SS1 ;判断是否画完半屏
LJMP EX
SS1: DJNZ R5 ,DIS1
MOV XX,#4 ;画下半部分
MOV R5,PINLV
MOV R4,SHANG ;调整幅度
SSS1: INC XX
DJNZ R4,SSS1
DIS2: LCALL SET_PAGE
LCALL SET_LIE
MOV R4,YU ;修正幅度
MOV A,#80H
S2: RL A
DJNZ R4,S2
MOV DAT,A
LCALL OUTD
INC YY
INC R3
CJNE R3,#64,SS2 ;判断是否画完半屏
LJMP EX
SS2: DJNZ R5,DIS2
CJNE R3,#64,D1
EX: RET
;幅度处理子程序
SET_FUDU: MOV A,FUDU
MOV B,#8
DIV AB
MOV YU,B
MOV R4,B
CJNE R4,#0,JIA
LJMP OU1
JIA: INC A
OU1: MOV SHANG,A
RET
;起始行设置子程序
START_LINE: MOV A,ZZ
ADD A,#0C0H
MOV LRI,#09H
MOV COM,A
LCALL OUTI
RET
;设置页地址
SET_PAGE: MOV A,XX
ADD A,#0B8H
MOV COM,A
LCALL OUTI
RET
;设置列地址
SET_LIE: MOV A,YY
ADD A,#040H
MOV COM,A
LCALL OUTI
RET
SET_LRI: MOV A,LRI
MOV DPTR,#PC8255C
MOVX @DPTR,A
RET
SET_LRD: MOV A,LRD
MOV DPTR,#PC8255C
MOVX @DPTR,A
RET
SCAN: MOV DPTR,#CON82551
MOV A,#81H
MOVX @DPTR,A ;置PC口第四位输入,高四位输出
MOV DPTR,#PC82551
MOV A,#0FH
MOVX @DPTR,A ;高四位输出一
MOVX A,@DPTR ;读取低四位
ANL A,#0FH
MOV B,A ;保存PC口的低四位
MOV DPTR,#CON82551
MOV A,#88H
MOVX @DPTR,A ;置PC口低四位输出,高四位输入
MOV DPTR,#PC82551
MOV A,#0F0H ;低四位输出一
MOVX @DPTR,A
MOVX A,@DPTR ;读取高四位
ANL A,#0F0H
ORL A,B ;取得键盘码
RET
DELAY1:MOV R3,#20 ;延时5ms
D11:MOV R4,#123
NOP
D12:DJNZ R4,D12
DJNZ R3,D11
RET
;清屏
CLEAR: MOV XX,#00H
NE_PAG: MOV R5,#00
MOV YY,#0
LCALL SET_PAGE
LCALL SET_LIE
LP1: MOV DAT,#00H
LCALL OUTD
INC R5
CJNE R5,#64,LP1
INC XX
MOV R4,XX
CJNE R4,#8,NE_PAG
RET
;写控制数据子程序,入口参数COM
OUTI: PUSH 83H
PUSH 82H
PUSH 0E0H
LCALL SET_LRI
MOV A,COM
MOV DPTR,#PB8255C
MOVX @DPTR,A
MOV A,#00H
MOV DPTR,#CON8255C
MOVX @DPTR,A ;E=0
MOV A,#01H
MOVX @DPTR,A ;E=1
POP 0E0H
POP 82H
POP 83H
RET
;写显示数据子程序,入口参数DAT
OUTD: PUSH 83H
PUSH 82H
PUSH 0E0H
LCALL SET_LRD
MOV A,DAT
MOV DPTR,#PB8255C
MOVX @DPTR,A
MOV A,#00H
MOV DPTR,#CON8255C
MOVX @DPTR,A ;E=0
MOV A,#01H
MOVX @DPTR,A ;E=1
POP 0E0H
POP 82H
POP 83H
RET
MS40: MOV R7,#0E8H
MS2: MOV R6,#0FFH
MS1: DJNZ R6,MS1
DJNZ R7,MS2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -