找回密碼
         注冊會員
        搜索附件  
        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.

        返回頂部
        亚洲午夜福利精品无码| 久久最新精品国产| 国产精品无码久久久久| 国精品无码A区一区二区| 免费观看四虎精品成人| 亚洲国产精品va在线播放| 成人国产精品免费视频| 国产精品欧美久久久久天天影视| 欧美在线精品一区二区三区| 色欲国产麻豆一精品一AV一免费| 精品视频一区二区三区在线观看| 久久国产精品偷99| 日产精品久久久久久久性色| 久久精品一区二区三区不卡| 老湿亚洲永久精品ww47香蕉图片 | 日韩精品无码久久一区二区三| 国产精品美女一区二区| 国内精品久久久久| 亚洲福利精品一区二区三区| 久久99国产综合精品| 国产精品久久久久乳精品爆| 午夜男人女人爽爽爽视频| 精品久久久久久中文字幕| 亚洲精品二三区| 国产精品久久成人影院| 最新在线精品国自av| 青青草国产精品久久久久| 无遮挡h纯内动漫在线观看| 久久se精品一区二区| 台湾佬综合娱乐网| 91精品国产福利在线观看| baoyu亚洲欧美电影院| 成人国内精品久久久久影院VR| 久久古典武侠第1页777| 69堂午夜精品视频在线| 无码国产69精品久久久久网站| 国产亚洲精品激情都市| AV无码精品一区二区三区| 亚洲精品欧美精品日韩精品 | 精品久久久久久无码中文字幕| 老司机午夜精品视频资源|