单片机的温度检测

2023年11月21日星期二晚21:09

此次设计是基于单片机的温度检测……

完成LCD1602正常显示及Proteus原理图的绘制。如下图:

需要注意的是:LCD1602的三个数据引脚RS、RW、EN的正确连接。

2023年11月22日星期三 晚21:47:08

添加按键扫描及键处理函数,如下:

void KeyScanf(void)                               //按键扫描

{
    P3=P3|0x07;

    if(StateNo == 1)

    {

        if((P1 & 0x07) != 0x07)

               StateNo = 2;

        else    StateNo = 1;

    }

    else if(StateNo == 2)

    {

        if((P1 & 0x07) != 0x07)

        {

           KeyValueTemp = P3 & 0x07;

           StateNo = 3;      

        }

        else    StateNo = 1;

    }

    else if(StateNo == 3)

    {

        if((P1 & 0x07) == 0x07)

        {

           StateNo = 4;

           KeyValue = KeyValueTemp;      

        }

        else _nop_();

    }

    else if(StateNo == 4)

    {

        KeyProce();

        StateNo = 1;  

    }

    else StateNo = 1; 

}

void KeyProce(void)                                   //键处理

{

    if(KeyValue == 0x05)                              //

    {
        if(Screen_No == 1)

        {
           Flash_LCD=1;

           Screen_No = 2;

        }

        else if(Screen_No == 2)

        {
           Flash_LCD=1;

           Screen_No = 3;

        }

        else if(Screen_No == 3)

        {
           Flash_LCD=1;

           Screen_No = 1;

        }       

    }

    else if(KeyValue == K1)

    {

        if(Screen_No == 2);

    }

    else if(KeyValue == K2)

    {if(Screen_No == 3);

    }

    else _nop_();

}

遇见的问题是:键处理不执行,按下按键,无动作。

问题解决:因为为P3口写为P1口。更改后,按下KEY1能够切换1~3屏。

   添加温度上限和下限;

    

         

 LCDLine1[5] = set_tempH/10 + 0x30;

          LCDLine1[6] = set_tempH%10 + 0x30;


          LCDLine2[5] = set_tempL/10 + 0x30;

          LCDLine2[6] = set_tempL%10 + 0x30;

添加 温度上下限的加减;  

 else if(KeyValue == 0x06)                        //加

   {

       if(Screen_No == 2)

          {
              set_tempH++;

          }

       else if(Screen_No == 3)

          {
              set_tempL++;

          }

   }

   else if(KeyValue == 0x03)                        //减

   {
       if(Screen_No == 2)

          {

              set_tempH--;

          }

       else if(Screen_No == 3)

          {
              set_tempL++;

          }

2023年11月23日星期四晚21:09:44

直接移植温度传感器DS18B20驱动程序,稍作调整,Proteus仿真如下:

将程序下载至开发板之中,DS18B20工作正常,能正常采集,一次成功。

但是出现一个有趣的现象,温度超过26°后,LCD1602显示出现乱码,如下:

原因暂时未知;

2023年12月1日周五晚21:35:32

本周花了一些时间看串口通信,想试试将检测的温度输出到PC,为啥没有26°以上的温度,结果失败了。

后面有重新查看所有变量,结果原因是:temp_value 的类型太小,导致26°温度无法正常显示(仅仅是将原unsigned char 改为unsigned int ,并未仔细研究温度转换前的数值大小。)。图如下;

目前零下的温度没有处理,所以不能正常显示。

晚22:32:08,

对零下温度的相关函数进行修改和调试,效果图如下。

至于为什么是0.9的精度,后续有机会再研究。

下一步是完成报警系统。

2023年12月2日周六晚22:22:56

加入电机散热、加热设备,均分别以黄绿LED代替;以及蜂鸣器报警程序。图略。还存在一个小小问题,每个几秒钟,蜂鸣器会无故响一下。

本次设计大致基本 完成。end?

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值