新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機DS18B20溫度控制報警程序(可設置溫控范圍)

        51單片機DS18B20溫度控制報警程序(可設置溫控范圍)

        作者: 時間:2016-11-30 來源:網絡 收藏
        DS18B20的管腳定義:

        1、GND
        2、DQ
        3、VCC

        本文引用地址:http://www.104case.com/article/201611/323666.htm

        DQ → P1.7

        K1 → P3.2
        K2 → P3.4
        K3 → P3.6
        K4 → P3.7

        溫度顯示用四位數碼管,當溫度>=100度時,第四位才顯示。
        第五位數碼管顯示狀態符號。

        開機檢測 DS18B20 狀態:

        DS18B20正常顯示:

        O 18.8 ← 顯示實時溫度和加熱標記“O”

        DS18B20不正常顯示:
        黑屏、蜂鳴器一直響。

        這時你要檢查DS18B20是否連接好、接對,否則要更換一個新的 DS18B20 芯片。

        程序在整個運行過程中,始終對 DS18B20 進行檢測。
        你可以將 DS18B20 從 51hei-5 拔掉,檢測一下此功能。

        一、查看溫度報警值:

        K1 → 進入查看溫度報警值 TL 狀態:

        L--20
        TL: 20 低位報警值

        K1 → 進入查看溫度報警值 TH 狀態:

        H--28
        TH: 28 高位報警值

        K1 → 退出查看溫度報警值狀態。


        二、設定溫度報警值:

        1、K3 → 進入設定溫度報警值 TL 狀態:

        L--20

        2、K3 → 進入設定溫度報警值 TH 狀態:

        H--28

        3、K3 → 返回

        4、設定過程: K1 →加鍵 (UP), K2 →減鍵 (DOWN),可快速調。

        將設定的溫度報警值自動存入 DS18B20 的 EEROM 中,可永久保存。
        每次開機時自動從 DS18B20 的 EEROM 讀出溫度報警值。

        三、報警狀態的顯示:

        1、當實際溫度大于 TH 的設定值時,

        H 38.8 H → 閃動

        關閉繼電器,表示超溫。

        2、當實際溫度小于 TL 的設定值時,

        L 18.8 L → 閃動

        表示加熱部分出現故障。

        3、當實際溫度小于 TH 的設定值時,繼電器吸合,開始加熱。

        加熱標記為“O”

        四、其它功能

        1、以閃動方式顯示標記符 “ H”、“ L”、“O”。

        2、實時溫度百位數為 “0”時,不顯示。

        3、報警溫度值百位數為 “0”時,顯示“-”。

        完整的程序代碼下載地址:http://www.51hei.com/f/DS18B20溫度控制LED顯示_asm.rar

        ;*****************************************************************;*  標題:  51Hei單片機開發系統演示程序 - DS18B20溫度控制數碼管顯示              *;*  晶振:  12M                                                                  *;*  跳線設置:J5的12腳用跳線帽短接,J5的第3腳用杜邦線連接到頂部P1.0擴展,其他默認                                                                  *                                                 *;*  網站: http://www.51HEI.com                                                  *;******************************************************************;*  描述:                                                                       *;*          DS18B20溫度控制數碼管顯示                                           *;*        1、K3 → 進入設定溫度報警值 TL 狀態:                                   *;*           L--20                                                            *;*        2、K3 → 進入設定溫度報警值 TH 狀態:                                   *;*           H--28                                                            *;*        3、K3 → 返回                                                          *;*        4、設定過程: K1 →加鍵 (UP), K2 →減鍵 (DOWN),可快速調。         *;*                                                                              *;********************************************************************************TIMER_L     DATA  23HTIMER_H     DATA  24HTIMER_COUN  DATA  25HTEMPL       DATA  26HTEMPH       DATA  27HTEMP_TH     DATA  28HTEMP_TL     DATA  29HTEMPHC      DATA  2AHTEMPLC      DATA  2BHTEMP_ZH     DATA  2CHBEEP        EQU   P1.0DATA_LINE   EQU   P1.7RELAY       EQU   P2.2FLAG1       EQU   20H.0FLAG2       EQU   20H.1;-------------------------------------------------K1   EQU  P3.2K2   EQU  P3.4K3   EQU  P3.6K4   EQU  P3.7;=================================================ORG 0000HJMP  MAINORG  000BHAJMP  INT_T0;--------------------------------------------------MAIN:     MOV SP,#30H;以下5行的功能是關閉8*8點陣的輸出,也就是把所有的行置0,這樣不管列為任何電平點陣都不會亮了.MOV     R2,#8    ;輸出數據8位 hei:     CLR     P2.4     ;拉低SCL,以便下次拉高便可產生上升沿CLR     P2.5  ;數據先送入74hc164,等待clk上升沿的到來SETB    P2.4     ;低電平到高電平邊沿觸發到來,并行數據輸出至164的Q0-Q7DJNZ    R2,hei   ;判斷輸出完畢了沒有MOV  TMOD,#01H        ;T0,方式1MOV  TIMER_L,#00H     ;50ms定時值MOV  TIMER_H,#4CHMOV  TIMER_COUN,#00H  ;中斷計數MOV  IE,#82H          ;EA=1,ET0=1LCALL  READ_E2;LCALL  RE_18B20MOV  20H,#00HSETB   BEEPSETB   RELAYMOV  7FH,#0AH         ;熄滅符CALL RESET            ;復位與檢測DS18B20JNB FLAG1,MAIN1       ;FLAG1=0,DS18B20不存在JMP  STARTMAIN1:    CALL RESETJB FLAG1,STARTLCALL  BEEP_BL        ;DS18B20錯誤,報警JMP  MAIN1START:MOV A,#0CCH         ; 跳過ROM匹配CALL WRITEMOV A,#044H         ; 發出溫度轉換命令CALL WRITECALL RESETMOV A,#0CCH         ; 跳過ROM匹配CALL WRITEMOV A,#0BEH         ; 發出讀溫度命令CALL WRITECALL  READ           ;讀溫度數據CALL  CONVTEMPCALL  DISPBCDCALL  DISP1CALL  SCANKEYLCALL  TEMP_COMPJMP   MAIN1;=====================================================;DS18B20 復位與檢測子程序;FLAG1=1 OK, FLAG1=0 ERROR;======================================================RESET:SETB DATA_LINENOPCLR DATA_LINEMOV R0,#64H            ;主機發出延時600微秒的復位低脈沖MOV R1,#03HRESET1:   DJNZ R0,$MOV R0,#64HDJNZ R1,RESET1SETB DATA_LINE        ;然后拉高數據線NOPMOV R0,#25HRESET2:   JNB DATA_LINE,RESET3  ;等待DS18B20回應DJNZ R0,RESET2JMP RESET4            ; 延時RESET3:   SETB FLAG1            ; 置標志位,表示DS1820存在JMP RESET5RESET4:   CLR FLAG1             ; 清標志位,表示DS1820不存在JMP RESET6RESET5:   MOV R0,#064HDJNZ R0,$             ; 時序要求延時一段時間RESET6:   SETB DATA_LINERET;===========================================================;;===========================================================WRITE:  MOV R2,#8            ;一共8位數據CLR CYWR1:CLR DATA_LINE        ;開始寫入DS18B20總線要處于復位(低)狀態MOV R3,#09DJNZ R3,$            ;總線復位保持18微妙以上RRC A                ;把一個字節DATA 分成8個BIT環移給CMOV DATA_LINE,C      ;寫入一個BITMOV R3,#23DJNZ R3,$            ;等待46微妙SETB DATA_LINE       ;重新釋放總線NOPDJNZ R2,WR1          ;寫入下一個BITSETB DATA_LINERET;============================================================;從DS18B20中讀出溫度低位、高位和報警值TH、TL;存入26H、27H、28H、29H;============================================================READ:    MOV R4,#4            ; 將溫度高位和低位從DS18B20中讀出MOV R1,#26H          ; 存入26H、27H、28H、29HRE00:    MOV R2,#8RE01:    CLR CSETB DATA_LINENOPNOPCLR DATA_LINE        ;讀前總線保持為低NOPNOPNOPSETB DATA_LINE       ;開始讀總線釋放MOV R3,#09           ;延時18微妙DJNZ R3,$MOV C,DATA_LINE      ;從DS18B20總線讀得一個BITMOV R3,#23DJNZ R3,$            ;等待46微妙RRC A                ;把讀得的位值環移給ADJNZ R2,RE01         ;讀下一個BITMOV @R1,AINC R1DJNZ R4,RE00RET        				   
        				
                    
                        
        			
        							
        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 浦县| 吴忠市| 池州市| 巩义市| 沾化县| 靖远县| 浏阳市| 昭苏县| 池州市| 金塔县| 博乐市| 武安市| 闽侯县| 巫山县| 文山县| 三江| 连南| 天等县| 布尔津县| 淮北市| 铜山县| 左云县| 台江县| 广饶县| 邓州市| 广宗县| 云浮市| 永定县| 九台市| 城口县| 崇阳县| 正蓝旗| 延津县| 石楼县| 重庆市| 乌拉特中旗| 闽清县| 中牟县| 始兴县| 东安县| 玛纳斯县|