找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32 mlx90614源程序 DS18B20,语言播报,带温度补偿功能

[复制链接]
跳转到指定楼层
楼主
ID:1053560 发表于 2023-7-6 22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. //温度的单位 ℃
  2. unsigned char TempCompany[][16]=
  3. {
  4.         0x06,0x09,0x09,0xE6,0xF8,0x0C,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
  5.         0x00,0x00,0x00,0x07,0x1F,0x30,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00,
  6. };

  7. float GY906_Temperature;                        //体温数据全局变量(浮点型)
  8. float GY906_Max_Temperature=37.5;        //温度阈值

  9. int DS18B20_Temperature;                        //环境温度

  10. char GY906_TempValue[80] = {0};         //体温值(字符串)
  11. char DS18B20_TempValue[80] = {0};        //环境值(字符串)

  12. float Temperature_Compensation(float GY906_Temperature);        //温度补偿函数
  13. void Display_Only_Temperature(void);                                                //视觉数据为空,只判断温度

  14. int main(void)
  15. {        
  16.         char Visual;
  17.         
  18.         I2C_EE_Init();
  19.         Beep_Init();
  20.         delay_init();         
  21.                
  22.         USART1_Config();                                        //语音模块串口初始化为9600
  23.         USART2_Config();                                        //接收视觉数据串口初始化为115200
  24.         
  25.         OLED_Init()        ;
  26.         OLED_Clear() ;
  27.          LED_GPIO_Config();                                       
  28.     SMBus_Init();
  29.         DS18B20_Init();
  30.         LED_RED_ON();
  31.         //蜂鸣器关
  32.         Beep_ON();
  33.         while(1)
  34.         {        
  35.                 //第一行显示体温
  36.                 displayGY906();
  37.                 //第二行显示环境温度               
  38.                 displayDS18B20();
  39.                 //显示温度正常
  40.                 displayTempOK();
  41.                 //显示距离正常
  42.                 displayDisOK();
  43.                 Display_Only_Temperature();
  44.                 if(GY906_Temperature>35)                                    
  45.                 {
  46.                         if(GY906_Temperature<=GY906_Max_Temperature)
  47.                         {
  48.                                 printf("体温正常");
  49.                                 delay_ms(1200);
  50.                         }
  51.                         else if(GY906_Temperature>GY906_Max_Temperature)
  52.                         {
  53.                                 displayTempERR();
  54.                                 for(int i=0;i<2;i++)
  55.                                 {
  56.                                         BEEP();
  57.                                         printf("体温异常,请注意");
  58.                                         delay_ms(1200);
  59.                                         delay_ms(1200);
  60.                                 }        
  61.                         }
  62.                 }
  63.                 //接收视觉数据
  64. //                Visual=getchar();
  65.                 if(USART_GetFlagStatus(DEBUG_USART2, USART_FLAG_RXNE) == RESET)//RESET未接收
  66.                 {
  67.                         Display_Only_Temperature();
  68.                         displayTempOK();
  69.                         displayDisOK();
  70.                         //说明有人靠近                                      
  71.                         if(GY906_Temperature>35)                                    
  72.                         {
  73.                                 if(GY906_Temperature<=GY906_Max_Temperature)
  74.                                 {
  75.                                         printf("体温正常");
  76.                                         delay_ms(1200);
  77.                                 }
  78.                                 else if(GY906_Temperature>GY906_Max_Temperature)
  79.                                 {
  80.                                         displayTempERR();
  81.                                         for(int i=0;i<2;i++)
  82.                                         {
  83.                                                 //蜂鸣器响
  84.                                                 BEEP();
  85.                                                 printf("体温异常,请注意");
  86.                                                 delay_ms(1200);
  87.                                                 delay_ms(1200);
  88.                                         }        
  89.                                 }
  90.                         }
  91.                 }
  92.                 if(USART_GetFlagStatus(DEBUG_USART2, USART_FLAG_RXNE) == SET)//SET接收
  93.                 {
  94.                         //温度正常,距离正常
  95.                         if((GY906_Temperature<=GY906_Max_Temperature)&&(Visual=='0'))
  96.                         {
  97.                                 Display_Only_Temperature();
  98.                                 //显示温度正常
  99.                                 displayTempOK();
  100.                                 //显示距离正常
  101.                                 displayDisOK();
  102.                                 //蜂鸣器关
  103.                                 Beep_ON();
  104.                         }
  105.                         //温度正常,距离异常
  106.                         else if((GY906_Temperature<=GY906_Max_Temperature)&&(Visual=='1'))
  107.                         {
  108.                                 Display_Only_Temperature();
  109.                                 //显示温度正常
  110.                                 displayTempOK();
  111.                                 //显示距离报警
  112.                                 displayDisERR();
  113.                                 for(int i=0;i<2;i++)
  114.                                 {
  115.                                         //蜂鸣器响
  116.                                         BEEP();
  117.                                         printf("距离过近,请保持距离");
  118.                                         delay_ms(1300);
  119.                                         delay_ms(1200);
  120.                                 }
  121.                         }
  122.                         //温度异常,距离异常
  123.                         else if((GY906_Temperature>GY906_Max_Temperature)&&(Visual=='1'))
  124.                         {               
  125.                                 Display_Only_Temperature();
  126.                                 //显示温度报警
  127.                                 displayTempERR();
  128.                                 //显示距离报警
  129.                                 displayDisERR();
  130.                                 for(int i=0;i<2;i++)
  131.                                 {
  132.                                         //蜂鸣器响
  133.                                         BEEP();
  134.                                         printf("距离过近,请保持距离");
  135.                                         delay_ms(1300);
  136.                                         delay_ms(1200);
  137.                                 }
  138.                         }               
  139.                         //温度异常,距离正常
  140.                         else if((GY906_Temperature>GY906_Max_Temperature)&&(Visual=='0'))
  141.                         {
  142.                                 Display_Only_Temperature();
  143.                                 //显示温度报警
  144.                                 displayTempERR();
  145.                                 //显示距离正常
  146.                                 displayDisOK();
  147.                                 for(int i=0;i<2;i++)
  148.                                 {
  149.                                         //蜂鸣器响
  150.                                         BEEP();
  151.                                         printf("体温异常,请注意");
  152.                                         delay_ms(1200);
  153.                                         delay_ms(1200);
  154.                                 }
  155.                         }
  156.                 }
  157.         }
  158. }
  159. //温度补偿
  160. float Temperature_Compensation(float GY906_Temperature)
  161. {
  162.         if(GY906_Temperature<35)
  163.                 return GY906_Temperature-=2;
  164.         
  165.         else if((GY906_Temperature>=35)&&(GY906_Temperature<36))
  166.                 return GY906_Temperature+=1;
  167.         
  168.         else if((GY906_Temperature>=36)&&(GY906_Temperature<=36.3))
  169.                 return GY906_Temperature+=0.5;
  170.         
  171.         else if((GY906_Temperature>=36.4)&&(GY906_Temperature<=36.6))
  172.                 return GY906_Temperature+=0.1;
  173.         
  174.         else if((GY906_Temperature>=37.0)&&(GY906_Temperature<=37.2))
  175.                 return GY906_Temperature-=0.3;
  176.         
  177.         else if(GY906_Temperature>=37.3)
  178.                 return GY906_Temperature;
  179. }

复制代码
原理图:无
仿真:无
Keil代码下载: 温度补偿-DS18B20-语言播报.7z (194.09 KB, 下载次数: 21)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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