新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16F877A例程---DS18B20

        PIC16F877A例程---DS18B20

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

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

        void WRITE_LCD_CMD(char cmd)

        {

        LCD1602_BUSY();

        TRISB & =0XF8;

        TRISD=0;

        LCDDATA=cmd;

        LCDRS=0;

        LCDRW=0;

        LCDE=0;

        asm("NOP");

        asm("NOP");

        LCDE=1;

        }

        void LCD1602_INIT(void)

        {

        LCD1602_BUSY();

        TRISB &= 0XF8;

        TRISD=0;

        WRITE_LCD_CMD(CLRLCD);

        WRITE_LCD_CMD(LCDMOD);

        WRITE_LCD_CMD(TURNON);

        WRITE_LCD_CMD(CURMODE);

        LCD_Display_location (0,0);

        }

        void DS18B20_INIT()

        {

        TRIS_B20=0;

        DS18B20=0;

        US_delay(20);

        TRIS_B20=1;

        US_delay(10);

        }

        void WRITE_DS18B20_CMD(char cmd)

        {

        char tmp;

        char i;

        TRIS_B20=0;

        for(tmp=8;tmp>0;tmp--)

        {

        TRIS_B20=0;

        DS18B20= 0;

        asm ("NOP");

        asm ("NOP");

        asm ("NOP");

        asm ("NOP");

        asm ("NOP");

        if (cmd & 0x01)

        {

        TRIS_B20=1;

        US_delay(1);

        for (i=5;i>0;i--);

        }

        else

        {

        DS18B20=0 ;

        US_delay(1);

        for (i=5;i>0;i--);

        TRIS_B20=1;

        }

        cmd=cmd/2;

        }

        }

        float READ_DS18B20 ()

        {

        char tmp=0x01;

        float t;

        union

        {

        char c[2];

        int x;

        }temp;

        temp.x=0;

        while (tmp)

        { // read first 8 bits

        TRIS_B20=0;

        DS18B20=0;

        asm("NOP");

        TRIS_B20=1;

        if (DS18B20)

        temp.c[0] |= tmp;

        tmp=tmp<<1;

        US_delay(2);

        }

        tmp=1;

        while (tmp)

        { // read first 8 bits

        TRIS_B20=0;

        DS18B20=0;

        asm("NOP");

        TRIS_B20=1; // release the bus

        asm("NOP");

        if (DS18B20) // "1" presented

        temp.c[1] |= tmp;

        tmp=tmp<<1;

        US_delay(2);

        }

        t=((float) temp.x)/16.0 ;

        return t;

        }

        void itoa10(unsigned char *buf, int i)

        {

        unsigned int rem;

        unsigned char *s,length=0;

        s = buf;

        if (i == 0)

        *s++ = 0;

        else

        {

        if (i < 0)

        {

        *buf++ = -;

        s = buf;

        i = -i;

        }

        while (i)

        {

        ++length;

        rem = i % 10;

        *s++ = rem + 0;

        i /= 10;

        }

        for(rem=0; ((unsigned char)rem)

        {

        *(buf+length) = *(buf+((unsigned char)rem));

        *(buf+((unsigned char)rem)) = *(buf+(length-((unsigned char)rem)-1));

        *(buf+(length-((unsigned char)rem)-1)) = *(buf+length);

        }

        }

        *s=0;

        }

        void US_delay( int i)

        {

        unsigned char j;

        while(i--)

        {

        j=3;

        while(j--);

        }

        }


        上一頁 1 2 下一頁

        關鍵詞: PIC16F877ADS18B2

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 凉山| 乐业县| 甘南县| 民县| 扎赉特旗| 沭阳县| 乐清市| 潢川县| 巴林左旗| 黑龙江省| 兴山县| 泽州县| 固阳县| 鸡西市| 尚志市| 浦江县| 凤凰县| 武穴市| 石台县| 巴林右旗| 静安区| 黑龙江省| 衡水市| 永善县| 临泉县| 富蕴县| 高密市| 新竹县| 营山县| 军事| 阳朔县| 荃湾区| 分宜县| 揭西县| 襄汾县| 德清县| 邓州市| 吴川市| 西华县| 汉寿县| 莒南县|