2020年买电子元器件,上唯样商城

51单片机-温度传感器与串口

1 题目要求有时候我们需要知道在一段时间里温度传感器测量的温度的历史数据,之前的温度传感器例程只是在液晶屏上实时显示出数据而已,并不

1.题目要求


有时候我们需要知道在一段时间里温度传感器测量的温度的历史数据,之前的温度传感器例程只是在液晶屏上实时显示出数据而已,并不能查看它的历史数据,所以我们运用之前所有学过的知识来完成这个任务。


首先我们先从简单的理念入手,利用串口每隔一秒打印出来当前的温度值,这样的话,所有历史数据在电脑端的窗口都可以看到了,只不过我们的开发板的USB线不能离开电脑,测温度只能连着电脑测,然后观察电脑端窗口数据的变化。


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


第1秒:10.2度


第2秒:15.7度


第3秒:7.6度


第4秒:0.5度


2.main.c测试代码


#include

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

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

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

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

u8 flag1s = 0;

void main()

{

u32 x=1;

u8 str[13];

u16 temp;

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

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

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

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

}

}

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

}

}

}

void TIM0_IRQHandler() interrupt 1

{

static u16 tmr1s = 0;

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

TL0 = T0RL;

tmr1s++;

SEG_Scan();

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

{

tmr1s = 0;

flag1s= 1;

}

}

void InterruptUART() interrupt 4

{

if (RI) //接收到字节

{

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

}

}


3.串口打印截图


笔者上电之后,故意向开发板上的温度传感器吹热气,效果很棒

15.11.png

THE END
免责声明:本文为网友转载文章,转载此文目的在于传递更多信息,版权归原作者所有,与平台无关。本文所用视频、图片、文字如涉及作品版权问题,请电话或者邮箱(marketing@oneyac.com )联系小编进行侵删。
30元新人礼待领取
资讯排行榜
原厂授权品牌

更多授权品牌 >>

热卖元器件
编号 库存
T491B107K010AT 200,000
TDA4863-2G 2,500
SCC2211N330K602TG 1,000
BUK9Y41-80E,115 16,500
VS-E5PX6012L-N3 3,000
热门标签