找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6494|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  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;  //高溫報(bào)警溫度
  13. float Set_L = 10.0;  //低溫報(bào)警溫度

  14. float Temp=0;        //實(shí)時(shí)溫度
  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;    //設(shè)置成輸入模式
  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';  //無(wú)效返回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;   //確認(rèn)按鍵
  81.                     case 0x0D:
  82.         { key = '-'; }break;   //減
  83.         case 0x0B:
  84.         { key = '+'; }break;   //加
  85.         case 0x07:
  86.         { key = 'S'; }break;   //設(shè)置
  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è)置函數(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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表