欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3800|回復: 2
收起左側

基于proteus ds18b20的仿真

[復制鏈接]
ID:89221 發表于 2015-9-1 16:18 | 顯示全部樓層 |閱讀模式
  #include<reg51.h>

sbit  DQ=P1^2;

sbit  DQ1=P2^5;

sbit  DQ2=P2^7;
//sbit  DQ3=P1^3;  

#define uchar unsigned char

#define uint unsigned int

uchar temp_value,temp_value1,temp_value2;

uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40};









void delay_18B20(uint i)

{

while(i--);

}







void Init_DS18B20(void)

{

  uchar x=0;

  DQ = 1;          //DQ復位

  delay_18B20(8);  //稍做延時

  DQ = 0;          //單片機將DQ拉低

  delay_18B20(60); //精確延時 大于 480us

  DQ = 1;          //拉高總線

  delay_18B20(14);

  x=DQ;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗

  delay_18B20(20);

}







uchar ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

  {     DQ = 0; // 給脈沖信號

    dat>>=1;

    DQ = 1; // 給脈沖信號

    if(DQ)

    dat|=0x80;

    delay_18B20(4);

  }

  return(dat);

}







void WriteOneChar(uchar dat)

{

  uchar i=0;





  for (i=8; i>0; i--)

  {

    DQ = 0;

   DQ = dat&0x01;

     delay_18B20(5);

   DQ = 1;

     dat>>=1;

}

}

void Init_DS18B201(void)

{

  uchar x=0;

  DQ1 = 1;          //DQ復位

  delay_18B20(8);  //稍做延時

  DQ1 = 0;          //單片機將DQ拉低

  delay_18B20(80); //精確延時 大于 480us

  DQ1 = 1;          //拉高總線

  delay_18B20(14);

  x=DQ1;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗

  delay_18B20(20);

}







uchar ReadOneChar1(void)

{

uchar i=0;  uchar dat = 0;

for (i=8;i>0;i--)

  {

    DQ1 = 0; // 給脈沖信號

    dat>>=1;

    DQ1 = 1; // 給脈沖信號

    if(DQ1)

    dat|=0x80;

    delay_18B20(4);

  }

  return(dat);

}







void WriteOneChar1(uchar dat)

{

  uchar i=0;





  for (i=8; i>0; i--)

  {

    DQ1 = 0;

   DQ1 = dat&0x01;

     delay_18B20(5);

   DQ1 = 1;

     dat>>=1;

}

}

void Init_DS18B202(void)

{

  uchar x=0;

  DQ2 = 1;          //DQ復位

  delay_18B20(8);  //稍做延時

  DQ2 = 0;          //單片機將DQ拉低

  delay_18B20(80); //精確延時 大于 480us

  DQ2 = 1;          //拉高總線

  delay_18B20(14);

  //x=DQ1;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗

  delay_18B20(20);

}





uchar ReadOneChar2(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

  {

    DQ2 = 0; // 給脈沖信號

    dat>>=1;

    DQ2 = 1; // 給脈沖信號

    if(DQ2)

    dat|=0x80;

    delay_18B20(4);

  }

  return(dat);

}







void WriteOneChar2(uchar dat)

{

  uchar i=0;





  for (i=8; i>0; i--)

  {

    DQ2 = 0;

   DQ2 = dat&0x01;

     delay_18B20(5);

   DQ2 = 1;

     dat>>=1;

}

}  



void ReadTemp(void)

{

uchar a=0;

uchar b=0;

uchar t=0;

float tt=0;

Init_DS18B20();

WriteOneChar(0xCC);     // 跳過讀序號列號的操作

WriteOneChar(0x44);  // 啟動溫度轉換



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

Init_DS18B20();

WriteOneChar(0xCC);  //跳過讀序號列號的操作

WriteOneChar(0xBE);  //讀取溫度寄存器等共可讀9個寄存器 前兩個就是溫度



delay_18B20(100);



a=ReadOneChar();     //讀取溫度值低位

b=ReadOneChar();     //讀取溫度值高位

temp_value=b<<4;

temp_value+=(a&0xf0)>>4;  



}

void ReadTemp1(void)

{

uchar c=0;

uchar d=0;

uchar t=0;



Init_DS18B201();

WriteOneChar1(0xCC);     // 跳過讀序號列號的操作

WriteOneChar1(0x44);  // 啟動溫度轉換



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



Init_DS18B201();

WriteOneChar1(0xCC);  //跳過讀序號列號的操作

WriteOneChar1(0xBE);  //讀取溫度寄存器等共可讀9個寄存器 前兩個就是溫度



delay_18B20(100);



c=ReadOneChar1();     //讀取溫度值低位

d=ReadOneChar1();     //讀取溫度值高位

temp_value1=d<<4;

temp_value1+=(c&0xf0)>>4;               



}

void ReadTemp2(void)

{

uchar e=0;

uchar f=0;

uchar t=0;



Init_DS18B202();  WriteOneChar2(0xCC);     // 跳過讀序號列號的操作

WriteOneChar2(0x44);  // 啟動溫度轉換



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



Init_DS18B202();

WriteOneChar2(0xCC);  //跳過讀序號列號的操作

WriteOneChar2(0xBE);  //讀取溫度寄存器等共可讀9個寄存器 前兩個就是溫度



delay_18B20(100);



e=ReadOneChar2();     //讀取溫度值低位

f=ReadOneChar2();     //讀取溫度值高位

temp_value2=f<<4;

temp_value2+=(e&0xf0)>>4;               

}

//顯示延時 函數  

void delay(unsigned int z)

{

unsigned int x;

unsigned char y;

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

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

}

void display (uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5)

{ P2=0XFE;

  P0=0x00;

  P0=table[num1];

  delay(6);

  P2=0XFD;

P0=0x00;

  P0=table[num0];

delay(6);

P2=0XFB;

P0=0x00;

  P0=table[10];

  delay(6);

P2=0XF7;

P0=0x00;

  P0=table[num3];

  delay(6);

  P2=0XEF;

P0=0x00;

  P0=table[num2];  delay(6);

  P2=0XDF;

P0=0x00;

  P0=table[10];

delay(6);

  P2=0XBF;

P0=0x00;

  P0=table[num5];

  delay(6);

  P2=0X7F;

P0=0x00;

  P0=table[num4];

delay(6);

}



main()  

{ unsigned int i=0;

   uchar a ,b,c,d,e,f ;

     while(1)

   {   



    ReadTemp();

ReadTemp1();

ReadTemp2();

     b=temp_value/10;  //十位

     a=temp_value%10;  //個位



     d=temp_value1/10;  //十位

     c=temp_value1%10;  //個位

f=temp_value2/10;  //十位

     e=temp_value2%10;  //個位



display(b,a,d,c,f,e);





   }

}  

回復

使用道具 舉報

ID:60379 發表于 2015-9-2 20:32 | 顯示全部樓層
已閱
回復

使用道具 舉報

ID:77498 發表于 2017-5-3 19:15 | 顯示全部樓層
這個論壇里有好多這種資料的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表