新聞中心

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

        基于51單片機的天氣溫度報警系統

        作者: 時間:2016-11-30 來源:網絡 收藏

        基于AT89C51的天氣溫度報警系統,采用Protues仿真。

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

        元件:

        DS1302時鐘芯片

        DS18B20溫度傳感器

        LM016L(1602)液晶

        AT89C51單片機

        LED燈若干

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

        我只貼出部分主要的代碼

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

        或直接下載: LSD.c (7.4 KB, 下載次數: 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一個字節*/
        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中寫入一個字節,寫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中寫數據
        write_command(0x50);// 向TH Register位寫入數據
        write_command(0x00);//向TL Register位寫入數據
        write_command(0x7F);//向configuration Register寫入數據
        delay(10);
        Init_DS18B20();
        write_command(0xCC); // 跳過讀序號列號的操作
        write_command(0x44); // 啟動溫度轉換
        delay(10);
        Init_DS18B20();//
        write_command(0xCC); //跳過讀序號列號的操作
        write_command(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 自治县| 株洲县| 神木县| 岳池县| 桂东县| 城市| 南江县| 康马县| 迁安市| 红安县| 龙州县| 城市| 阿拉善左旗| 开远市| 曲水县| 磐石市| 额尔古纳市| 绥芬河市| 鄱阳县| 集贤县| 河西区| 五原县| 台中县| 伊宁县| 武定县| 鲁山县| 扎赉特旗| 垣曲县| 长顺县| 虹口区| 基隆市| 涡阳县| 通渭县| 甘孜县| 巴彦县| 阳谷县| 香格里拉县| 右玉县| 景德镇市| 措勤县| 清涧县|