LCD_E BIT P3.4
LCD_RS BIT P3.5
LCDADDR EQU 6000H
ORG 0000H
MAIN: MOV @R0,30H
MOV DPTR,#LCDADDR
ACALL CLEAR
ACALL INIT_LCD
MOV R0,#1
MOV R1,#0
ACALL GOTOXY
MOV R2,#0
RETURN:
MOV A,R2
ACALL DISPLAYSTRING2
INC R2
CJNE R2,#8,RETURN
MOV R0,#1
MOV R1,#12
ACALL GOTOXY
MOV A,#19
ACALL DISPLAYSTRING2
MAIN1:
MOV R0,#1
MOV R1,#8
ACALL GOTOXY
ACALL READADC
ACALL CALADC
MOV A,R0
ADD A,#9
ACALL DISPLAYSTRING2
MOV A,#8
ACALL DISPLAYSTRING2
MOV A,R1
MOV B,#10
DIV AB
ADD A,#9
ACALL DISPLAYSTRING2
MOV A,B
ADD A,#9
ACALL DISPLAYSTRING2
SJMP MAIN1
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0CH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
MOV A,#0C0H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
MOV DPTR,#LCDADDR
SETB LCD_E
CLR LCD_RS
MOVX @DPTR,A
CLR LCD_E
ACALL WAIT_LCD
RET
WRITETEXT:
MOV DPTR,#LCDADDR
SETB LCD_E
SETB LCD_RS
MOVX @DPTR,A
CLR LCD_E
ACALL WAIT_LCD
RET
WAIT_LCD:
MOV R7,#10
L1:
MOV R6,#250
DJNZ R6,$
DJNZ R7,L1
RET
DISPLAYSTRING2:
MOV DPTR,#MESSAGE
MOVC A,@A+DPTR
ACALL WRITETEXT
RET
MESSAGE: DB "VOLTAGE .0123456789V"
READADC:
MOV DPTR,#4000H
MOV A,#00H
MOVX @DPTR,A
ACALL DELAY_ADC
MOVX A,@DPTR
MOV R0,A
RET
DELAY_ADC:
MOV R5,#100
DJNZ R5,$
RET
GOTOXY:
CJNE R0,#1,HANG2
MOV A,#80H
BACK: ADD A,R1
ACALL WRITECOM
RET
HANG2:
MOV A,#0C0H
SJMP BACK
CALADC:
MOV A,R0
MOV B,#51
DIV AB
MOV R0,A
MOV A,#5
MUL AB
MOV B,#51
DIV AB
MOV R1,A
MOV A,#5
MUL AB
MOV B,#51
DIV AB
MOV R2,A
MOV A,#5
MUL AB
MOV B,#51
DIV AB
CJNE A,#5,KHAC
KHAC: JC NEXT
INC R2
NEXT: MOV A,R1
MOV B,#10
MUL AB
ADD A,R2
MOV B,#2
MUL AB
MOV R1,A
RET
END