找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 DS18B20溫度計.rar

        DS18B20溫度計.rar

         

        DS18B20問題:
        自己調試的程序總是不能正確,哪位大蝦幫我看看,非常感謝。附件里面有仿真文件。
        #include<reg51.h>
        #include<intrins.h>

        #define MSB 0x80
        #define LSB 0x01
        #define SKIP_ROM 0XCC
        #define READ_SCRATCHPAD 0XBE
        #define CONVER_T 0X44


        //COMMON PIN
        sbit DQ = P3^0;
        sbit INTH = P2^0;
        sbit INTL = P2^1;
        sbit DFH = P2^2;
        sbit DFL = P2^3;

        code led_tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
        unsigned char count,tempint,tempdf;

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

        void Display(void);
        void Read_DS18B20();
        void Init_DS18B20(void);
        void Read_DS18B20_byte(void);
        void Delay(unsigned char i);
        void Write_DS18B20(unsigned char dat);

        /**********************************************************************/
        void main(void)
        {
        while(1)
        {
        Read_DS18B20();
        Display();
        }
        }

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

        void Read_DS18B20()
        {
        unsigned char i,j;
        Init_DS18B20();
        Write_DS18B20(SKIP_ROM);
        Write_DS18B20(CONVER_T);
        for(i=0;i<20;i++)
        {
        for(j=0;j<200;j++)
        {
        count=600;
        while(--count);
        }
        }
        Init_DS18B20();
        Write_DS18B20(SKIP_ROM);
        Write_DS18B20(READ_SCRATCHPAD);
        Read_DS18B20_byte();
        }

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

        void Init_DS18B20(void)
        {
        unsigned char flag;
        flag = 0;
        DQ=1;
        count = 10;
        while(--count);
        DQ = 0;
        count = 250;
        while(--count); //延時500us>480us
        DQ = 1;
        count = 20;
        while(--count); //延時40us
        while(DQ==0)
        {
        count = 120;
        while(--count);
        if(DQ)
        {
        count = 240;
        while(--count);
        break;
        }
        }

        }

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

        void Write_DS18B20(unsigned char dat)
        {
        unsigned char i;
        for (i=0; i<8; i++)
        {
        DQ = 0;
        count = 8;
        while(--count);
        DQ = dat&LSB;
        count = 20;
        while(--count);
        dat>>=1;
        DQ = 1;
        _nop_();
        }
        }

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

        void Read_DS18B20_byte(void)
        {
        unsigned char temp,i,j,temph,templ,tempinth,tempintl,tempdfh;
        j=2,temp=0x00;
        do
        {
        for(i=0;i<8;i++)
        {
        temp>>=1;
        DQ = 0;
        _nop_();
        _nop_();
        DQ = 1;
        count = 4;
        while(--count);
        if(DQ)
        temp=temp|0x80;
        count = 10;
        while(--count);
        }
        if(j==2)
        templ=temp;
        else
        temph=temp;
        }while(--j);

        temph<<=8;
        temph|=templ;
        temp=temph*0.0625;
        temp=temp*10+0.5;//放大10倍后,4舍5入
        tempinth=temp/100;
        tempintl=temp/10%10;
        tempdfh=temp%10;
        }

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

        void Display()
        {
        unsigned char tempinth,tempintl,tempdfh;
        tempinth=led_tab[tempint/10];
        tempintl=led_tab[tempint%10]|0x80;//帶上小數點
        tempdfh =led_tab[tempdf/10];
        for(count=0;count<200;count++)
        {
        INTH=1;
        P0=tempinth;
        Delay(5);
        INTH=0;

        INTL=1;
        P0=tempintl;
        Delay(5);
        INTL=0;


        DFH=1;
        P0=tempdfh;
        Delay(5);
        DFH=0;

        DFL=1;
        P0 = 0XC6;
        Delay(5);
        DFL=0;
        }
        }

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

        void Delay(unsigned char t)
        {
        while(--t);
        }




        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-1 05:25 , Processed in 0.040765 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        久久亚洲日韩精品一区二区三区| 亚洲午夜精品久久久久久人妖| 国产精品一区二区久久精品无码| 精品91自产拍在线观看二区| 亚洲国产精品毛片av不卡在线| 日本一区二区在线视频| 欧美性videos高清精品| 亚洲精品天天影视综合网| 无码精品久久一区二区三区| 人妻少妇偷人精品无码| 国产91精品黄网在线观看| 亚洲精品动漫免费二区| 国产精品第12页| 精品无码久久久久久久久久| 亚洲精品国产精品乱码不99| 欧美精品天天操| 先锋影音男人资源| 精品视频第一页| 亚洲国产精品尤物YW在线观看| 国产午夜无码精品免费看| 国产精品无码DVD在线观看| 4438亚洲最大| 国产精品V亚洲精品V日韩精品| 最新国产精品无码| www.日韩精品| 亚洲国产精品久久电影欧美| 911亚洲精品国内自产| 老司机午夜在线视频免费观| 青青草原综合久久大伊人精品| 亚洲欧美日韩精品专区| 国产成人精品久久免费动漫| 四虎影视永久在线精品| 国产精品久久久久影院色| 亚洲国产成人精品91久久久 | 久久精品国产亚洲AV高清热| 99久久精品免费看国产| 亚洲av午夜成人片精品网站 | 日韩人妻精品无码一区二区三区| 99精品在线免费| 精品国产三级a在线观看| 欧美日韩国产成人高清视频,欧美日韩在线精品一|