新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51DS18B20室內溫度報警系統設計

        基于51DS18B20室內溫度報警系統設計

        作者: 時間:2016-11-29 來源:網絡 收藏
        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit DQ=P2^2;
        sbit smg1=P2^4;
        sbit smg2=P2^5;
        sbit smg3=P2^6;
        uchar temp;
        unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
        unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
        void init_ds18b20(void);
        void delay(uint t);
        void write_byte(uchar dat);
        uchar read_byte(void);
        uchar readtemperature(void);
        void display(void);
        //************************************************
        //延時函數,在12MHz的晶振頻率下
        //大約50us的延時
        //************************************************
        void delay_50us(uint t)
        {
        uchar j;
        for(;t>0;t--)
        for(j=19;j>0;j--);
        }
        void main(void)
        {
        while(1)
        {
        temp=readtemperature();
        display();
        }
        }
        void delay(uint t)
        {
        while(t--);
        }
        void init_ds18b20(void)
        {
        uchar n;
        DQ=1;
        delay(8);
        DQ=0;
        delay(80);
        DQ=1;
        delay(8);
        n=DQ;
        delay(4);
        }
        void write_byte(uchar dat)
        {
        uchar i;
        for(i=0;i<8;i++)
        {
        DQ=0;
        DQ=dat&0x01;
        delay(4);
        DQ=1;
        dat>>=1;
        }
        delay(4);
        }
        uchar read_byte(void)
        {
        uchar i,value;
        for(i=0;i<8;i++)
        {
        DQ=0;
        value>>=1;
        DQ=1;
        if(DQ)
        value|=0x80;
        delay(4);
        }
        return value;
        }
        uchar readtemperature(void)
        {
        uchar a,b;
        init_ds18b20();
        write_byte(0xcc); //跳過ROM
        write_byte(0x44); //啟動溫度測量
        delay(300);
        init_ds18b20();
        write_byte(0xcc);
        write_byte(0xbe);
        a=read_byte();
        b=read_byte();
        b<<=4;
        b+=(a&0xf0)>>4;
        return b;
        }
        void display(void)
        {
        smg3=0;
        smg2=0;
        smg1=0;
        P1=smg_du[temp%10];
        delay_50us(20);
        smg2=0;
        smg1=1;
        P1=smg_du[temp/10];
        delay_50us(20);
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东平县| 赤壁市| 广灵县| 灌阳县| 宿松县| 高淳县| 澄迈县| 平罗县| 新郑市| 莒南县| 博白县| 洛南县| 泾川县| 多伦县| 霸州市| 兴城市| 锡林郭勒盟| 拜城县| 米林县| 织金县| 无棣县| 抚远县| 芮城县| 武安市| 从江县| 洪泽县| 米脂县| 英山县| 芮城县| 桃江县| 鹿泉市| 彭山县| 故城县| 江西省| 百色市| 彰化市| 高淳县| 浦城县| 慈利县| 文昌市| 揭东县|