4-多点温度采集模块设计--DS18B20两个字节的16进制温度数转换为温度值
2018-04-27 16:40
141 查看
版权声明: https://blog.csdn.net/qq_33869371/article/details/80109852
读取温度值
1、这里是取4个节点当做温度检测节点:
//读取温度值 TEMPDATA ReadTemperature() //结构体类型的函数 { TEMPDATA TempData; //TempData为结构体类型的局部变量 unsigned int iTempDataH; //温度的高字节整数部分 unsigned char btDot, iTempDataL; //定义存储1个字符的变量// char 类型储存的实际上是整数-ASCII码值 static unsigned char i = 5; TempData.btNegative = 0; //为0温度为正 i++; if (i == 9) i = 5; //超过8个从新计 TempData.jdh=i; //标号为i Initialization(); WriteByte(SKIP_ROM); WriteByte(TEMP_SWITCH); //启动转换 = 0x44 Delay500ms(); //调用2次,延时1秒 Delay500ms(); Initialization(); switch (i) //作用:只有匹配上序列号才能读取温度值 { // case 1 : MatchROM(ROMData1); break; //匹配1 // case 2 : MatchROM(ROMData2); break; //匹配2 // case 3 : MatchROM(ROMData3); break; //匹配3 // case 4 : MatchROM(ROMData4); break; //匹配4 case 5 : MatchROM(ROMData5); break; //匹配5 case 6 : MatchROM(ROMData6); break; //匹配6 case 7 : MatchROM(ROMData7); break; //匹配7 case 8 : MatchROM(ROMData8); break; //匹配8 } //多个芯片的时候用MatchROM(ROMData)换掉WriteByte(SKIP_ROM) // WriteByte(SKIP_ROM); //跳过ROM匹配(单个芯片时用这句换掉上面的switch) WriteByte(READ_MEMORY); //向DS18B20写入要读他的暂存存储器内数据的命令-0xBE iTempDataL = ReadByte(); //读取字符-为温度的低字节位 iTempDataH = ReadByte(); //读取整数-为温度的高字节位 iTempDataH <<= 8; //左移8位 iTempDataH |= iTempDataL; //变为16位,高8位、低8位合在一起 if (iTempDataH & 0x8000) //如果iTempDataH的最高位为1 { TempData.btNegative = 1; //为1温度为负 iTempDataH = ~iTempDataH + 1; //负数求补码 } //为了省去浮点运算带来的开销,而采用整数和小数部分分开处理的方法(没有四舍五入) btDot = (unsigned char)(iTempDataH & 0x000F); //得到小数部分 iTempDataH >>= 4; //二进制右移4位(除以2^4=16或者乘以0.0625)--得到整数部分 btDot *= 5; //btDot*5/8(btDot/0.625)得到转换后的小数数据 btDot >>= 3; //数据处理 TempData.btThird = (unsigned char)iTempDataH / 100; TempData.btSecond = (unsigned char)iTempDataH % 100 / 10; TempData.btFirst = (unsigned char)iTempDataH % 10; TempData.btDecimal = btDot; return TempData; //返回温度值 }实物图:
相关文章推荐
- 把含有两个字符的字符串转换为16进制保存的一字节数据
- Tcar:智能车之ds18b20温度传感器实现温度采集模块
- 加密解密基础问题:字节数组和(16进制)字符串的相互转换
- 给串口发送16进制字符串命令和包括16进制命令转换为字节数组
- C# 16进制与字符串、字节数组之间的转换
- C# 16进制与字符串、字节数组之间的转换
- 嵌入式采集温度DS18B20-platform驱动
- C# 16进制与字符串、字节数组之间的转换
- C# 16进制与字符串、字节数组之间的转换
- PT100温度采集电路设计
- C# 16进制与字符串、字节数组之间的转换
- FPGA综合系统设计(二):基于FPGA的温度采集和以太网传输
- C# 16进制与字符串、字节数组之间的转换
- 16进制与字符串、字节数组之间的转换
- 树莓派使用DS18B20模块测量温度
- ntohs的一个简单实现(将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形)
- 利用LPC2378和DS18B20设计室内温度传感系统
- C# 16进制与字符串、字节数组之间的转换
- 2018.4.1(python)温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fabrenheit)。 请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。
- 蓝牙串口编程、16进制、ASCII、字节转换与处理