📄 vfd_max192_adc.asm
字号:
;器件:10位AD转换器MAX192应用
;测量电压0~40V,并用VFD显示
RST BIT P1.1
RS BIT P1.0
RW BIT P1.3
E BIT P1.2
M BIT P1.7
SSTRB BIT P2.0
CS BIT P2.1
SCLK BIT P2.2
DOUT BIT P3.0
DIN BIT P3.1
FLAG BIT 20H
CLKF BIT 21H
ORG 0000H
AJMP START
START: CLR FLAG
CLR CLKF
CLR RS
CLR RW
CLR E
NOP
NOP
NOP
NOP
MOV P0,#0CH ;开显示屏
NOP
NOP
SETB E
nop
nop
CLR E
MOV P0,#14H ;字符滚动
NOP
NOP
NOP
SETB E
NOP
NOP
NOP
CLR E
MOV P0,#3AH ;8Bit接口,显示亮度为50%
SETB E
NOP
NOP
NOP
CLR E
NOP
NOP
NOP
;*************************************************
DIS1: MOV P0,#1 ;清屏
SETB E
NOP
NOP
NOP
CLR E
MOV R2,#84H ;第一行第4个字符开始显示
BACK:
MOV P0,R2
SETB E
NOP
NOP
CLR E
SETB RS
MOV P0,#'V'
SETB E
NOP
NOP
CLR E
CLR RS
MOV P0,#'o'
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
MOV P0,#'l'
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
MOV P0,#'t'
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
MOV P0,#':'
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
A_D: ACALL AD
ACALL TOBCD
ACALL BCDASC
MOV P0,#8AH
SETB E
NOP
NOP
CLR E
MOV A,34H
SUBB A,#30H ;最高位为0则消隐
JZ BL
MOV P0,34H
AJMP GO
BL: MOV P0,#' '
GO: SETB RS
SETB E
NOP
NOP
CLR E
CLR RS
MOV P0,33H
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
MOV P0,#'.'
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
MOV P0,32H
SETB RS
setb E
NOP
NOP
CLR E
CLR RS
AJMP A_D
;*******************************************
; 电压采集(A/D)
;*******************************************
AD: MOV R0,#30H
MOV A,#8EH
SETB CS ;采集前的准备
CLR SCLK
CLR DIN
SETB DOUT
CLR CS ;选通
MOV R1,#08H ;送控制字
L1: RLC A
MOV DIN,C
NOP
NOP
SETB SCLK
NOP
NOP
CLR SCLK
DJNZ R1,L1
NOP ;等待转换结束
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCLK
CLR DIN
MOV R1,#08H ;读出高8位
L2: CLR SCLK
NOP
NOP
SETB SCLK
NOP
NOP
MOV C,DOUT
RLC A
DJNZ R1,L2
MOV @R0,A ;读出低8位
INC R0
MOV R1,#08H
L3: CLR SCLK
NOP
NOP
SETB SCLK
NOP
NOP
MOV C,DOUT
RLC A
DJNZ R1,L3
MOV @R0,A
CLR C ;C清零
MOV A,30H ;取有效位为15位(即量程扩大8倍,再乘以量化单位4)
RRC A ;15位有效位右移1位,即为实际值的数字量.
MOV 30H,A
MOV A,31H
RRC A
MOV 31H,A
RET
;*****************************************
; 两字节十六进制转BCD
;*****************************************
TOBCD: CLR A
MOV 32H,A
MOV 33H,A
MOV 34H,A
MOV R7,#10H
HTB: MOV A,31H
RLC A
MOV 31H,A
MOV A,30H
RLC A
MOV 30H,A
MOV A,32H
ADDC A,32H
DA A
MOV 32H,A
MOV A,33H
ADDC A,33H
DA A
MOV 33H,A
MOV A,34H
ADDC A,34H ;两字节两字节十六进制万位数不大于6,不用转换
MOV 34H,A
DJNZ R7,HTB
RET
;************************************************
; BCD转ASC(取BCD的高位两个字节转换,低字节舍弃)
;************************************************
BCDASC:MOV A,34H
ANL A,#0FH
ADD A,#30H
MOV 34H,A
MOV A,33H
ACALL HAS1
MOV 32H,A
XCH A,33H
SWAP A
ACALL HAS1
MOV 33H,A
RET
HAS1: ANL A,#0FH
ADD A,#30H
RET
;****************************************
;
;******************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -