资讯详情

温度传感器与串口

1.题目要求

有时我们需要知道温度传感器在一段时间内测量的历史数据。之前的温度传感器例程只是实时显示在液晶屏上,无法查看其历史数据,所以我们使用我们以前学到的所有知识来完成这项任务。

首先,我们从一个简单的概念开始,每隔一秒就使用串打印当前的温度值。这样,所有的历史数据都可以在计算机窗口看到,但我们的开发板USB线不能离开电脑,测量温度只能与电脑相连,然后观察电脑端窗口数据的变化。

这一次,我们实时显示的温度用数字管显示,串口打印的数据格式如下所示

第1秒:10.2度

第2秒:15.7度

第3秒:7.6度

第4秒:0.5度

2.main.c测试代码#include

#include//详见第六章第八讲

#include//详见第八章第11讲

#include//详见第十章第四讲

#include//详见第十三章第五讲

u8flag1s=0;

voidmain()

{

u32x=1;

u8str[13];

u16temp;

EA=1;

LED_Init();

Start18B20();//启动DS18B20

TIM0_Init(1000,33);//定时1ms,33是微调使定时精度更高,每次微调都由中断函数中的内容决定

ConfigUART(9600);

while(1)

{

if(flag1s)///每秒更新一次温度

{

flag1s=0;

if(TEMP_CONV(&temp,str)==1)//返回值1代表读取温度的成功

{

printf_str("第");

printf_num(x);

x ;

printf_str("秒:");

printf_str(str temp_i);

printf_str("度");

printf_rn();///回车换行

temp_i=0;

///以下是处理数字管显示的内容

LedBuff[0]=LedChar[str[4]-0;

LedBuff[1]=0x7F;//显示小数点

LedBuff[2]=LedChar[str[2]-0;

if(str[0]=='-')///温度小于0

{

if(str[1]=='0')

{

LedBuff[3]=0xBF;//数码管显示-

LedBuff[4]=0xFF;

}

else

{

LedBuff[3]=LedChar[str[1]-0;

LedBuff[4]=0xBF;//数码管显示-

}

}

else//温度大于等于0

{

if(str[1]=='0')LedBuff[3]=0xFF;///高位不显示0

elseLedBuff[3]=LedChar[str[1]-0;

if(str[0]=='0')LedBuff[4]=0xFF;///高位不显示0

elseLedBuff[4]=LedChar[str[0]-0;

}

}

Start18B20();///重启下一次转换

}

}

}

voidTIM0_IRQHandler()interrupt1

{

staticu16tmr1s=0;

TH0=T0RH;//重新加载重载值

TL0=T0RL;

tmr1s ;

SEG_Scan();

if(tmr1s>=1000)//定时1s

{

tmr1s=0;

flag1s=1;

}

}

voidInterruptUART()interrupt4

{

if(RI)//接收字节

{

RI=0;///手动清零接收中断标志

}

}

3.串口打印截图

作者上电后,故意向开发板上的温度传感器吹热空气,效果很好

94700c57f5845edc84af9afeefcf47b4.png

标签: 主板传感器温度过高

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台