标题: STM32单片机DS18B20温度报警器代码 [打印本页]

作者: liusanqian    时间: 2023-7-30 09:50
标题: STM32单片机DS18B20温度报警器代码
https://www.bilibili.com/video/B ... 78b8bd0daeff4af627f

  1. #include "DS18B20.h"
  2. #include "Buzzer.h"
  3. #include "delay.h"
  4. #include "usart.h"
  5. #include "TPAD.h"
  6. #include "lcd.h"
  7. #include "led.h"
  8. #include "sys.h"

  9. float T;
  10. u8 TFlag, TH;

  11. int main(void)
  12. {
  13.         Buzzer_Init();
  14.         delay_init();                      //延时函数初始化          
  15.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  16.         TPAD_Init(6);
  17.         uart_init(115200);                 //串口初始化为 115200
  18.         LED_Init();                                    //初始化与LED连接的硬件接口
  19.         LCD_Init();                                     //初始化LCD  
  20.         POINT_COLOR = RED;                //设置字体为红色
  21.         LCD_ShowString(30, 50, 200, 16, 16, "ELITE STM32");       
  22.         LCD_ShowString(30, 70, 200, 16, 16, "DS18B20 TEST");       
  23.         LCD_ShowString(30, 90, 200, 16, 16, "ATOM@ALIENTEK");
  24.         LCD_ShowString(30, 110, 200, 16, 16, "2023/6/10");
  25.         while(DS18B20_Init())
  26.         {
  27.                 LCD_ShowString(30, 130, 200, 16, 16, "DS18B20 Error");
  28.                 delay_ms(200);
  29.                 LCD_Fill(30, 130, 239, 130+16, WHITE);
  30.                 delay_ms(200);
  31.         }
  32.         LCD_ShowString(30, 130, 200, 16, 16, "DS18B20 OK");
  33.         POINT_COLOR = BLUE;   //设置字体为蓝色
  34.         LCD_ShowString(30, 150, 200, 16, 16, "Temp:   .    C");
  35.         while(1)
  36.         {
  37.                 DS18B20_ConvertT();
  38.                 T = DS18B20_ReadT();
  39.                 if(T < 0)
  40.                 {
  41.                         LCD_ShowChar(30+40, 150, '-', 16, 0);                        //显示负号
  42.                         T = -T;
  43.                 }
  44.                 else
  45.                 {
  46.                         LCD_ShowChar(30+40, 150, '+', 16, 0);                        //显示正号
  47.                 }
  48.                 LCD_ShowNum(30+40+8, 150, T, 2, 16);              //显示正数部分
  49.                 LCD_ShowNum(30+40+32, 150, (u32)(T * 10000) % 10000, 4, 16);
  50.                 if(T > 31.0000 && TFlag == 0)
  51.                 {
  52.                         if(TPAD_Scan(0))        //成功捕获到了一次上升沿(此函数执行时间至少15ms)
  53.                         {
  54.                                 LED1 =! LED1;
  55.                                 TH = 2;
  56.                         }
  57.                         else if((TH == 0 || TH == 1 || TH == 2) && TPAD_Scan(0) == 0)
  58.                         {
  59.                           TH = 1;
  60.                         }
  61.                 }
  62.                 else if(T <= 31.0000)
  63.                 {
  64.                         LED0 =! LED0;
  65.                         delay_ms(100);
  66.                         TH = 0;
  67.                         TFlag = 0;
  68.                 }
  69.                 switch(TH)
  70.                 {
  71.                         case 1:Buzzer_ON();delay_ms(50);Buzzer_OFF();delay_ms(100);break;
  72.                         case 2:Buzzer_OFF();TFlag = 1;break;
  73.                 }
  74.         }
  75. }
复制代码

原理图:无
仿真:无
Keil代码: 程序.7z (213.77 KB, 下载次数: 32)





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1