在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于51單片機的天氣溫度報警系統(tǒng)

            基于51單片機的天氣溫度報警系統(tǒng)

            作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏

            基于AT89C51的天氣溫度報警系統(tǒng),采用Protues仿真。

            本文引用地址:http://www.biyoush.com/article/201611/323835.htm

            元件:

            DS1302時鐘芯片

            DS18B20溫度傳感器

            LM016L(1602)液晶

            AT89C51單片機

            LED燈若干

            蜂鳴器一只 用于報警本人不寫這個報警程序了 其實挺簡單的

            我只貼出部分主要的代碼

            完整源代碼請到:http://blog.sina.com.cn/u/2311964960(內(nèi)附圖片)

            或直接下載: LSD.c (7.4 KB, 下載次數(shù): 72)

            /*初始化DS18B20*/

            void Init_DS18B20()
            { //初始化DS18B20必須先給DS18B20一個復位脈沖,接收到復位脈沖后DS18B20會返回一個存在脈沖
            DQ=1; //DQ先置高電平
            _nop_(); //延時
            _nop_();
            DQ=0; //DQ置低電平(拉低總線),開始初始化
            delayus(60); //DQ置低電平后必須延時至少480us,此處延時600us
            DQ=1; //然后DQ置高電平(釋放總線)
            delayus(3); //釋放總線后要求延時15-60us,此處延時30us
            flag=DQ; //讀取DQ并付值flag,如果flag為0,表示返回了一個存在脈沖,初始化完成。相反失敗
            delayus(20);
            }

            /*讀取DS18B20中的scrathpad一個字節(jié)*/
            uchar read_scratchpad()
            {
            uchar i=0;
            for (i=8;i>0;i--)
            {
            DQ=1; //DQ位拉高
            _nop_(); //延時1us秒
            DQ = 0; // DQ置0拉低總線
            dat>>=1; //左移一位
            delayus(1); //延時1us-15us,此處延時10us
            DQ = 1; // DQ置1釋放總線
            delayus(1); //延時10us
            if(DQ==1){dat|=0x80;} //采樣
            else{dat|=0x00;}
            delayus(5); //延時50us
            }
            return dat;
            }

            /*向DS18B20中寫入一個字節(jié),寫ROM指令用*/
            void write_command(uchar com)
            {
            uchar i=0;
            uchar num;
            for (i=8; i>0; i--)
            {
            DQ=1; //先將DQ置1;
            _nop_(); //延時
            DQ = 0; //DQ置0,拉低總線
            num = com&0x01; //讀取指令最低位
            if(num==1) //如果為1
            {
            delayus(1); //要求先延時1-15us,此處延時10us
            DQ=1; //然后釋放總線
            delayus(4); //延時大概45us,此處延時40us
            }else //如果為0
            {
            delayus(6); //要求延時60-120us,此處延時60us
            DQ=1; //然后DQ置1釋放總線
            delayus(1); //延時10us
            }
            com>>=1;
            }
            delayus(1);
            }

            /*溫度轉換*/
            void Temperature_conversion()
            {
            Init_DS18B20(); //初始化DS18B20
            write_command(0xCC); // 讀取ROM中64-bit code
            write_command(0x4E); // 寫暫存器,向暫存器中的TH、TL和configuration Register中寫數(shù)據(jù)
            write_command(0x50);// 向TH Register位寫入數(shù)據(jù)
            write_command(0x00);//向TL Register位寫入數(shù)據(jù)
            write_command(0x7F);//向configuration Register寫入數(shù)據(jù)
            delay(10);
            Init_DS18B20();
            write_command(0xCC); // 跳過讀序號列號的操作
            write_command(0x44); // 啟動溫度轉換
            delay(10);
            Init_DS18B20();//
            write_command(0xCC); //跳過讀序號列號的操作
            write_command(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
            }


            上一頁 1 2 下一頁

            評論


            技術專區(qū)

            關閉