复制
收藏
提问
简洁
/************************************************************************************** 深圳市普中科技有限公司(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℃时,程序会通过串口发送温度值。以下是对代码的详细解释:
-
初始化部分:
-
主循环部分:
- 程序使用两个计数器
i
和j
来控制读取温度和发送数据的频率。 - 每50次循环读取一次温度值,通过调用
ds18b20_read_temperture()
函数实现,并将结果乘以10以保留一位小数3。
- 程序使用两个计数器
-
温度值处理:
- 如果温度值为负,将其转换为正数,并在数码管显示时添加负号。
- 将温度值分解为百位、十位、个位和小数位,以便数码管显示。
-
数码管显示:
- 使用
smg_display()
函数将分解后的温度值显示在数码管上。数码管显示的代码通过gsmg_code
数组转换为数码管可识别的编码。
- 使用
-
串口发送数据:
- 每50次循环检查一次温度值,如果超过23.0℃,则通过
send()
函数发送温度值。发送的数据格式为JSON,其中包括温度上限的值。
- 每50次循环检查一次温度值,如果超过23.0℃,则通过
-
温度值转换为JSON格式:
- 在
send()
函数中,将温度值转换为JSON格式的字符串,并通过printf()
函数发送出去。这里使用了浮点数运算来调整温度值的显示,即(float)temp_value/16-0.04
。
- 在
-
注意事项:
- 代码中提到了数码管显示和串口发送的注意事项,例如数码管的显示需要对应编码,以及温度传感器的方向。
-
代码结构:
- 代码结构清晰,包含了必要的头文件和函数声明,以及主函数
main()
的实现。
- 代码结构清晰,包含了必要的头文件和函数声明,以及主函数
请注意,代码中可能需要根据实际硬件环境和需求进行适当的调整,例如串口波特率的设置、数码管的接口等。此外,确保 ds18b20.c
和 ds18b20.h
文件中包含了DS18B20传感器的驱动代码,以及 smg.h
中定义了数码管显示所需的函数和编码67。如果在使用过程中遇到串口助手无法接收数据的问题,可能需要检查串口初始化设置或DS18B20传感器的连接是否正确4。
你觉得结果怎么样?