当前位置:   article > 正文

学习笔记:基于stm32单片机的温度报警设计_stm32温度报警蜂鸣器

stm32温度报警蜂鸣器

1.采用DS18B20传感器测试温度,LCD显示当前温度;

2.温度精确到小数点显示,温度测量范围-55~125度;

3.当DS18B20传感器测试温度到实际温度上下限时,STM32单片机控制的蜂鸣器报警提示;

4.可以设置温度下限值和温度上限值,设置温度的参数具有掉电保护功能,保存在STM32内部FLASH,上限无需重新设置;

5.第一次按设置键设置温度上限值,第二次按设置温度下限值,再按加减键就可以加减设置的温度报警值。

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"     
  7. #include "ds18b20.h" 
  8. #include "beep.h" 
  9.  
  10. u8 T_max = 35;
  11. u16 PWM_Val = 100;//用于PWM调节
  12. void display_Max()//显示上限值
  13. {
  14.         LCD_ShowNum(30+40+8,170,T_max/10,2,16);    //显示正数部分        
  15.        LCD_ShowNum(30+40+32,170,T_max%10,1,16);    //显示小数部分     
  16. }
  17. void keyscan()//按键扫描
  18. {
  19.       static u8 key_val = 0;
  20.     
  21.         key_val = KEY_Scan(0);//获取按键值
  22.         if(key_val == 2)//加键按下
  23.         { 
  24.              if(T_max < 99)//最大只能到99
  25.              {
  26.                     T_max++;
  27.              }
  28.              display_Max();//显示
  29.         }
  30.         if(key_val == 3)//减键按下
  31.         { 
  32.              if(T_max > 0)//最小到0
  33.              {
  34.                     T_max--;
  35.              }
  36.              display_Max();
  37.         }        
  38. }
  39.  int main(void)
  40.  {     
  41.     u8 t=0;
  42.     short temperature = 0;
  43.     delay_init();              //延时函数初始化      
  44.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  45.     uart_init(115200);         //串口初始化为 115200
  46.     LED_Init();                    //初始化与LED连接的硬件接口
  47.     LCD_Init();                    //初始化LCD  
  48.     BEEP_Init();          //初始化蜂鸣器端口
  49.     KEY_Init();           //按键初始化
  50.      POINT_COLOR=BRRED;      //设置字体为棕红色 
  51.     LCD_ShowString(30,50,200,16,16,"LIUTONG");    
  52.     LCD_ShowString(30,70,200,16,16,"DS18B20 TEST");    
  53.     LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
  54.     LCD_ShowString(30,110,200,16,16,"2023/6/12");    
  55.      
  56.      while(DS18B20_Init())    //DS18B20初始化    
  57.     {
  58.         LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
  59.         delay_ms(200);
  60.         LCD_Fill(30,130,239,130+16,WHITE);
  61.          delay_ms(200);
  62.     }                
  63.         DS18B20_Get_Temp();//温度初始化    
  64.       LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
  65.         POINT_COLOR=BLUE;//设置字体为蓝色 
  66.         LCD_ShowString(30,150,200,16,16,"Temp:   . C");     
  67.       POINT_COLOR=BLACK;//设置字体为黑色 
  68.         LCD_ShowString(30,170,200,16,16,"T_max:     C ");
  69.     
  70.         display_Max();
  71.     
  72.         //读取温度数值
  73.     while(1)
  74.     {        
  75.         keyscan();//按键扫描    
  76.          if(t%10==0)            //每100ms读取一次
  77.         {                                      
  78.             temperature=DS18B20_Get_Temp();    
  79.             if(temperature<0)
  80.             {
  81.                 LCD_ShowChar(30+40,150,'-',16,0);            //显示负号
  82.                 temperature=-temperature;                        //转为正数
  83.             }
  84.             else 
  85.                 LCD_ShowChar(30+40,150,' ',16,0);            //去掉负号
  86.               LCD_ShowNum(30+40+8,150,temperature/10,2,16);    //显示正数部分        
  87.                LCD_ShowNum(30+40+32,150,temperature%10,1,16);    //显示小数部分            
  88.         }        
  89.         
  90.         
  91.         //蜂鸣器报警范围 
  92.                 if(T_max<(temperature/10))BEEP=1;
  93.                         else BEEP=0;
  94.                                                 
  95.          delay_ms(10);
  96.         t++;
  97.         if(t==20)
  98.         {
  99.             t=0;
  100.             LED0=!LED0;//提示系统运行
  101.         }
  102.         
  103.     }
  104. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/455951
推荐阅读
相关标签
  

闽ICP备14008679号