溫度傳感器是ds1621的
多點測溫是ds18B20的
希望對大家有所幫助
另外,求ds1621的多點測溫
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (42.78 KB, 下載次數: 57)
下載附件
2019-7-5 04:37 上傳
單片機匯編語言源程序如下:
- DQ BIT P1.0
- FLAG BIT 00H
- FLAG_NEG BIT 01H
- TEMP_L EQU 30H
- TEMP_H EQU 31H
- TEMP_INT EQU 32H
- TEMP_DP EQU 33H
- TEMP_100 EQU 34H
- TEMP_10 EQU 35H
- TEMP_1 EQU 36H
- WR_LCD BIT P3.6
- RD_LCD BIT P3.7
- ORG 0000H
- LJMP START
- ORG 1000H
- START: MOV SP,#60H
- LCALL INIT
- MAIN: LCALL READ_TEMP
- LCALL PROC_TEMP
- LJMP MAIN
- ;*********************************
- READ_TEMP:
- SETB DQ
- LCALL INI_DQ
- JB FLAG,RE_0
- RET
- RE_0: MOV A,#0CCH
- LCALL WRITE_DQ
- MOV A,#44H
- LCALL WRITE_DQ
- LCALL DISPLAY ;調用lcd顯示程序,并起延時作用
- LCALL INI_DQ
- MOV A,#0CCH
- LCALL WRITE_DQ
- MOV A,#0BEH
- LCALL WRITE_DQ
- LCALL READ_DQ
- RET
-
- ;************DS18B20初始化程序***************
- INI_DQ:
- SETB DQ
- NOP
- NOP
- CLR DQ
- MOV R1,#3
- INI_0: MOV R0,#80
- DJNZ R0,$
- DJNZ R1,INI_0
- SETB DQ
- NOP
- NOP
- NOP
- MOV R7, #25
- INI_1: JNB DQ,INI_2
- DJNZ R7,INI_1 ;延時
- LJMP INI_3
- INI_2: SETB FLAG ;標志位
- LJMP INI_4
- INI_3: CLR FLAG
- LJMP INI_5
- INI_4: MOV R0,#80
- DJNZ R0,[ DISCUZ_CODE_1 ]nbsp; ;時序要求延時一段時間
- INI_5: SETB DQ
- RET
- ;**************DS18B20寫命令******************
- WRITE_DQ:
- MOV R6, #8
- CLR C
- Tloop: CLR DQ
- MOV R2,#6
- DJNZ R2,$
- RRC A ;最低位移到C中
- MOV DQ,C
- MOV R2,#23
- DJNZ R2,$
- SETB DQ
- NOP
- DJNZ R6,Tloop
- SETB DQ
- RET
- ;**************讀DS18B20數據函數*************
- READ_DQ:
- MOV R5, #2
- MOV R0, #30H
- READ_0: MOV R6, #8
- READ_1: CLR C
- SETB DQ
- NOP
- NOP
- CLR DQ
- NOP
- NOP
- NOP
- NOP
- SETB DQ
- MOV R2,#9
- DJNZ R2,$
- MOV C,DQ
- MOV R3,#23
- DJNZ R3,$
- RRC A
- DJNZ R6, READ_1
- MOV @R0,A
- INC R0
- DJNZ R5,READ_0
- SETB DQ
- RET
- ;***************溫度數據處理程序*****************
- PROC_TEMP:
- CLR FLAG_NEG
- MOV A,TEMP_L
- SWAP A
- ORL A,#0F0H
- MOV TEMP_INT,A
- MOV A,TEMP_H
- SWAP A
- ORL A,#0FH
- ANL TEMP_INT,A
- MOV A,TEMP_H
- JB ACC.7,NEGTIVE
- MOV A,TEMP_L
- ANL A,#0FH
- MOV DPTR,#TAB3
- MOVC A,@A+DPTR
- MOV TEMP_DP,A
- LJMP PRO_0
- NEGTIVE: ;溫度值為負時處理程序,按實際情況,處理過程比較復雜
- SETB FLAG_NEG
- MOV A,TEMP_L
- CPL A
- ANL A,#0FH
- MOV R1,A
- CJNE R1,#0FH,PRO_1
- PUSH ACC
- MOV A,TEMP_INT
- SUBB A,#1
- MOV TEMP_INT,A
- POP ACC
- MOV TEMP_DP,#00H
- LJMP PRO_2
- PRO_1: ADD A,#1
- MOV DPTR,#TAB3
- MOVC A,@A+DPTR
- MOV TEMP_DP,A
- PRO_2: MOV A,TEMP_INT
- CPL A
- MOV TEMP_INT,A
- PRO_0: MOV A,TEMP_INT
- MOV B,#100
- DIV AB
- MOV TEMP_100,A
- MOV A,B
- MOV B,#10
- DIV AB
- MOV TEMP_10,A
- MOV TEMP_1,B
- RET
- ;**************LED顯示***********************
- ;**************LCD初始化**********************
- INIT: MOV DPTR,#8000H
- SETB WR_LCD
- SETB RD_LCD
-
- MOV A,#01H
- ACALL F_BUSY
- MOVX @DPTR,A
- ACALL F_BUSY
- MOV A,#38H
- MOVX @DPTR,A
- ACALL F_BUSY
- MOV A,0EH
- MOVX @DPTR,A
- ACALL F_BUSY
- MOV A,#0CH
- MOVX @DPTR,A
- RET
- ;***********寫LCD函數*************************
- DISPLAY: MOV DPTR,#8000H ;寫第一行數據
- MOV A,#80H
- ACALL F_BUSY
- MOVX @DPTR,A
- MOV DPTR,#8100H
- MOV R1,#0
- D1: LCALL TRANS1;
- ACALL F_BUSY
- MOVX @DPTR,A
- INC R1
- CJNE R1,#16,D1
-
- MOV DPTR,#8000H ;寫第二行數據
- MOV A,#0C0H
- ACALL F_BUSY
- MOVX @DPTR,A
- MOV DPTR,#8100H
- LCALL WRITE_NEGTIVE
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,TEMP_100
- LCALL WRITE_INT
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,TEMP_10
- LCALL WRITE_INT
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,TEMP_1
- LCALL WRITE_INT
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,#2EH
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,TEMP_DP
- LCALL WRITE_INT
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,#20H
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,#0DFH
- ACALL F_BUSY
- MOVX @DPTR,A
-
- MOV A,#43H
- ACALL F_BUSY
- MOVX @DPTR,A
-
- RET
- ;**************顯示第一行******************
- TRANS1: PUSH DPH
- PUSH DPL
- MOV A,R1
- MOV DPTR,#TAB1;
- MOVC A,@A+DPTR
- POP DPL
- POP DPH
- RET
- ;**************顯示第二行******************
- WRITE_NEGTIVE:
- JB FLAG_NEG,WN
- MOV A,#20H
- RET
- WN: MOV A,#2DH
- RET
- WRITE_INT:
- PUSH DPH
- PUSH DPL
- MOV DPTR,#TAB2
- MOVC A,@A+DPTR
- POP DPL
- POP DPH
- RET
-
- ;***********判斷LCD是否忙******************
- F_BUSY: PUSH DPH
- PUSH DPL
- PUSH PSW
- PUSH Acc
- LOOP: MOV DPTR,#8200H
- MOVX A,@DPTR
- JB Acc.7,LOOP
- POP Acc
- POP PSW
- POP DPL
- POP DPH
- RET
-
- DELAY_10MS:
- MOV R3,#20
- DEL_1: MOV R4,#248
- DJNZ R4,$
- DJNZ R3,DEL_1
- RET
- TAB1: DB 20H,20H,20H,'T','e','m','p','r','e','t','u','r','e',20H,20H,20H
- ;**************LCD數字字模
- TAB2: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
- ;**********小數位轉換********************
- TAB3: DB 00H,01H,01H,02H
- DB 02H,03H,04H,04H
- DB 05H,06H,06H,07H
- DB 07H,08H,09H,09H
- ;************無小數點位的段碼******************
- TAB4: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- ;*****************有小數點**********************
- TAB5: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
- END
復制代碼
所有資料51hei提供下載:
rogerjordan-5028051-多點測溫.rar
(50.47 KB, 下載次數: 41)
2019-7-2 15:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
hs07zdhgj-3012459-24 DS1621溫度傳感器實驗.rar
(40.63 KB, 下載次數: 35)
2019-7-2 15:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|