2146|6

40

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求大神解答 [复制链接]

求解答,自己自学DS18B20,看到一个程序,但是查了点资料还是看不懂,求大神解答。
#include
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;           //define interface
uint temp;             // variable of temperature
uchar flag1;            // sign of the result positive or negative
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};

void delay(uint count)      //delay
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}


void dsreset(void)       //send reset and initialization command
{
  uint i;
  DS=0;                              
  i=103;                                   //将总线拉低480us~960us
  while(i>0)i--;
  DS=1;                                           //然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低
  i=4;                                           //15us~60us等待
  while(i>0)i--;
  //while(DS);
}

bit tmpreadbit(void)     。。。。。。。。。。。。。。。。。。这里是什么意思
{
   uint i;
   bit dat;
   DS=0;i++;         
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;。。。。。。。。。。 还有这里,
   return (dat);
}

uchar tmpread(void)   //read a byte date
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);   。。。。。。。。。。。。。。。。这里移位又是什么意思,为什要一位一位的读呢
  }
  return(dat);
}

void tmpwritebyte(uchar dat)   //write a byte to ds18b20
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)     //write 1
    {
      DS=0;
      i++;i++;
      DS=1;
      i=8;while(i>0)i--;
    }
    else
    {
      DS=0;       //write 0
      i=8;while(i>0)i--;
      DS=1;
      i++;i++;
    }

  }
}

void tmpchange(void)  //DS18B20 begin change
{
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);  // address all drivers on bus
  tmpwritebyte(0x44);  //  initiates a single temperature conversion
  //delay(100);
}

uint tmp()               //get the temperature
{
  float tt;
  uchar a,b;
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);
  tmpwritebyte(0xbe);
  a=tmpread();
  b=tmpread();
  temp=b;
  temp<<=8;             //two byte  compose a int variable
  temp=temp|a;
  tt=temp*0.0625;
  temp=tt*10+0.5;
  return temp;
}

void readrom()          //read the serial
{
  uchar sn1,sn2;
  dsreset();
  delay(1);
  tmpwritebyte(0x33);
  sn1=tmpread();
  sn2=tmpread();
}


void delay10ms()            //delay
  {
    uchar a,b;
    for(a=10;a>0;a--)
      for(b=60;b>0;b--);
   }

void display(uint temp)                        。。。。。。。。。。。。。。。。。。这里是显示程序,是怎么换算的我看不懂,有没
{                                                                                                                           没有什么视频讲怎么换算的,
   uchar A1,A2,A2t,A3,ser;
   ser=temp/10;
   SBUF=ser;
   A1=temp/100;
   A2t=temp%100;
   A2=A2t/10;
   A3=A2t%10;
   dula=0;
   P0=table[A1];                //显示百位
   dula=1;
   dula=0;

   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(1);

   dula=0;
   P0=table1[A2];                //显示十位
   dula=1;
   dula=0;

   wela=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(1);

   P0=table[A3];                //显示个位
   dula=1;
   dula=0;

   P0=0xfb;
   wela=1;
   wela=0;
   delay(1);
}


void main()
{
uchar a;
  do
  {
    tmpchange();
    //delay(200);

for(a=100;a>0;a--)
  {   display(tmp());
  }
  }                while(1);
}


此帖出自单片机论坛

最新回复

dat=(j1);   。。。。。。。。。。。。。。。。这里移位又是什么意思,为什要一位一位的读呢     把手册中时序看懂,这个就应该明白了。 建议你好好学学C语言基础。  详情 回复 发表于 2016-12-4 17:13
点赞 关注
 

回复
举报

943

帖子

3

TA的资源

纯净的硅(中级)

推荐
 
那个i=8那边可能就是做延时用的,至于为什么那么搞,不懂。
显示那块就是取膜,取余运算吧,后面还有SBUF,发送的?
按位读可能就是为了后面发送的吧?我猜测的,才疏学浅,见谅,见谅。
这程序说真的也不知道你在哪找的,看不懂啊。
此帖出自单片机论坛
 
 

回复

943

帖子

25

TA的资源

一粒金砂(中级)

沙发
 
都是代码,看不懂,坐等大师帮你吧!
此帖出自单片机论坛
 
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 
答案是怎么被问出来的?
楼主可以看看,应该能够帮助你更快速的得到帮助。
此帖出自单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

4008

帖子

0

TA的资源

版主

5
 
解答哪里??
此帖出自单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

6
 
好好看看DS18B20的手册,了解什么是单总线协议。
bit tmpreadbit(void)     。。。。。。。。。。。。。。。。。。这里是什么意思      这是函数名称,返回bit型的值。
i=8;while(i>0)i--;。。。。。。。。。。 还有这里,   延时作用。
此帖出自单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

7
 
dat=(j<<7)|(dat>>1);   。。。。。。。。。。。。。。。。这里移位又是什么意思,为什要一位一位的读呢     把手册中时序看懂,这个就应该明白了。
建议你好好学学C语言基础。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表