久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1687|回復: 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, 下載次數: 22)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品178页 | 国产精品99精品久久免费 | 久久久久久电影 | 国产视频久久 | 97视频在线免费 | 亚洲最新在线视频 | 日本黄色影片在线观看 | 男人天堂色 | 国产成人精品久久二区二区91 | 99精品免费久久久久久日本 | 国产欧美精品一区二区 | 久久久五月天 | 日韩欧美国产精品 | 亚洲精品视频在线 | 亚洲一区二区不卡在线观看 | 日韩成人免费视频 | 91高清在线观看 | 91亚洲国产亚洲国产 | 久久久.com| 亚洲成人一区二区三区 | 国产黄色大片在线免费观看 | 视频在线一区二区 | 久久久123| 久久国产精品一区 | 免费国产一区二区 | 蜜桃黄网| 国产一区二区三区四区五区加勒比 | 久久久青草婷婷精品综合日韩 | 久久亚洲精品国产精品紫薇 | 中文字幕男人的天堂 | 色频 | 国产中文字幕亚洲 | 麻豆一区 | 欧美成人免费电影 | av色站| 免费国产一区 | 国产伦精品一区二区三区照片91 | 国产一区二区精品自拍 | 美女黄网 | 精品日韩一区 | 欧美看片 |