历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2021年08月30日 | 51单片机-温度传感器与串口

发布者:MysticalGarden 来源: eefocus关键字:51单片机  温度传感器  串口 手机看文章 扫描二维码
随时随地手机看文章

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

关键字:51单片机  温度传感器  串口 引用地址:51单片机-温度传感器与串口

上一篇:51单片机-遥控器控制舵机
下一篇:51单片机-模拟倒车雷达报警

推荐阅读

据外媒报道,当地时间8月28日,以色列Foresight Autonomous控股有限公司宣布再次出售其具突破性的QuadSight四摄像头视觉系统。该QuadSight多摄像头视觉解决方案面向半自动驾驶和自动驾驶汽车市场,在任何天气和照明条件下,都几乎100%可检测到障碍物,报警失误为零。该实体镜技术系统已被欧洲一家大型汽车制造商的卡车部门订购,该系统原型预计可创收数万...
最近有关特斯拉新款电动皮卡的消息正在浮出水面,据特斯拉官方称,该皮卡将打败福特 F-150,且将在2-3个月后上市。 据了解,特斯拉早在两年前公布了内部正在准备的一款电动皮卡,但是一直未能成功上市。不过,上个月马斯克曾在推特上公开表示,特斯拉电动皮卡将在2-3个月后正式亮相。其最终的命名或为“Model B”。 根据此前曝光的消息来看,特斯拉电动...
2018年瓴盛科技成立之后,各类新闻层出不穷。然而之后的两年间,瓴盛除了更换CEO、将全球总部定在成都之外,似乎并没有其他更多的消息。最近两天,瓴盛的新闻被刷了屏,公司推出了成立后的首颗量产芯片——面向AIoT的SoC JA310,并且已经被客户批量选用。正如瓴盛CEO 肖小毛所说:“千里之行始于足下,做一个IC不是容易的事情,瓴盛经过一年的努力,完成...
这一章节的内容比较简单,大家反复细读学习《手把手教你学51单片机》文档第17章就会了解透彻这部分的知识。1.简要解析概念和代码我们知道PCF8591有4个通道是可以用来读取输入的电压值的。那么宋老师写的“unsigned char GetADCValue(unsigned char chn)”就是选择读取其中一个通道输入的测量电压是多少V,受基准源影响,测量范围是0V~2.5V,函数返回值...

史海拾趣

问答坊 | AI 解惑

直流互感器仿真问题

各位师兄紧急求助: 如何用Mutisim10对直流互感器建模并仿真? 已知输入端dc电流20MA,输出5V 互感器资料见附件 先谢过师兄了!!!急。。。。。…

查看全部问答∨

未来绿色水上博物馆

这艘半船半建筑的水上设计,功能多样,集各种高科技于一身。它周身布满植物的造型十分惹眼。这艘依靠太阳能和水电同时供能的船,外壳涂有一层钛氧化物,可以有效吸收紫外线。在行进过程中,它还可以净化水中的污染。在这艘浮动的“水上公园”里,同 ...…

查看全部问答∨

如何实现两个脉冲之间的计时

我用的电机转一圈发送一个脉冲,我想知道两个脉冲之间的时间间隔该如何得到,由此得电机的转速…

查看全部问答∨

Marvell 8688 WIFI SDIO

问题是可以Search到AP,但是关联不上,每次连接都失败. OS起来后,debug port输出如下: -OALIntrRequestSysIntr(irq = 21, sysIntr = 27) GetSystemPowerStstusEx2 failed with error 0x1f. -OALIntrRequestSysIntr(irq = 100, sysIntr = 28) -OA ...…

查看全部问答∨

LINK : fatal error LNK1181: cannot open input file 'libcpmt.lib'

编译结果中的libcpmt.lib在EVC的安装目录下没有找到 …

查看全部问答∨

请问下window mobile6.0 都支持哪些数据库啊

我的开发环境是VS2008+SQLite3,原以为window mobile6.0是支持sqlite的,结果做了例子,一直报错说error LNK2019: 无法解析的外部符号 sqlite3_open... 最初看sqlite介绍的时候说是支持智能手机的windowCE系统的,怎么会这样啊,真不支持吗? 如果 ...…

查看全部问答∨

一些工程师的感言

很真切!这些有经验的工程师的讲的也许会对你有一定启示!…

查看全部问答∨

海量TMS320C54x 资料共享

各取所需,觉得好的别忘了顶一下哈…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved