找回密碼
         注冊會員
        搜索附件  
        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性色| 亚洲国产精品成人网址天堂| 国产精品青青在线观看爽香蕉| 国产一成人精品福利网站| 久久精品水蜜桃av综合天堂| 牛牛在线精品免费视频观看| 久久久久久久久无码精品亚洲日韩 | 精品人妻中文av一区二区三区 | 亚洲人成精品久久久久| 国产最新进精品视频| 国产福利精品在线观看| 久久这里只有精品久久| 惠民福利中文字幕人妻无码乱精品| 日本加勒比在线视频| 国产精品影音先锋| 亚洲国产91精品无码专区| 国内精品久久久久久久97牛牛| 国产精品视频色视频| 亚洲精品中文字幕无码蜜桃| 亚洲国产精品一区二区久久| 亚洲?V无码成人精品区日韩| 精品性影院一区二区三区内射| 国产精品户外野外| 欧美午夜精品久久久久免费视| 青青草原精品99久久精品66| 国产成人精品免费大全| 成年人黄视频大全| 真实国产乱子伦精品免费| 日韩专区中文字幕| 精品久久久久久亚洲| 亚洲欧美国产精品| 99亚洲精品视频| 亚洲精品无码永久中文字幕| 国产精品偷窥熟女精品视频| 精品国产福利在线观看| 亚洲av无码成人精品区|