|
M{M6O5DE0789~05)F_I2)IW.png (58.57 KB, 下載次數(shù): 17)
下載附件
2019-5-30 00:20 上傳
我的仿真圖也改了下,用的共陽極數(shù)碼管,自己也用了別的顯示程序測(cè)了,沒得問題。但是我程序一仿真數(shù)碼管就沒得動(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, #0FFH
- 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
- JNB FLAG, ZXD
- ACALL RESET
- MOV A, #0CCH ;跳過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, #9
- DJNZ R3, [ DISCUZ_CODE_1 ]nbsp;
- MOV C, DQ
- MOV R3, #23
- DJNZ R3, [ DISCUZ_CODE_1 ]nbsp; ;等待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
- CLR P2.0
- ACALL DELAY
- SETB P2.0
- MOV A, SHI
- MOVC A, @A+DPTR
- MOV P0, A
- CLR P2.1
- ACALL DELAY
- SETB P2.1
- MOV A, GEW
- MOVC A, @A+DPTR
- MOV P0, A
- CLR P2.2
- ACALL DELAY
- SETB P2.2
- MOV P0, #39H ;顯示c代碼
- CLR P2.3
- ACALL DELAY
- SETB P2.3
- ACALL BJ
- JB K1, LOOP3
- JB K2, JIAN
- JB K3, JIA
- SJMP DISPLAY
- LOOP3: LJMP LOOP2
- ;**********************顯示段碼(共陽)*********************
- 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
復(fù)制代碼
|
|