|
我的仿真圖也改了下,用的共陽(yáng)極數(shù)碼管,自己也用了別的顯示程序測(cè)了,沒(méi)得問(wèn)題。但是我程序一仿真數(shù)碼管就沒(méi)得動(dòng)靜
程序:TEMP_ZH EQU 30H ;溫度存放單元
TEMPL EQU 25H ;低字節(jié)存放
TEMPH EQU 26H ;高字節(jié)存放
TEMP_TH EQU 27H ;高溫報(bào)警溫度
GEW EQU 24H ;定義個(gè)位
SHI EQU 23H ;定義十位
BAI EQU 22H ;定義百位
K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
BUZ EQU P2.4 ;蜂鳴
FLAG EQU 21H.0 ;溫度傳感器標(biāo)志位
DQ EQU P3.3
;******************主程序************************
ORG 0000H
SJMP START
ORG 0030H
START: MOV SP, #60H
MOV P0, #0FFH ;讓p0輸出高電平,熄滅數(shù)碼管
MOV P2, #0F0H
MOV R7, #0
MIAN: MOV TEMP_TH, #85 ;設(shè)立高溫報(bào)警溫度為85
LOOP4: ACALL RESET ;18B20復(fù)位程序
LOOP1: JNB FLAG, LOOP4
LOOP: ACALL ZXD ;調(diào)用讀取溫度子程序
ACALL TURN ;調(diào)用數(shù)據(jù)轉(zhuǎn)化程序
ACALL DISPLAY ;調(diào)用顯示程序
LOOP2: ACALL KEY ;調(diào)用鍵盤
INC TEMP_ZH
JMP LOOP
;*******************DS18B20復(fù)位初始化程序************************
RESET: SETB DQ
NOP
NOP
CLR DQ
MOV R1, #3
DLY: MOV R0, #107
DJNZ R0, $
DJNZ R1, DLY ;延時(shí)648μs程序
SETB DQ ;拉高數(shù)據(jù)線
NOP
NOP
NOP
MOV R0, #25H
T2: JNB DQ, T3
DJNZ R0, T2
JMP T4
T3: SETB FLAG
JMP T5
T4: CLR FLAG
JMP T7
T5: MOV R0, #249
T6: DJNZ R0, T6
T7: SETB DQ
RET
;*************************溫度讀寫指令**************************
ZXD: MOV SP, #60H
ACALL RESET
JNB FLAG, ZXD
MOV A, #0CCH ;跳過(guò)rom指令
ACALL WRITE
MOV A, #44H ;溫度轉(zhuǎn)換指令
ACALL WRITE
MOV R2, #6
DLY1: MOV R1, #255
DLY2: MOV R0, #255
DJNZ R0, $
DJNZ R1, DLY2
DJNZ R2, DLY1 ;延時(shí)780ms
ACALL RESET
MOV A, #0CCH
ACALL WRITE
MOV A, #0BEH ;讀取寄存器指令
ACALL WRITE
ACALL READ ;讀取溫度
RET
;*************************寫入DS18B20程序***********************
WRITE: MOV R2, #8 ;一共8位數(shù)據(jù)
CLR C
WR1: CLR DQ
MOV R3, #6
DJNZ R3, $
RRC A ;右移A將數(shù)據(jù)給C
MOV DQ, C ;寫入一個(gè)位
MOV R0, #23
DJNZ R0, $
SETB DQ
NOP
DJNZ R2, WR1 ;循環(huán)8次
SETB DQ
RET
;************************讀DS18B20程序****************************
READ: MOV R4, #2
MOV R1, #TEMPL ;將25H,26H寫入
RE0: MOV R2, #8
RE1: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ ;拉高數(shù)據(jù)線
MOV R3, #7
DJNZ R3, $
MOV C, DQ
MOV R3, #23
DJNZ R3, $ ;等待50us
RRC A
DJNZ R2, RE1 ;讀下個(gè)位
MOV @R1, A
INC R1
DJNZ R4, RE0
RET
;************************數(shù)據(jù)轉(zhuǎn)化程序******************************
TURN: ANL 26H, #07H ;取后3位
ANL 25H, #0F0H ;取前4位
MOV A, 25H
ORL 26H, A
MOV A, 26H
SWAP A ;高低互換
MOV TEMP_ZH, A
RET
;*************************溫度比較及報(bào)警**********************************
BJ: MOV A, TEMP_TH
SUBB A, TEMP_ZH
JC TCL
JNC TCL1
RET
TCL1: CLR BUZ
RET
TCL: SETB BUZ
RET
;************************顯示程序***************************************
DISPLAY:MOV A, TEMP_ZH
MOV B, #100
DIV AB ;商送A,余送B
MOV BAI, A
MOV A, B
MOV B, #10
DIV AB
MOV SHI, A
MOV GEW, B
MOV DPTR, #TAB
MOV A, BAI
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
ACALL DELAY
CLR P2.0
MOV A, SHI
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
ACALL DELAY
CLR P2.1
MOV A, GEW
MOVC A, @A+DPTR
MOV P0, A
SETB P2.2
ACALL DELAY
CLR P2.2
MOV P0, #39H ;顯示c代碼
SETB P2.3
ACALL DELAY
CLR P2.3
ACALL BJ
JB K1, LOOP3
JB K2, JIAN
JB K3, JIA
SJMP DISPLAY
LOOP3: LJMP LOOP2
;**********************顯示段碼(共陽(yáng))*********************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;*****************************小延時(shí)程序***********************************
DELAY: MOV R0, #25
A1: MOV R1, #20
A2: DJNZ R1, A2
DJNZ R0, A1
RET
;****************************鍵盤程序***************************************
KEY: CJNE R7,#00H,HD
RET
JIAN: DEC TEMP_ZH ;TEMP_ZH位地址減一
INC R7
ACALL DISPLAY
JIA: INC TEMP_ZH ;TEMP_ZH位地址加一
DEC R7
ACALL DISPLAY
RET
HD: INC TEMP_ZH
DJNZ R7, HD
RET
END
求大佬指點(diǎn),謝謝了
|
-
|