新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AT89C2051+ds18b20的溫度計程序設計

        基于AT89C2051+ds18b20的溫度計程序設計

        作者: 時間:2016-11-23 來源:網絡 收藏
        //本程序我己經通過使用,大家可以放心參考,不過這個程序只能顯示二位,后兩位是顯示一個溫度的符號!
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int

        uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
        uint tempe;

        sbit DQ=P3^5;
        sbit p=P3^1;
        sbit q=P3^2;
        sbit r=P3^3;
        sbit s=P3^4;

        void delay1(uint z) //延時函數
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--) ;
        }

        void delay(uint t)
        {
        while(t--);
        }

        void display(void)
        {
        p=0;
        P1=table[tempe/10];
        delay1(1);
        P1=0xff;
        p=1;

        q=0;
        P1=table[tempe];
        delay1(1);
        P1=0xff;
        q=1;

        r=0;
        P1=0x9c;
        delay1(1);
        P1=0xff;
        r=1;

        s=0;
        P1=0xc6;
        delay1(1);
        P1=0xff;
        s=1;
        }

        void init_ds18b20(void)
        {
        uchar sample;
        DQ=1;
        delay(8);
        DQ=0;
        delay(80);
        DQ=1;
        delay(8);
        sample=DQ; //return(sample)帶返回檢測器件響應
        delay(4);
        }

        void wr_ds18b20(uchar dat)
        {
        uchar i;
        for(i=0;i<8;i++)
        {
        DQ=0;
        DQ=dat&0x01;
        delay(4);
        DQ=1;
        dat>>=1;
        }
        delay(4);
        }

        uchar re_ds18b20(void)
        {
        uchar i;
        uchar result;
        for(i=0;i<8;i++)
        {
        DQ=0;
        result>>=1;
        _nop_();
        DQ=1;
        if(DQ)
        result|=0x80;
        delay(4);
        }
        return(result);
        }

        uchar rd_temperature(void)
        {
        uchar a,b;
        init_ds18b20();
        wr_ds18b20(0xcc); //跳過ROM
        wr_ds18b20(0x44); //啟動溫度測量
        delay(300);

        init_ds18b20();
        wr_ds18b20(0xcc);
        wr_ds18b20(0xbe);
        a=re_ds18b20();
        b=re_ds18b20();
        b<<=4;
        b+=(a&0xf0)>>4;
        return(b);
        }

        void main()
        {
        while(1)
        {
        tempe=rd_temperature();
        display();
        delay(1);
        display();
        delay(1);
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泾川县| 文山县| 肇源县| 广河县| 榆林市| 平阴县| 江安县| 花莲县| 金山区| 罗田县| 玉林市| 三原县| 特克斯县| 成安县| 阿坝县| 新蔡县| 钟祥市| 兴化市| 宣武区| 湟源县| 邵阳县| 周口市| 西盟| 旬邑县| 兰西县| 永宁县| 中方县| 阿坝| 确山县| 安康市| 乾安县| 高要市| 靖边县| 邢台县| 漳平市| 曲阜市| 康定县| 瓮安县| 罗甸县| 江津市| 玛多县|