久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

DS18B20延時函數(shù)版

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月02日   【字體:

程序運行效果圖:


//晶振12MHZ 常溫下測量0--99.9度

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sfr wdtrst=0xa6;
uchar code seg7[]={0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60};  //數(shù)碼管整數(shù)
sbit dec=P0^5; //數(shù)碼管小數(shù)位
sbit Dq=P3^4;  //DS18B20讀寫口
sbit alarm=P3^3;   //喇叭報警位
uint warning=0; //報警溫度變量
//-------------------
void rst()   //看門狗系統(tǒng)復(fù)位函數(shù) 晶振是12MHZ則看門狗自動復(fù)位時間為16ms
{
 wdtrst=0x1e;
 wdtrst=0xe1;
}
//----------------------------
void alarmstart()interrupt 3  //報警中斷子函數(shù)  
{
  if(warning>270)    //溫度大于27度喇叭報警
  { alarm=~alarm;}
  TH1=0xff;
  TL1=0x60;
  TF1=0;
  EA=1;
  ET1=1;
  }

 

//-----------------------------延時函數(shù)集---------------------
void delay10us()    //延時10us
{
 _nop_(); _nop_(); _nop_(); _nop_();
  _nop_(); _nop_();
}
//----------
void delay610us()    //延時610us
{
uchar i,j;
 for(i=0;i<2;i++)
 for(j=0;j<100;j++);
}

//----------
void delay34us()    //延時34us
{
 uchar i,j;
 for(i=0;i<2;i++)
 for(j=0;j<3;j++);
}
//----------
void delay(uint k)    //常用延時函數(shù)
{
 uchar i,j;
 for(i=0;i<k;i++)
 for(j=0;j<100;j++);
}

//-----------------DS18B20初始化函數(shù)----------
uchar init18b20()
{
 uint k=0;
 Dq=0;
 delay610us();   //延時610us
 Dq=1;     //釋放總線
 delay10us();   //延時10us
 while(Dq==1)   //18b20應(yīng)答信號判斷是否超時
 {
  if(k<800)k++;
  else return 1;
 }
 k=0;
 while(Dq==0)   //18b20是否釋放判斷
 {
  if(k<800)k++;
  else return 2;
  }       
  return 3;    //啟動成功返回 3
}

 

//---------讀1字節(jié)函數(shù)------------
uchar readbyte()
{
 uchar i,byte=0;
 for(i=0;i<8;i++)
 {
   Dq=0;
   byte>>=1;
   Dq=1;
   if(Dq)
   {
    byte=byte|0x80;
 }
 delay34us();
 }
 return byte;
}

//-----------寫1字節(jié)函數(shù)--------
void writebyte(uchar byt)
{
 uchar i;
 for(i=0;i<8;i++)
 {
  Dq=0;
  Dq=byt&0x01;
  delay34us();
  Dq=1;
  byt>>=1;
  }
}

//---------溫度讀取函數(shù)--------
uint readtemp()
{
 uint temp=0;
 uchar TH,TL;
 if(init18b20()!=3)return 1; //啟動失敗返回值1
 writebyte(0xcc);
 writebyte(0x44);        
 ;;
 if(init18b20()!=3)return 1;  //啟動失敗返回值1
 writebyte(0xcc);
 writebyte(0xbe);
 TL=readbyte();
 TH=readbyte();
 temp=TH;
 temp<<=8;
 temp=temp+TL;
 temp=temp*0.0625*10;  //乘以10取出小數(shù)部分
 return temp;
}

 


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

void main()
{
 uint num=0;
 TMOD=0x50;
 TH1=0xff;
 TL1=0x60;
 EA=1;
 ET1=1;
 TR1=1;
 rst();   //看門狗
 while(1)
 {
 start:num=readtemp();
 if(num==1)    //啟動失敗數(shù)碼管最高位設(shè)置為1
 {
 warning=1;   //啟動失敗報警變量設(shè)置為 1
  P0=seg7[1];
  P2=0xfe;
  delay(40);
  goto start;   //啟動失敗重新啟動判斷,直到成功才顯示溫度數(shù)值,然后啟動判斷失敗1消失。
  }
  rst();  //看門狗
  warning=num;
 P0=seg7[num/100];
 P2=0xdf;
 delay(10);
 P0=seg7[num%100/10];
 dec=0;
 P2=0xbf;
 delay(10);
 P0=seg7[num%100%10];
 dec=1;              
 P2=0x7f;
 delay(10);
 }
 }

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 91久久精品一区二区二区 | 日日爱av | 国产精品久久久久久久免费观看 | 18gay男同69亚洲网站 | 国产女人与拘做受免费视频 | 国产精品久久国产精品99 | 国产精品福利在线观看 | 爱操影视| 精品日韩一区二区 | 日本三级电影在线观看视频 | 亚洲精品免费在线观看 | 欧美91 | 99成人在线视频 | 午夜免费av | 四虎伊人 | 国产精品自产拍 | 欧美区在线观看 | 成人精品视频免费 | 国产精品视频久久 | 日本不卡免费新一二三区 | 午夜影院在线免费观看视频 | 久草免费在线视频 | 福利网站导航 | 久久亚洲国产精品 | 欧美在线视频一区二区 | 欧美一级免费观看 | 在线一区二区三区 | 精品欧美色视频网站在线观看 | 欧美国产91 | 在线欧美a| 欧美激情视频一区二区三区在线播放 | 久久久九九| 国产精品自产拍 | 久久久久国产视频 | 欧美日韩国产精品一区 | 9999久久| 欧美中文字幕在线 | 懂色av一区二区三区在线播放 | 天天躁日日躁xxxxaaaa | 国产欧美日韩在线播放 | 深夜福利影院 |