新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR單片機的DS18B20 C語言程序

        AVR單片機的DS18B20 C語言程序

        作者: 時間:2016-11-27 來源:網絡 收藏
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        //
        #define BIT_SET(a,b) a|=(1<
        #define BIT_CLR(a,b) a&=~(1<//清零位a.b
        #define BIT_INV(a,b) a^=(1<//翻轉位a.b
        #define BIT_STATUS(a,b) a&(1<//讀取位a.b
        /
        #define CLR_DS18B20 BIT_CLR(PORTC,PC7) //數據線強制拉低
        #define SET_DS18B20 BIT_SET(PORTC,PC7) //數據線強制拉高,上拉
        #define HLD_DS18B20 BIT_SET(DDRC,PC7) //Mega16控制總線
        #define RLS_DS18B20 BIT_CLR(DDRC,PC7) //釋放總線
        #define STU_DS18B20 BIT_STATUS(PINC,PC7) //數據線的狀態
        uchar const SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        uchar const ACT[8]={0x08,0x04,0x02,0x01,0x80,0x40,0x20,0x10};
        uint T;
        //=============================
        void delayUs(uchar temp)
        {
        while(temp--);
        }
        uchar resetDS18B20(void);
        unsigned int readTempDS18B20(void);
        void port_init(void)
        {
        PORTA = 0xFF;
        DDRA = 0x00;
        PORTB = 0xFF;
        DDRB = 0xFF; //輸出
        PORTC = 0xFF;
        DDRC = 0xFF; //輸出
        DDRD = 0xFF;
        PORTD = 0xFF;
        }
        void delay_ms(uint k)
        {
        uint i,j;
        for(i=0;i
        {
        for(j=0;j<570;j++);
        }
        }
        //=============================
        void display(uchar counter)
        {
        uchar i;
        DDRA=0xff;
        DDRC=0xff;
        PORTA=0x00;
        PORTC=0xff;
        for(i=0;i<100;i++)
        {
        PORTA=SEG7[counter];
        PORTC=ACT[3];
        delay_ms(10);
        PORTA=SEG7[counter/10];
        PORTC=ACT[2];
        delay_ms(10);
        PORTA=SEG7[counter/100];
        PORTC=ACT[1];
        delay_ms(10);
        PORTA=SEG7[counter/1000];
        PORTC=ACT[0];
        delay_ms(10);
        }
        }
        void main()
        {
        port_init();
        while(1)
        {
        resetDS18B20();
        T=readTempDS18B20();
        T=T>>4; //去除ds18b20轉換的小數位(低四位)
        display(T);
        }
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 柘城县| 突泉县| 新竹市| 赞皇县| 竹北市| 博罗县| 罗田县| 中西区| 介休市| 茶陵县| 凌云县| 柳林县| 全州县| 阳江市| 永安市| 绍兴县| 阳信县| 慈溪市| 寿阳县| 岑巩县| 东方市| 辽宁省| 广汉市| 安远县| 永吉县| 平乡县| 古丈县| 涟水县| 泰宁县| 高陵县| 敖汉旗| 沅陵县| 高平市| 鄄城县| 什邡市| 庆阳市| 河曲县| 长子县| 北辰区| 闻喜县| 临汾市|