历史上的今天
今天是:2024年08月30日(星期五)
2021年08月30日 | 51单片机-温度传感器与串口
2021-08-30 来源:eefocus
1.题目要求
有时候我们需要知道在一段时间里温度传感器测量的温度的历史数据,之前的温度传感器例程只是在液晶屏上实时显示出数据而已,并不能查看它的历史数据,所以我们运用之前所有学过的知识来完成这个任务。
首先我们先从简单的理念入手,利用串口每隔一秒打印出来当前的温度值,这样的话,所有历史数据在电脑端的窗口都可以看到了,只不过我们的开发板的USB线不能离开电脑,测温度只能连着电脑测,然后观察电脑端窗口数据的变化。
这一次我们实时显示的温度用数码管显示,串口打印的数据格式大体如下所示
第1秒:10.2度
第2秒:15.7度
第3秒:7.6度
第4秒:0.5度
2.main.c测试代码
#include #include #include #include #include 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.串口打印截图 笔者上电之后,故意向开发板上的温度传感器吹热气,效果很棒
上一篇:51单片机-遥控器控制舵机
下一篇:51单片机-模拟倒车雷达报警
史海拾趣
|
Fundamentals_of_Instrumentation_and_Measurement.pdf 寒假回家前人品爆发第二帖。 书名:Fundamentals_of_Instrumentation_and_Measurement 作者:Dominique Placko 出版社:Published in Great Britain and the United States in 2007 by ISTE Ltd 版次:第一版 总页数:555 文件格式:PDF ...… 查看全部问答> |
|
先讲讲5.0情况: 5.0内存映射读取文件,会有物理内存进行缓存,这样重复读取相同内容时直接从内存缓冲中取得,直到所有物理内存耗尽(low_memory情况),这时5.0会一次性全部自动释放所有物理内存,之后的文件读取又要从文件去取到内存了。这里的物 ...… 查看全部问答> |
|
我一直有个问题不是很清楚,zigbee发送0和1数据,按照MSK的来理解,0和1应该分别对应一个频率,所以在RF输出的时候频谱应该是在两个地方有主峰,例如在一个channel中,以2.405G为中心,有数据发送时候应该分别在2.405G+500K处,和2.405G-500K处有主 ...… 查看全部问答> |
|
本帖最后由 IC爬虫 于 2014-9-23 13:37 编辑 接上一篇使用寄存器开发FR5969LAUNCHPAD,这个试验依旧还是闪烁LED2,这样大家可以和我的前面的那个帖子作对比,辨别异同,这样可以更好的了解430的库开发过程。 & ...… 查看全部问答> |




