找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1348|回复: 0
打印 上一主题 下一主题
收起左侧

STM32单片机DS18B20温度报警器代码

[复制链接]
跳转到指定楼层
楼主
ID:1090044 发表于 2023-7-30 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表