复制
收藏
提问
简洁

/************************************************************************************** 深圳市普中科技有限公司(PRECHIN 普中) 技术支持:www.prechin.net PRECHIN 普中 实验名称:DS18B20温度传感器实验 接线说明: 实验现象:下载程序后,插上DS18B20温度传感器,数码管显示检测的温度值 注意事项:注意温度传感器的方向,在接口处我们已经用丝印画了一个凸起, 所以只需要将温度传感器对应插入即可 ***************************************************************************************/ #include "public.h" #include "smg.h" #include "ds18b20.h" #include "stdio.h" /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ // 串口初始化 void utr_init() { SCON = 0x40; PCON = 0x00; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; REN = 1; ES = 1; } // 串口发送 void send(int temp_value) { ES = 0; TI = 1; printf("{\"UpLimit\":\"%4.1f\"}",(float)temp_value/16-0.04); TI = 0; ES = 1; } void main() { u8 i=0,j=0; int temp_value; u8 temp_buf[5]; ds18b20_init();//初始化DS18B20 utr_init();//初始化串口 while(1) { i++; j++; if(i%50==0)//间隔一段时间读取温度值,间隔时间要大于温度传感器转换温度时间 temp_value=ds18b20_read_temperture()*10;//保留温度值小数后一位 if(temp_value<0)//负温度 { temp_value=-temp_value; temp_buf[0]=0x40;//显示负号 } else temp_buf[0]=0x00;//不显示 temp_buf[1]=gsmg_code[temp_value/1000];//百位 temp_buf[2]=gsmg_code[temp_value%1000/100];//十位 temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//个位+小数点 temp_buf[4]=gsmg_code[temp_value%1000%100%10];//小数点后一位 smg_display(temp_buf,4); if(j%50==0) { if(temp_value > 230) send(temp_value); j=0; } } }

3月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

您提供的代码是一个基于51单片机的DS18B20温度传感器实验程序。程序的主要功能是初始化DS18B20传感器和串口,然后周期性地读取温度值,并通过数码管显示。当检测到的温度超过23.0℃时,程序会通过串口发送温度值。以下是对代码的详细解释:

  1. 初始化部分

    • ds18b20_init(); 用于初始化DS18B20传感器,确保其可以正常工作13
    • utr_init(); 用于初始化串口,设置串口参数,以便后续发送数据1
  2. 主循环部分

    • 程序使用两个计数器 ij 来控制读取温度和发送数据的频率。
    • 每50次循环读取一次温度值,通过调用 ds18b20_read_temperture() 函数实现,并将结果乘以10以保留一位小数3
  3. 温度值处理

    • 如果温度值为负,将其转换为正数,并在数码管显示时添加负号。
    • 将温度值分解为百位、十位、个位和小数位,以便数码管显示。
  4. 数码管显示

    • 使用 smg_display() 函数将分解后的温度值显示在数码管上。数码管显示的代码通过 gsmg_code 数组转换为数码管可识别的编码。
  5. 串口发送数据

    • 每50次循环检查一次温度值,如果超过23.0℃,则通过 send() 函数发送温度值。发送的数据格式为JSON,其中包括温度上限的值。
  6. 温度值转换为JSON格式

    • send() 函数中,将温度值转换为JSON格式的字符串,并通过 printf() 函数发送出去。这里使用了浮点数运算来调整温度值的显示,即 (float)temp_value/16-0.04
  7. 注意事项

    • 代码中提到了数码管显示和串口发送的注意事项,例如数码管的显示需要对应编码,以及温度传感器的方向。
  8. 代码结构

    • 代码结构清晰,包含了必要的头文件和函数声明,以及主函数 main() 的实现。

请注意,代码中可能需要根据实际硬件环境和需求进行适当的调整,例如串口波特率的设置、数码管的接口等。此外,确保 ds18b20.cds18b20.h 文件中包含了DS18B20传感器的驱动代码,以及 smg.h 中定义了数码管显示所需的函数和编码67。如果在使用过程中遇到串口助手无法接收数据的问题,可能需要检查串口初始化设置或DS18B20传感器的连接是否正确4

你觉得结果怎么样?
DS18B20温度传感器如何接线?
DS18B20温度传感器的工作原理是什么?
如何读取DS18B20传感器的温度数据?
DS18B20温度传感器的分辨率是多少?
DS18B20温度传感器的转换时间是多少?
如何在数码管上显示DS18B20传感器的温度值?

以上内容由AI搜集生成,仅供参考

在线客服