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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6472|回復: 1
打印 上一主題 下一主題
收起左側

基于STM32的溫度采集報警系統(tǒng)+源代碼+原理圖PCB工程文件

  [復制鏈接]
跳轉到指定樓層
樓主
ID:799282 發(fā)表于 2020-7-7 19:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "LCD1602.h"
  5. #include "led.h"
  6. #include "ds18b20.h"

  7. //Buzzer--------------->PB8
  8. //LED1----------------->PB15

  9. //LED2----------------->PA8
  10. //Relay2--------------->PA9
  11. //Relay1--------------->PA10

  12. float Set_H = 35.0;  //高溫報警溫度
  13. float Set_L = 10.0;  //低溫報警溫度

  14. float Temp=0;        //實時溫度
  15. unsigned char SetFlag = 0;

  16. //初始化按鍵 LED 繼電器 蜂鳴器端口
  17. void PortInit(void)
  18. {
  19.   GPIO_InitTypeDef GPIO_InitStructure;
  20.        
  21.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  22.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  25.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  26.         GPIO_SetBits(GPIOA,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);
  27.        
  28.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  29.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_15;
  30.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  31.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  32.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  33.         GPIO_SetBits(GPIOB,GPIO_Pin_8 | GPIO_Pin_15);
  34.        
  35. /*-------------------按鍵初始化-------------------------*/       
  36.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
  37.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  38.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //設置成輸入模式
  39.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  40.         GPIO_SetBits(GPIOB,GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13);
  41. }

  42. void CoolingStart(void)
  43. {
  44.         GPIO_ResetBits(GPIOB,GPIO_Pin_8);  
  45.         GPIO_ResetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_8);
  46. }

  47. void CoolingStop(void)
  48. {
  49.         GPIO_SetBits(GPIOB,GPIO_Pin_8);  
  50.         GPIO_SetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_8);
  51. }


  52. void HeatStart(void)
  53. {
  54.   GPIO_ResetBits(GPIOA,GPIO_Pin_10);
  55.   GPIO_ResetBits(GPIOB,GPIO_Pin_15);         
  56. }

  57. void HeatStop(void)
  58. {
  59.   GPIO_SetBits(GPIOA,GPIO_Pin_10);
  60.   GPIO_SetBits(GPIOB,GPIO_Pin_15);         
  61. }


  62. unsigned char KeyVal(void)
  63. {
  64.   unsigned char key='0';  //無效返回255
  65.         uint16_t Read;
  66.         Read=GPIO_ReadInputData(GPIOB);  //讀取GPIOB的數(shù)值
  67.         Read >>= 10;
  68.         Read &= 0x000F;
  69.   if(0x0F!=Read)       
  70.         {
  71.           delay_ms(10);
  72.           Read=GPIO_ReadInputData(GPIOB);  //讀取GPIOB的數(shù)值
  73.           Read >>= 10;
  74.           Read &= 0x000F;
  75.                 if(0x0F!=Read)
  76.                 {
  77.                   switch(Read)
  78.                         {
  79.                           case 0x0E:
  80.                                 { key = 'A'; }break;   //確認按鍵
  81.                     case 0x0D:
  82.         { key = '-'; }break;   //減
  83.         case 0x0B:
  84.         { key = '+'; }break;   //加
  85.         case 0x07:
  86.         { key = 'S'; }break;   //設置
  87.         default: break;                               
  88.                         }
  89.                 }       
  90.         }
  91.         return key;
  92. }

  93. /*-----------------------位選函數(shù)---------------------------*/
  94. void BitSelect(void)
  95. {
  96.   if('S'==KeyVal())
  97.   {
  98.           while('S'==KeyVal());
  99.           SetFlag++;
  100.                 if(SetFlag>5)
  101.                         SetFlag=0;
  102.         }               
  103. }

  104. void SetDisplay(void)
  105. {
  106.   if('+'==KeyVal() || '-'==KeyVal())  //如果有按鍵按下
  107.         { ; }
  108.         else
  109.         {
  110.           switch(SetFlag)
  111.                 {
  112.                   case 0:
  113.                         {  LCD_DisChar(1,3,' ');  }break;
  114.                         case 1:
  115.                         {  LCD_DisChar(1,4,' ');  }break;
  116.                         case 2:
  117.                         {  LCD_DisChar(1,6,' ');  }break;
  118.                         case 3:
  119.                         {  LCD_DisChar(1,11,' '); }break;
  120.                         case 4:
  121.                         {  LCD_DisChar(1,12,' '); }break;
  122.                         case 5:
  123.                         {  LCD_DisChar(1,14,' ');  }break;
  124.                         default:break;
  125.                 }
  126.         }
  127.         delay_ms(120);         
  128.         LCD_DisFloat(1,2,Set_H,5,1);
  129.         LCD_DisFloat(1,10,Set_L,5,1);
  130.   delay_ms(120);  
  131. }


  132. void SetVal(void)     //數(shù)值設置函數(shù)
  133. {
  134.   if('+'==KeyVal())
  135.   {
  136.           switch(SetFlag)
  137.                 {
  138.                         case 0:
  139.                         {
  140.                           if(Set_H<90)
  141.                                         Set_H+=10;
  142.                                 else
  143.                                         Set_H = 100;
  144.                         }break;
  145.                         case 1:
  146.                         {
  147.                           if(Set_H<99)
  148.                                   Set_H+=1;
  149.                                 else
  150.                                         Set_H = 100;
  151.                         }break;
  152.                         case 2:
  153.                         {
  154.                           if(Set_H<99.8)
  155.                                   Set_H+=0.1;
  156.                                 else
  157.                                         Set_H = 100;
  158.                         }break;
  159.                         case 3:                   //低溫限度不能高于高溫限度-1
  160.                         {
  161.                           if(Set_L<Set_H-11)
  162.                 Set_L+=10;
  163.                                 else
  164.                                         Set_L = Set_H-1;
  165.                                
  166.                         }break;
  167.                         case 4:
  168.                         {
  169.                           if(Set_L<Set_H-2)
  170.                 Set_L+=1;
  171.                                 else
  172.                                         Set_L = Set_H-1;
  173.                                
  174.                         }break;
  175.                         case 5:
  176.                         {
  177.                           if(Set_L<Set_H-1.1)
  178.                 Set_L+=0.1;
  179.                                 else
  180.                                         Set_L = Set_H-1;
  181.                         }break;
  182.                         default:break;
  183.                 }
  184.         }
  185. /*-------------------------------------------------------*/       
  186.   if('-'==KeyVal())       
  187.   {
  188.           switch(SetFlag)
  189.                 {
  190.                         case 0:
  191.                         {
  192.                           if(Set_H>Set_L+11)
  193.           Set_H -=10;
  194.         else
  195.           Set_H = Set_L+1;                                       
  196.                         }break;
  197.                         case 1:
  198.                         {
  199.                           if(Set_H>Set_L+1)
  200.           Set_H -=1;
  201.         else
  202.           Set_H = Set_L+1;                       
  203.                         }break;
  204.                         case 2:
  205.                         {
  206.                           if(Set_H>Set_L+1.1)
  207.           Set_H -=0.1;
  208.         else
  209.           Set_H = Set_L+1;                       
  210.                         }break;
  211.                         case 3:
  212.                         {
  213.                           if(Set_L>10)
  214.                                         Set_L-=10;
  215.                                 else
  216.                                         Set_L = 0;
  217.                         }break;
  218.                         case 4:
  219.                         {
  220.                           if(Set_L>1)
  221.                                         Set_L-=1;
  222.                                 else
  223.                                         Set_L = 0;
  224.                         }break;
  225.                         case 5:
  226.                         {
  227.                                 if(Set_L>0.1)
  228.                                         Set_L-=0.1;
  229.                                 else
  230.                                         Set_L = 0;
  231.                        
  232.                         }break;
  233.                         default:break;
  234.           }
  235.   }
  236. }


  237. void AlarmSet(void)
  238. {
  239.   if('S'==KeyVal())
  240.   {
  241.                 while('S'==KeyVal());
  242.                 SetFlag=0;
  243.                 while(1)
  244.                 {
  245.                    BitSelect();
  246.              SetDisplay();
  247.                    SetVal();  
  248. /*-----------------------------*/               
  249.                    if('A'==KeyVal())
  250.        {
  251.                      while('A'==KeyVal());
  252.                            break;
  253.                          }
  254.                 }
  255.         }
  256. }

  257. void TempControl(void)
  258. {
  259.   if(Temp>Set_H)
  260.         {
  261.           CoolingStart();
  262.         }
  263.        
  264.         if(Temp<Set_H-0.2)
  265.         {
  266.           CoolingStop();
  267.         }
  268.        
  269.         if(Temp<Set_L)
  270.         {
  271. ……………………

  272. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
STM32溫度報警器.7z (1.35 MB, 下載次數(shù): 188)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:833761 發(fā)表于 2020-10-25 22:56 | 只看該作者
樓主你好,那個原理圖中的Rey1和Rey2六引腳原理圖是什么啊,熱繼電器?
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产黄色大片在线免费观看 | 国产一区二区三区在线视频 | 网络毛片 | 国产精品自拍av | 9999精品视频 | 亚洲欧美激情网 | 91久久精品日日躁夜夜躁国产 | 国产1区| 韩日三级 | 狠狠入ady亚洲精品经典电影 | 久久人人网 | 亚洲国产精品va在线看黑人 | 中文字幕在线免费观看 | 国产电影精品久久 | 免费一区二区 | 亚洲成人激情在线观看 | 在线免费观看毛片 | 久久一区二区免费视频 | 欧美一区二区三区视频在线播放 | 国产日产欧产精品精品推荐蛮挑 | 精品国产91亚洲一区二区三区www | 美女久久久久久久久 | 国产中文字幕在线 | 国产精品v | 毛色毛片免费看 | 国产乱码精品1区2区3区 | 一区二区电影网 | 在线免费黄色小视频 | 91色在线| 成人国产在线视频 | 欧美在线一区视频 | 亚洲国产成人精品女人久久久 | 91成人在线视频 | av综合站| 国产成人午夜精品影院游乐网 | 国产精品一区二区三区四区 | 一级看片免费视频囗交动图 | 91tv在线观看| 亚洲九色| 国产91网站在线观看 | 日韩精品成人一区二区三区视频 |