色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > DS18B20單總線溫度控制

          DS18B20單總線溫度控制

          作者: 時間:2016-11-17 來源:網(wǎng)絡 收藏
          C代碼:

          #include
          sbit DQ = P1^0; //定義ds18b20通信端口
          unsigned char a,b,c,d;
          unsigned char temp1,temp2,temp;
          unsigned char code dispbitcode[]={0x10,0x20,0x40,0x80,0x00};//共陰位碼
          unsigned char code dispcode[]= { 0X3F,/*0*/
          0X06,/*1*/
          0X5B,/*2*/
          0X4F,/*3*/
          0X66,/*4*/
          0X6D,/*5*/
          0X7D,/*6*/
          0X07,/*7*/
          0X7F,/*8*/
          0X6F,/*9*/};//共陰段碼
          /*************延時子程序*******************************/
          void delay(unsigned int x)//最小1毫秒
          {
          unsigned char j;
          while(x--)
          {
          for(j=0;j<125;j++)
          {;}
          }
          }
          /***************顯示子程序**********************/
          void display(unsigned char qian,unsigned char bai,unsigned char shi,unsigned char ge)
          {
          P3=dispbitcode[0];
          P0=dispcode[qian]; //顯示千位
          delay(5);
          //P3=dispbitcode[5];
          //P2=dispcode[11];
          P3=dispbitcode[1];
          P0=dispcode[bai]; //顯示佰位
          delay(5);
          //P3=dispbitcode[5];
          //P2=dispcode[11];
          P3=dispbitcode[2];
          P0=dispcode[shi]; //顯示十位
          delay(5);
          //P3=dispbitcode[5];
          //P2=dispcode[11];
          P3=dispbitcode[3];
          P0=dispcode[ge]; //顯示個位
          delay(5);
          }
          /***********ds18b20延遲子函數(shù)(晶振12MHz )*******/

          本文引用地址:http://cafeforensic.com/article/201611/315530.htm

          void delay_18B20(unsigned int i)
          {
          while(i--);
          }

          /**********ds18b20初始化函數(shù)**********************/

          void Init_DS18B20(void)
          {
          unsigned char x=0;
          DQ = 1; //DQ復位
          delay_18B20(8); //稍做延時
          DQ = 0; //單片機將DQ拉低
          delay_18B20(80); //精確延時 大于 480us
          DQ = 1; //拉高總線
          delay_18B20(14);
          x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
          delay_18B20(20);
          }

          /***********ds18b20讀一個字節(jié)**************/

          unsigned char ReadOneChar(void)
          {
          unsigned char i=0;
          unsigned char dat = 0;
          for (i=8;i>0;i--)
          {
          DQ = 0; // 給脈沖信號
          dat>>=1;
          DQ = 1; // 給脈沖信號
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
          }
          return(dat);
          }

          /*************ds18b20寫一個字節(jié)****************/

          void WriteOneChar(unsigned char dat)
          {
          unsigned char i=0;
          for (i=8; i>0; i--)
          {
          DQ = 0;
          DQ = dat&0x01;
          delay_18B20(5);
          DQ = 1;
          dat>>=1;
          }
          }

          /**************讀取ds18b20當前溫度************/

          unsigned char ReadTemperature(void)
          {
          unsigned char a=0;
          unsigned char b=0;
          unsigned char t=0;

          Init_DS18B20();
          WriteOneChar(0xCC); // 跳過讀序號列號的操作
          WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換

          delay_18B20(100); // this message is wery important

          Init_DS18B20();
          WriteOneChar(0xCC); //跳過讀序號列號的操作
          WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度

          delay_18B20(100);

          a=ReadOneChar(); //讀取溫度值低位
          b=ReadOneChar(); //讀取溫度值高位
          temp1=b<<4;
          temp1+=(a&0xf0)>>4;
          temp2=a&0x0f;

          temp=((b*256+a)>>4); //當前采集溫度值除16得實際溫度值
          return(temp);
          }
          void main(void)
          {
          unsigned char abcd;
          while(1)
          {
          abcd=ReadTemperature();
          a=abcd/1000;//送去顯示
          b=abcd%1000/100;
          c=abcd%1000%100/10;
          d=abcd%1000%100%10;
          display(a,b,c,d);
          }
          }



          關(guān)鍵詞: DS18B20單總線溫度控

          評論


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

          關(guān)閉