我比較笨,搞了很久終于自己寫好了溫度顯示
用的本論壇的開發板
數據口接P1.7
沒有小數位了
共享大家幫我看看
ORG 0000H
TRANS_BIT EQU 20H
AJMP MAIN
ORG 0030H
MAIN:
CLR EA
LCALL INITIAL
MOV A,#0CCH
LCALL WRITE
MOV A,#44H
LCALL WRITE
MOV R1,#250
DJNZ R1,$
MOV R1,#100
DJNZ R1,$ ;等待700us
LCALL INITIAL
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH
LCALL WRITE
LCALL READ
MOV R7,A
LCALL READ
MOV R6,A
LCALL TRANSFER
LCALL DISP
LJMP MAIN
;***********************
;初始化芯片子函數
;DS1820接p1.7
;***********************
INITIAL:
MOV R2,#4 ;找不到?找四次
INT2:
CLR P1.7
MOV R1,#250
DJNZ R1,$
SETB P1.7
MOV R1,#30
DJNZ R1,$
CLR C
ORL C,P1.7
JNC INT3
DJNZ R2,INT2
SETB P1.4
INT3: CLR P1.4
MOV P0,#00H
DELAY: MOV R1,#200
DJNZ R1,$
RET
;***********************
;寫子函數
;P1.7口接ds1820
;***********************
WRITE:
CLR EA
MOV R3,#8
WR1: SETB P1.7
MOV R4,#8
RRC A
CLR P1.7
WR3: DJNZ R4,WR3
MOV P1.7,C
MOV R4,#25
WR5: DJNZ R4,WR5
DJNZ R3,WR1
SETB P1.7
RET
;***********************
;讀子函數
;P1.7口接ds1820
;***********************
READ:
CLR EA
MOV R6,#8
RD1: CLR P1.7
MOV R4,#4
NOP
SETB P1.7
RD2: DJNZ R4,RD2
MOV C,P1.7
RRC A
MOV R5,#25
RD3: DJNZ R5,RD3
DJNZ R6,RD1
SETB P1.7
RET
;***********************
;將讀出的數據轉換
;低字節在R7中,高字節在R6中
;***********************
TRANSFER:
MOV A,R6
JNB ACC.3, T2
MOV A,R6
CPL A
MOV R6,A
MOV A,R7
CPL A
MOV R7,A
MOV A,R7
ADD A, #1
MOV R7,A
MOV A,R6
ADDC A,#0
MOV R6, A
T2:
MOV A,R7
ANL A,#0F0H
MOV R7,A
MOV A,R6
ANL A,#07H
MOV R6,A
MOV TRANS_BIT,R6
MOV R0,#20H
MOV A,R7
XCHD A,@R0
MOV R0,A
SWAP A
RET
;***********************
;將讀出的溫度轉化為bcd碼顯示
;***********************
DISP:
MOV B,#10
DIV AB
MOV DPTR ,#NUMTAB
MOVC A, @A+DPTR
MOV R0,A
MOV A,B
MOVC A,@A+DPTR
MOV R1,A
MOV P0, #0EFH
SETB P2.1
CLR P2.1
MOV P0,R0
SETB P2.0
CLR P2.0
MOV R2,#250
DJNZ R2,$
MOV P0, #0DFH
SETB P2.1
CLR P2.1
MOV P0,R1
SETB P2.0
CLR P2.0
MOV R2,#250
DJNZ R2,$
NUMTAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;
; 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
RET
AJMP MAIN
END
|