新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機-溫度傳感器DS18B20

        51單片機-溫度傳感器DS18B20

        作者: 時間:2016-12-02 來源:網絡 收藏
        void DS18B20_ID_read(){
        DS18B20_reset();
        DS18B20_write(0x33);
        for(i = 0; i < 8; i++)
        DS[ i] = DS18B20_read();
        }
        void main(){
        init_lcd();
        while(1){
        DS18B20_ID_read();
        Display_lcd(0,0,>);
        Display_lcd(0,1,:);
        Display_lcd(0,2,Time_Data[DS[0]/16]);
        Display_lcd(0,3,Time_Data[DS[0]%16]);
        Display_lcd(0,4,>);
        Display_lcd(0,5,:);
        Display_lcd(0,6,Time_Data[DS[1]/16]);
        Display_lcd(0,7,Time_Data[DS[1]%16]);
        Display_lcd(0,8,>);
        Display_lcd(0,9,:);
        Display_lcd(0,10,Time_Data[DS[2]/16]);
        Display_lcd(0,11,Time_Data[DS[2]%16]);
        Display_lcd(0,12,>);
        Display_lcd(0,13,:);
        Display_lcd(0,14,Time_Data[DS[3]/16]);
        Display_lcd(0,15,Time_Data[DS[3]%16]);
        Display_lcd(1,0,>);
        Display_lcd(1,1,:);
        Display_lcd(1,2,Time_Data[DS[4]/16]);
        Display_lcd(1,3,Time_Data[DS[4]%16]);
        Display_lcd(1,4,>);
        Display_lcd(1,5,:);
        Display_lcd(1,6,Time_Data[DS[5]/16]);
        Display_lcd(1,7,Time_Data[DS[5]%16]);
        Display_lcd(1,8,>);
        Display_lcd(1,9,:);
        Display_lcd(1,10,Time_Data[DS[6]/16]);
        Display_lcd(1,11,Time_Data[DS[6]%16]);
        Display_lcd(1,12,>);
        Display_lcd(1,13,:);
        Display_lcd(1,14,Time_Data[DS[7]/16]);
        Display_lcd(1,15,Time_Data[DS[7]%16]);
        }
        }
        單只DS18B20工作流程:
        2只DS18B20并聯工作流程:
        DS18B20溫度存儲格式:
        DS18B20暫存器的分布:
        DS18B20內部ROM指令:
        DS18B20內部RAM指令:
        讀出當前溫度,在LCD上顯示,溫度超過一定時,報警。
        #include <reg52.h>
        #include<intrins.h>
        sbit DQ = P3^3;
        sbit RS = P1^0;
        sbit RW = P1^1;
        sbit E = P1^2;
        sbit bell = P3^4;
        #define uchar unsigned char
        #define uint unsigned int
        #define nop() _nop_()
        uint i;
        uchar value;
        uchar DS[8];
        uchar Time_Data[]={0,1,2,3,4,5,6,7,
        8,9,A,B,C,D,E,F};
        void delay(uchar t){
        while(--t);
        }
        void Lcd_Com(uchar s){
        RS = 0; //低電平,寫指令
        P2 = s; //傳數據
        delay(14); //看時序圖,數據需要穩定一段時間
        E = 1; //給一個高脈沖,發送命令
        delay(14); //如圖,高脈沖延時一段時間,確保命令發送
        E = 0; //發送結束E置為低電平
        }
        void Lcd_Data(uchar s){
        RS = 1;
        P2 = s;
        delay(14);
        E = 1;
        delay(14);
        E = 0;
        }
        void Init_Lcd(){
        RS = 1; //先發指令,在初始時刻RS是高,E和RW是低
        E = 0;
        RW = 0;
        Lcd_Com(0x38); //設置為16*2顯示,5*7點陣,8位數據接口
        Lcd_Com(0x0f); //開顯示,顯示光標,光標閃爍
        Lcd_Com(0x06); //讀寫一個字符后地址指針加一
        Lcd_Com(0x01);
        }
        void Display_Lcd(uchar y, uchar x, uchar value){
        if(y)
        Lcd_Com(0x80+0x40+x); //如果y為1,寫在第二行
        else
        Lcd_Com(0x80+x);
        Lcd_Data(value); //寫到LCD602上

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 屏南县| 综艺| 呼图壁县| 临颍县| 德江县| 萨迦县| 洛宁县| 扎囊县| 开江县| 深州市| 苍南县| 蒙山县| 中江县| 兰西县| 舞阳县| 金乡县| 深水埗区| 房山区| 新竹市| 县级市| 岳阳市| 朔州市| 长白| 宁南县| 清苑县| 水富县| 张家界市| 长宁区| 易门县| 鹤岗市| 普格县| 包头市| 昌邑市| 南部县| 河曲县| 兴隆县| 弋阳县| 桂东县| 湖南省| 广汉市| 邵阳县|