发表于:2004-10-31 10:10:00
129楼
TEMPLE_L EQU 29H
TEMPLE_H EQU 28H
WR_COM EQU 0F800H
RD_STA EQU 0F802H
WR_DAT EQU 0F801H
RD_DAT EQU 0F803H
a_bit equ 20H
b_bit equ 21H
c_bit equ 22H
d_bit equ 24H
e_bit equ 25H
f_bit equ 26H
FLAG1 EQU 38H
DQ EQU P1.0
ORG 0000H
MOV 23H,#2EH
MOV SP,#60h
ACALL DELAY
ACALL INIT_LCD
RELOOP:
CLR EA
MOV A,#84H
ACALL WRITE_COM
LCALL GET_TEMPER
MOV A,29H
RR A
ANL A,#00000111B
CJNE A,#0,GO1
MOV 24H,#30H
MOV 25H,#30H
MOV 26H,#30H
GO1:CJNE A,#1,GO2
MOV 24H,#31H
MOV 25H,#32H
MOV 26H,#35H
GO2:CJNE A,#2,GO3
MOV 24H,#32H
MOV 25H,#35H
MOV 26H,#30H
GO3:CJNE A,#3,GO4
MOV 24H,#33H
MOV 25H,#37H
MOV 26H,#35H
GO4:CJNE A,#4,GO5
MOV 24H,#35H
MOV 25H,#30H
MOV 26H,#30H
GO5:CJNE A,#5,GO6
MOV 24H,#36H
MOV 25H,#32H
MOV 26H,#35H
GO6:CJNE A,#6,GO7
MOV 24H,#37H
MOV 25H,#35H
MOV 26H,#30H
GO7:CJNE A,#7,GO8
MOV 24H,#38H
MOV 25H,#37H
MOV 26H,#35H
GO8:
MOV A,29H
MOV C,40H
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
mov a,29H
mov b,#100
div ab
ORL A,#00110000B
mov a_bit,a
mov A,b
mov b,#10
div ab
ORL A,#00110000B
mov b_bit,A
mov c_bit,b
mov A,c_bit
ORL A,#00110000B
mov c_bit,a
MOV A,20H
CJNE A,#30H,BB1
A1:MOV A,21H
CJNE A,#30H,BB2
A2:MOV A,22H
ACALL WRITE_DAT
MOV A,23H
ACALL WRITE_DAT
MOV A,24H
ACALL WRITE_DAT
MOV A,25H
ACALL WRITE_DAT
MOV A,26H
ACALL WRITE_DAT
LCALL DELAY2
AJMP RELOOP
BB2:MOV A,21H
ACALL WRITE_DAT
AJMP A2
BB1:MOV A,20H
ACALL WRITE_DAT
AJMP A1
GET_TEMPER:
SETB DQ
LCALL INIT_1820
JB FLAG1,TSS2
RET
TSS2:
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#44H
LCALL WRITE_1820
ACALL DELAY100
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH
LCALL WRITE_1820
LCALL READ_18200
RET
INIT_1820:
CLR EA
SETB DQ
NOP
CLR DQ
MOV R0,#250;主机发出延时537微秒的复位脉冲
DJNZ R0,$
SETB DQ;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB DQ,TSR3;等待18B2回应
DJNZ R0,TSR2
LJMP TSR4
TSR3:
SETB FLAG1
LJMP TSR5
TSR4:
CLR FLAG1
LJMP TSR7
TSR5:
MOV R0,#110
TSR6:
DJNZ R0,TSR6
TSR7:
SETB DQ
RET
WRITE_1820:
CLR EA
MOV R2,#8
CLR C
WR1:
SETB DQ
MOV R3,#6
CLR DQ
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
READ_18200:
CLR EA
MOV R4,#2
MOV R1,#29H
RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#07
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
INIT_LCD:
MOV A,#38H
ACALL WRITE_COM
MOV A,#01H
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
MOV A,#0CH
ACALL WRITE_COM
RET
WRITE_COM:
PUSH DPH
PUSH DPL
MOV DPTR,#WR_COM
MOVX @DPTR,A
ACALL DELAY
POP DPL
POP DPH
RET
WRITE_DAT:
PUSH DPH
PUSH DPL
MOV DPTR,#WR_DAT
MOVX @DPTR,A
ACALL DELAY
POP DPL
POP DPH
RET
DELAY:
MOV R5,#20H
DELAY1:
MOV R4,#20H
DJNZ R4,$
DJNZ R5,DELAY1
RET
DELAY2: MOV R5,#10
DD: MOV R4,#100
DJNZ R4,$
DJNZ R5,DD
RET
DELAY100: MOV R4,#100
D222: MOV R5,#248
DJNZ R5,$
DJNZ R4,D222
RET
END