AD_CS BIT P3.5 ;使能接口
AD_CLK BIT P3.4 ;时钟接口
AD_DAT BIT P3.3 ;数据输入,输出接口
RS BIT P2.0 ;RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器
WR BIT P2.1 ;WR为读写信号线,高电平时进行读操作,低电平时进行写操作
E BIT P2.2 ;E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令
XZ BIT P2.3
J1 BIT P2.4
QD BIT P2.5
TC BIT P2.6 ;
BJGW EQU 5AH
ORG 00H
AJMP MIAN1
ORG 03H
AJMP SETDY
ORG 30H
MIAN1: MOV B,#00H
MOV SP,#26H
SETB EA
SETB EX0
MOV 65H,#16
LCALL LCD
MOV P0,#80H
LCALL ZLSR
LCALL DELAY
MOV R1,#0
MOV R2,#16
MOV 58H,#05H
MOV 47H,#0C1H
MOV BJGW,#20H
KK: MOV A,R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P0,A
LCALL SJSR
LCALL DELAY
INC R1
DJNZ R2,KK
MOV R1,#0
MOV R2,#16
MOV P0,#0C1H
LCALL ZLSR
LCALL DELAY
MOV DPTR,#TAB2
KK1: MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
LCALL SJSR
LCALL DELAY
INC R1
DJNZ R2,KK1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MIAN: LCALL ADCONV
LCALL AD_CHULI
LCALL LCDDISP
JMP MIAN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD: MOV P0,#01H
LCALL ZLSR
LCALL DELAY
MOV P0,#06H
LCALL ZLSR
LCALL DELAY
MOV P0,#0CH
LCALL ZLSR
LCALL DELAY
MOV P0,#3CH
LCALL ZLSR
LCALL DELAY
MOV P0,#0CH
LCALL ZLSR
LCALL DELAY
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZLSR: CLR RS
CLR WR
CLR E
NOP
NOP
SETB E
RET
SJSR: SETB RS
CLR WR
CLR E
NOP
NOP
SETB E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BJ: MOV A,4AH
NOP
NOP
NOP
CJNE A,#00111110B,BJTC
CLR P3.7
BB: JB TC,$
SETB P3.7
BJTC: RET
;;;;;;;;;;;;;;;;;;中断响应;;;;;
SETDY: PUSH ACC
PUSH PSW
LCALL LCDTZ
LCALL LCD2
MOV A,#00111110B
LCALL AD_CHULI
LCALL LCDDISP
GB:
JB XZ,TUIC
LCALL DEL
JNB XZ,$
INC BJGW
LCALL AD_CHULI
LCALL LCDDISP
JMP GB
TUIC: JB TC,GB
MOV BJGW,A
LCALL LCD
LCALL LCDTZ
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD2:
MOV A,47H
MOV P0,A
LCALL ZLSR
LCALL DELAY
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCDTZ: MOV P0,#80H
LCALL ZLSR
LCALL DELAY
MOV R1,#0
MOV R2,#16
KT: MOV A,R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P0,A
LCALL SJSR
LCALL DELAY
INC R1
DJNZ R2,KT
MOV R1,#0
MOV R2,#16
MOV P0,#0C1H
LCALL ZLSR
LCALL DELAY
MOV DPTR,#TAB3
KT1: MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
LCALL SJSR
LCALL DELAY
INC R1
DJNZ R2,KT1
RET
ADCONV: SETB AD_CS ;一个转换周期开始
CLR AD_CLK
CLR AD_CS ;CS置0,片选有效
SETB AD_DAT ;DI置1,起始位
NOP
SETB AD_CLK ;第一个脉冲
CLR AD_DAT ;在负跳变之前加一个DI反转操作
CLR AD_CLK
SETB AD_DAT ;DI置1,设为单通道
NOP
SETB AD_CLK ;第二个脉冲
CLR AD_DAT
CLR AD_CLK
CLR AD_DAT ;DI置0,选择通道0
NOP
SETB AD_CLK ;第三个脉冲
SETB AD_DAT
CLR AD_CLK
NOP
SETB AD_CLK ;第四个脉冲
MOV R1,#08H ;计数器初值,读取8位数据,
AD_READ:
CLR AD_CLK ;下降沿
MOV C,AD_DAT ;读取DO端数据
RLC A ;C移入A,高位在前
SETB AD_CLK ;下一个脉冲
DJNZ R1,AD_READ ;没读完继续
SETB AD_CS
MOV P1,A
MOV 4AH,A
RET
AD_CHULI:
CLR C
MOV R5,#00H ;十进制转换的低位寄存器
MOV R4,#00H ;十进制转换的高位寄存器
MOV R3,#08H
MOV B,#2
MUL AB ;十进制调整的次数
AD_CHULI1:
RLC A
MOV R2,A ;送 R2 保存
MOV A,R5 ;(R5)乘2加C
ADDC A,R5
DA A ;做十进制调整
MOV R5,A ;结果存回R5
MOV A,R4 ;(R4)乘2加C
ADDC A,R4
MOV R4,A ;结果存回R4
MOV A,R2
DJNZ R3,AD_CHULI1 ;是否转换完?
MOV A,R5 ;(R5)乘2
ADDC A,R5
DA A
MOV R5,A ;结果存回R5
MOV A,R4
ADDC A,R4 ;(R4)乘2加C
DA A
MOV R4,A ;结果存回R4
RET
LCDDISP:
MOV A,R4
ADD A,#30H
MOV P0,#0CAH
LCALL ZLSR
LCALL DELAY
MOV P0,A
LCALL SJSR
LCALL DELAY
MOV P0,#0CCH
LCALL ZLSR
LCALL DELAY
MOV A,R5
MOV B,#16
DIV AB
MOV 40H,A
ADD A,#30H
MOV P0,A
LCALL SJSR
LCALL DELAY
MOV 41H,B
MOV A,41H
ADD A,#30H
MOV P0,A
LCALL SJSR
LCALL DELAY
RET
DEL: MOV 20H,#255
D1: MOV 21H,#10
DJNZ 21H,$
DJNZ 20H,D1
RET
DELAY: MOV 50H,#10
D2: MOV 51H,#50
DJNZ 51H,$
DJNZ 50H,D2
RET
TAB1: DB " XG10501 Jin ke ";
TAB2: DB "Voltage: . V " ;
TAB3: DB "VOLTAGE: . V"
END