3.温度传感器与串口

发布日期:2020-12-26 09:09:48 来源:网络转载

1.题目要求

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

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

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

第1秒:10.2度

第2秒:15.7度

第3秒:7.6度

第4秒:0.5度


2.main.c测试代码

#include <reg52.h>
#include <function.h> //详见第六章第8讲
#include <timer.h>    //详见第八章第11讲
#include <uart.h>     //详见第十章第4讲
#include <ds18b20.h>  //详见第十三章第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

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。