找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于STM32的温度采集报警系统+源代码+原理图PCB工程文件

  [复制链接]
跳转到指定楼层
楼主
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的数值
  67.         Read >>= 10;
  68.         Read &= 0x000F;
  69.   if(0x0F!=Read)       
  70.         {
  71.           delay_ms(10);
  72.           Read=GPIO_ReadInputData(GPIOB);  //读取GPIOB的数值
  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. /*-----------------------位选函数---------------------------*/
  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)     //数值设置函数
  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, 下载次数: 188)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:833761 发表于 2020-10-25 22:56 | 只看该作者
楼主你好,那个原理图中的Rey1和Rey2六引脚原理图是什么啊,热继电器?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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