4339|14

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求多点温度检测C代码 [复制链接]

调了几天程序没什么进展,想了两个方法做都不成功,液晶上显示乱码。想求一个绝对正确的多点温度检测程序(主要是64位Rom搜索那段代码)希望能比对一下发现错误。要代码可能很冒昧啦,不过还是请大侠们帮个忙。。。谢谢

最新回复

为了搜搜? 这个二叉树一定很多人知道的。网上也有代码。  详情 回复 发表于 2010-5-28 09:00
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我刚学单片机不久,我是想问是不是可以利用查表的方法。当你接受的温度或其它信号,每个信号对应相应的温度,建立一个表格。单片机工作时就可根据接受的信号进行查表。
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
网上有很多的
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
比较关心这个,回帖少啊
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
  1. //多点温度读取,num为要读取的设备的序号。
  2. int Read_All_Temperature(unsigned char num)
  3. {
  4.         int PH=0,PL=0;
  5.         int tt;       
  6.         int i;

  7.         Init_DS18B20();//初始化
  8.         DS18B20_wr_Byte(match_Rom);//匹配ROM
  9.         for(i=((num-1)<<3);i<(num<<3);i++)//输入需要使用的DS18B20的64位ROM
  10.         {
  11.                 DS18B20_wr_Byte(DS18B20_ROM[i]);
  12.         }
  13.         DS18B20_wr_Byte(Convert_T);//开始温度转换
  14.         for(i=0;i<800;i++);//延时
  15.        
  16.         Init_DS18B20();//初始化
  17.         DS18B20_wr_Byte(match_Rom);//匹配ROM
  18.         for(i=((num-1)<<3);i<(num<<3);i++)//输入需要使用的DS18B20的64位ROM
  19.         {
  20.                 DS18B20_wr_Byte(DS18B20_ROM[i]);
  21.         }
  22.         DS18B20_wr_Byte(read_Scratchpad);//读暂存器
  23.        
  24.         PL = DS18B20_rd_Byte()*10;
  25.         PH = DS18B20_rd_Byte()*10;
  26.         tt = (PL>>4)+(PH<<4);//返回当前温度的值,温度为实际温度的10倍
  27.         return tt;
  28. }
复制代码
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
先单独读取每个ROM号,然后做成表格

  1. //DS18B20内部64位ROM表,以16进制保存,
  2. unsigned char code DS18B20_ROM[]=
  3. {
  4.         0x28,0xA0,0x87,0x34,0x02,0x00,0x00,0xD1,//第一个设备ROM
  5.         0x28,0x82,0x8D,0x4A,0x02,0x00,0x00,0x09,//第二个设备ROM
  6. };
复制代码
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

7
 
学习。。。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 
可以去这个网站看看有没有http://www.pudn.com/
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢各位了,今天通过串口通信和液晶显示两种把64位ROM读取出来了.感谢各位
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
   学习。我一直不明白为什么要读取rom, 为什么不直接在程序里面定义好表格呢?(也就是在flash里面定义),这样就可以查表了。 希望有高手帮忙解答。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 
你查表的数据从哪来啊?不还是要先读取出来吗。一次读取出来就行了,以后就可以直接查表用了,不必每次都读取
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 fzkqi 的回复:
你查表的数据从哪来啊?不还是要先读取出来吗。一次读取出来就行了,以后就可以直接查表用了,不必每次都读取

是的,获取ROM后,把ROM定义为数组,然后再写程序的时候通过MATCHROM即可判别
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
/*******读取64位序列码**********/
Read_RomCord(void)
{
   uchar j;
   Init_DS18B20();
   WriteOneChar(0x33);  // 读取序列码指令(READ ROM)
   for(j=0;j<8;j++)
   {
     RomCode[j]=ReadOneChar();  
   }
}

/***********CRC校验***********/
uchar CRC8()  
{  
   uchar i,x,crcbuff;
   crc=0;
   for(x=0;x<8;x++)
   {
     crcbuff=RomCode[x];
     for(i=0;i<8;i++)  
     {  
       if(((crc^crcbuff)&0x01)==0)
       crc>>=1;
       else
           {  
         crc^=0x18;                  //CRC=X8+X5+X4+1
         crc>>=1;  
         crc|=0x80;  
       }         
       crcbuff>>=1;        
     }
  }
  return crc;
}

自己做的先获取ROM,然后制表,的办法来多点温度检测。(获取ROM中的一段代码)
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(高级)

14
 
用二叉树的办法还没成功,求教
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 huxinhui 的回复:

用二叉树的办法还没成功,求教


为了搜搜? 这个二叉树一定很多人知道的。网上也有代码。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表