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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于AT89C2051+ds18b20的溫度計程序設計

          基于AT89C2051+ds18b20的溫度計程序設計

          作者: 時間:2016-11-23 來源:網絡 收藏
          //本程序我己經通過使用,大家可以放心參考,不過這個程序只能顯示二位,后兩位是顯示一個溫度的符號!
          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int

          uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
          uint tempe;

          sbit DQ=P3^5;
          sbit p=P3^1;
          sbit q=P3^2;
          sbit r=P3^3;
          sbit s=P3^4;

          void delay1(uint z) //延時函數
          {
          uint x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--) ;
          }

          void delay(uint t)
          {
          while(t--);
          }

          void display(void)
          {
          p=0;
          P1=table[tempe/10];
          delay1(1);
          P1=0xff;
          p=1;

          q=0;
          P1=table[tempe];
          delay1(1);
          P1=0xff;
          q=1;

          r=0;
          P1=0x9c;
          delay1(1);
          P1=0xff;
          r=1;

          s=0;
          P1=0xc6;
          delay1(1);
          P1=0xff;
          s=1;
          }

          void init_ds18b20(void)
          {
          uchar sample;
          DQ=1;
          delay(8);
          DQ=0;
          delay(80);
          DQ=1;
          delay(8);
          sample=DQ; //return(sample)帶返回檢測器件響應
          delay(4);
          }

          void wr_ds18b20(uchar dat)
          {
          uchar i;
          for(i=0;i<8;i++)
          {
          DQ=0;
          DQ=dat&0x01;
          delay(4);
          DQ=1;
          dat>>=1;
          }
          delay(4);
          }

          uchar re_ds18b20(void)
          {
          uchar i;
          uchar result;
          for(i=0;i<8;i++)
          {
          DQ=0;
          result>>=1;
          _nop_();
          DQ=1;
          if(DQ)
          result|=0x80;
          delay(4);
          }
          return(result);
          }

          uchar rd_temperature(void)
          {
          uchar a,b;
          init_ds18b20();
          wr_ds18b20(0xcc); //跳過ROM
          wr_ds18b20(0x44); //啟動溫度測量
          delay(300);

          init_ds18b20();
          wr_ds18b20(0xcc);
          wr_ds18b20(0xbe);
          a=re_ds18b20();
          b=re_ds18b20();
          b<<=4;
          b+=(a&0xf0)>>4;
          return(b);
          }

          void main()
          {
          while(1)
          {
          tempe=rd_temperature();
          display();
          delay(1);
          display();
          delay(1);
          }
          }


          評論


          技術專區(qū)

          關閉