在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DS18B20溫度傳感器64位ROM地址讀?。⊿TC89C52)

            DS18B20溫度傳感器64位ROM地址讀取(STC89C52)

            作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
            最近在做一個(gè)溫度監(jiān)測系統(tǒng),采用DS18B20數(shù)字溫度傳感器,要用到64位ROM地址匹配,在網(wǎng)上查了一些資料,編寫了DS18b20的64位ROM地址讀取的程序,LCD1602顯示。分享給大家,有什么不足請大家留言。

            本文引用地址:http://www.biyoush.com/article/201611/321814.htm

            程序代碼:

            #include

            #defineucharunsignedchar

            #defineuintunsignedint

            sbitlcdrw=P1^1;//LCD1602讀/寫選擇H/L

            sbitlcdrs=P1^0;//LCD1602數(shù)據(jù)/命令選擇H/L

            sbitlcden=P2^5;//LCD1602使能

            sbitds=P2^2;//溫度傳感器信號(hào)線

            ucharcodetable[]="NO.1:.C";

            ucharcodetable1[]="";

            uchardatafCode[8];

            inttemp;//整型溫度數(shù)據(jù)

            floatf_temp;//浮點(diǎn)型溫度數(shù)據(jù)

            uchartflag;//溫度正負(fù)標(biāo)志

            //*****************LCD1602*******************************

            voiddelay(uintz)//延時(shí)函數(shù)延時(shí)z毫秒

            {

            uintx,y;

            for(x=z;x>0;x--)

            for(y=110;y>0;y--);

            }

            voidwrite_com(ucharcom)//lcd1602寫指令

            {

            lcdrs=0;

            P0=com;

            delay(5);

            lcden=1;

            delay(5);

            lcden=0;

            }//lcd1602寫數(shù)據(jù)

            voidwrite_date(uchardate)

            {

            lcdrs=1;

            P0=date;

            delay(5);

            lcden=1;

            delay(5);

            lcden=0;

            }

            voidinit1602()//初始化LCD1602

            {

            uchari;

            lcdrw=0;

            lcden=0;

            write_com(0x38);

            write_com(0x0c);

            write_com(0x06);

            write_com(0x01);

            write_com(0x80);

            for(i=0;i<13;i++)

            {

            write_date(table[i]);

            delay(5);

            }

            write_com(0x80+0x40);

            for(i=0;i<13;i++)

            {

            write_date(table1[i]);

            delay(5);

            }

            write_com(0x80+11);

            write_date(0xdf);

            write_com(0x80+0x40+11);

            write_date(0xdf);

            }

            //*******************DS18B20****************************

            voiddsreset()//DS18B20復(fù)位,初始化函數(shù)

            {

            uinti;

            ds=0;

            i=103;

            while(i>0)

            i--;

            ds=1;

            i=4;

            while(i>0)

            i--;

            }

            bittempreadbit()//讀一位數(shù)據(jù)函數(shù)

            {

            uinti;

            bitdat;

            ds=0;

            i++;

            ds=1;

            i++;

            i++;

            dat=ds;

            i=8;

            while(i>0)

            i--;

            returndat;

            }

            uchartempread()//讀一字節(jié)數(shù)據(jù)函數(shù)

            {

            uchari,j,dat;

            dat=0;

            for(i=1;i<=8;i++)

            {

            j=tempreadbit();

            dat=(j<<7)|(dat>>1);

            }

            returndat;

            }

            voidtempwrite(uchardat)//向DS18B20寫一字節(jié)數(shù)據(jù)函數(shù)

            {

            uinti;

            ucharj;

            bittestb;

            for(j=1;j<=8;j++)

            {

            testb=dat&0x01;

            dat=dat>>1;

            if(testb)//寫1

            {

            ds=0;

            i++;i++;

            ds=1;

            i=8;

            while(i>0)

            i--;

            }

            else//寫0

            {

            ds=0;

            i=8;

            while(i>0)

            i--;

            ds=1;

            i++;i++;

            }

            }

            }

            voidtempchange()//DS18B20開始獲取溫度并轉(zhuǎn)換

            {

            dsreset();

            delay(1);

            tempwrite(0xcc);//寫跳過讀ROM指令

            tempwrite(0x44);//寫溫度轉(zhuǎn)換指令

            }

            uintget_temp()

            {

            uchara,b;

            dsreset();

            delay(1);

            tempwrite(0xcc);//寫“跳過讀ROM”指令

            tempwrite(0xbe);//寫“讀內(nèi)部RAM中9字節(jié)的溫度數(shù)據(jù)”指令

            a=tempread();//讀高8位

            b=tempread();//讀低8位

            temp=b;

            temp<<=8;

            temp=temp|a;//兩個(gè)字節(jié)合為一個(gè)字節(jié)

            if(temp<0x0fff)

            tflag=0;//正值標(biāo)識(shí)符

            else

            {

            temp=~temp+1;

            tflag=1;//負(fù)值標(biāo)識(shí)符

            }

            f_temp=temp*0.0625;//溫度在寄存器中為12位,分辨路為0.0625

            temp=f_temp*10+0.5;//乘以10表示小數(shù)點(diǎn)后面只取一位,加0.5是四舍五入

            //f_temp=f_temp+0.05;

            returntemp;//temp是整型

            }

            voidwrite_wendu(ucharaddress,uchardate)//寫溫度

            {

            write_com(address);

            write_date(date);

            }

            voiddisplay()//顯示函數(shù)

            {

            uintw1,w2,w3,w4;

            w1=get_temp()/1000;//百位

            w2=get_temp()00/100;//十位

            w3=get_temp()0/10;//個(gè)位

            w4=get_temp();//小數(shù)點(diǎn)位

            if(tflag==0)

            write_wendu(0x80+5,0x20);//不顯示正號(hào)

            else

            write_wendu(0x80+5,0x2d);//顯示負(fù)號(hào)

            if(w1==0)

            {

            write_wendu(0x80+6,0x20);//百位為0,不顯示

            if((w1==0)&&(w2==0))

            write_wendu(0x80+7,0x20);//百位,十位都為0,不顯示

            else

            write_wendu(0x80+7,0x30+w2);

            write_wendu(0x80+8,0x30+w3);

            write_wendu(0x80+10,0x30+w4);

            }

            else

            {

            write_wendu(0x80+6,0x30+w1);

            write_wendu(0x80+7,0x30+w2);

            write_wendu(0x80+8,0x30+w3);

            write_wendu(0x80+10,0x30+w4);

            }

            }

            voidDispCode()//讀取ROM

            {

            uinti,xulie;

            dsreset();

            delay(1);

            tempwrite(0x33);

            for(i=0;i<8;i++)

            {

            fCode[i]=tempread();

            }

            write_com(0x80+0x40);

            for(i=0;i<8;i++)

            {

            xulie=fCode[i]>>4;//顯示高四位

            xulie=xulie*1.0;

            if(xulie<10)

            write_date(0x30+xulie);

            else

            write_date(0x37+xulie);

            xulie=fCode[i]&0x0f;//顯示低四位

            xulie=xulie*1.0;

            if(xulie<10)

            write_date(0x30+xulie);

            else

            write_date(0x37+xulie);

            }

            }

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

            voidmain()//主函數(shù)

            {

            init1602();

            DispCode();

            while(1)

            {//searchrom();

            tempchange();

            display();

            }

            }



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉