新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > DS18B20測溫顯示程序

        DS18B20測溫顯示程序

        作者: 時間:2016-12-03 來源:網絡 收藏
        #include

        #include
        sbit TSOR=P2^0;
        #define Busy 0x80;
        #define uchar unsigned char
        #define uint unsigned int
        #define reset() {WDT=0x1e;WDT=0xe1;}
        sfr WDT=0xa6;
        bit ON_OFF;
        bit outflag;
        sbit en =P1^7;/*DTLED-6顯示芯片使能端*/
        sbit dout=P1^6;/*DTLED-6顯示芯片數據讀入端*/
        sbit clk=P1^3;/*DTLED-6顯示芯片/時鐘芯片DS1302時鐘輸入端*/
        //============================================
        uchar dispbuf[9];/*顯示值存放陣列*/
        uchar temp1,temp2;
        uchar cnt;
        char set,T;
        //===========================================
        void gettempTS(void);
        void initTS(void);
        uchar readBTS(void);
        void writeBTS(uchar byte);
        void resetTS(void);
        bit readTS(void);
        void write1TS(void);
        void write0TS(void);
        void delay15us(void);
        void delay60us(void);
        //*************延時K×1ms,12.000MHz***********
        void delay(uint k)
        {
        uint i,j; //定義i,j為無符號整形變量
        for(i=0;i{
        for(j=0;j<60;j++)
        {;}
        reset()}
        }
        //*******************************************
        void delay15us(void)
        {
        uint i; //定義i為無符號整形變量
        for(i=0;i<4;i++);
        }
        //***************************************
        void delay60us(void)
        {
        uint i; //定義i為無符號整形變量
        for(i=0;i<15;i++);
        }
        //**********************************************
        void write0TS(void)
        {
        TSOR=1;TSOR=0;
        delay15us();delay15us();delay15us();delay15us();
        TSOR=1;
        _nop_();_nop_();
        }
        //**************************************************
        void write1TS(void)
        {
        TSOR=1;TSOR=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        TSOR=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        delay15us();delay15us();delay15us();
        }
        //********************************************
        bit readTS(void)
        {
        bit b;
        TSOR=1;
        TSOR=0;
        _nop_();_nop_();_nop_();_nop_();
        TSOR=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        b=TSOR;
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();
        return b;
        }
        //***************************************************
        void resetTS(void)
        {uchar i;
        TSOR=1;TSOR=0;
        for(i=0;i<8;i++)delay60us();
        TSOR=1;
        while(TSOR);
        for(i=0;i<8;i++)delay60us();
        }
        //***********************************************
        void writeBTS(uchar byte)
        {uchar i;
        for(i=0;i<8;i++)
        {
        if(byte&0x01)
        write1TS();
        else
        write0TS();
        byte=byte>>1;
        }
        }
        //**********************************************
        uchar readBTS(void)
        {uchar i,j;
        bit b;
        j=0;
        for(i=0;i<8;i++)
        {
        b=readTS();
        if(b) j+=1;
        j=_cror_(j,1);
        }
        return j;
        }
        //*****************************************8
        void initTS(void)
        {
        resetTS();
        writeBTS(0xcc);
        writeBTS(0x4e);
        writeBTS(0x64);
        writeBTS(0x8a);
        writeBTS(0x1f);
        }
        //******************************************
        void gettempTS(void)
        {
        resetTS();
        writeBTS(0xcc);
        writeBTS(0x44);
        delay(200);
        resetTS();
        writeBTS(0xcc);
        writeBTS(0xbe);
        temp2=readBTS();
        temp1=readBTS();
        readBTS();readBTS();readBTS();readBTS();
        readBTS();readBTS();readBTS();
        temp1=temp1<<4;
        temp1+=(temp2&0xf0)>>4;
        temp2=(temp2&0x0f)?5:0;
        }
        //********************************************
        void delayus (uint value)/*延時副程式*/
        {
        while (value!=0) value--;/*10US延時*/
        }

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

        /*********************************************************************/

        //串行發送DTLED-6顯示
        //dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
        // 小數點 - 數碼管1- 數碼管2- 數碼管3- 數碼管4- 數碼管5- 數碼管6-ID識別碼-BZ識別碼
        //00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
        //小數點=1~6,其它為不顯示
        //數碼管1-6=0~15,
        //ID識別碼=0~15
        //BZ識別碼=BZ.3為蜂鳴輸出控制位,0=關閉,1=打開
        // BZ0~2為蜂鳴頻率輸出設定為,000=不分頻, 最高頻率輸出=4800Hz;
        // 001=一次分頻,頻率輸出=4800/ 2 =2400Hz;
        // 010=二次分頻,頻率輸出=4800/ 4 =1200Hz;
        // 011=三次分頻,頻率輸出=4800/ 8 =600Hz;
        // 100=四次分頻,頻率輸出=4800/ 16=300Hz;
        // 101=五次分頻,頻率輸出=4800/ 32=150Hz;
        // 110=六次分頻,頻率輸出=4800/ 64=75Hz;
        // 111=七次分頻,頻率輸出=4800/128=38Hz;
        //======================================================================
        void tsled(void)/*串行發送DTLED-6顯示副程式*/
        { char ts0,i,j;
        clk=0;
        en=0;
        delayus(10);
        for(j=0;j<9;j++)
        {ts0=dispbuf[j];
        for(i=0;i<4;i++)/*發小數點碼8,4,2,1*/
        {
        clk=1;
        ts0=ts0<<1;
        if(AC==1)
        dout=1;
        else dout=0;
        clk=0;
        _nop_();
        delayus(3);
        }
        }
        en=1;
        }/*返回主程式*/

        void main(void)
        {
        uchar T=28;
        initTS();
        reset()
        dispbuf[7]=0x01;/*ID號碼*/
        dispbuf[8]=0x00;/*蜂鳴器關閉*/
        while(1)
        {
        gettempTS();
        dispbuf[0]=2; //關閉小數點位顯示//數據顯示
        dispbuf[1]=(temp2/10+0x30);
        dispbuf[2]=((temp1-2)%10+0x30);
        dispbuf[3]=((temp1-2)/10+0x30);
        dispbuf[4]=0;
        dispbuf[5]=(T%10+0x30);
        dispbuf[6]=(T/10+0x30);
        tsled();
        delayus(50000);
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 当阳市| 梅州市| 鄂伦春自治旗| 凤翔县| 无极县| 遂平县| 蓝田县| 甘肃省| 五家渠市| 长沙县| 康定县| 海原县| 琼中| 容城县| 白沙| 安泽县| 阜新| 外汇| 南郑县| 信宜市| 惠东县| 长岛县| 清徐县| 斗六市| 富源县| 牙克石市| 彩票| 舒城县| 萨嘎县| 邵阳市| 安新县| 舞阳县| 乌鲁木齐市| 桐城市| 从江县| 伽师县| 洪洞县| 荣成市| 西昌市| 和田市| 普定县|