找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2363|回复: 1
收起左侧

stm32+WIFI远程DS18B20温度监控系统程序设计(电脑TCP调试助手显示)

[复制链接]
ID:401143 发表于 2019-1-5 21:11 | 显示全部楼层 |阅读模式
  一 , 1) 控制板上LED、蜂鸣器;
2) 使用DS18B20采集环境温度值;
3) 液晶屏上显示正常温度、温度阈值、相关提示信息;
4) 按键可以手动调节阈值温度加减;
5) 通过蜂鸣器和LED实现温度超限报警功能;
6) 通过WIFI模块传输数据至电脑TCP调试助手,实现远程控
二,自动报警

制作出来的实物图如下:
CEA8222EE7A18D0F6ECC4823799067B2.png 59CCD9B0398F82D6192A8F97B8AF94DE.png
程序比较乱,,,,,,

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp_ili9341_lcd.h"
  3. #include "stdio.h"
  4. #include "bsp_esp8266.h"
  5. /**
  6.   * @brief  主函数
  7.   * @param  无  
  8.   * @retval 无
  9.   */
  10. #define Beep_ON  GPIO_SetBits(GPIOA,GPIO_Pin_8)
  11. #define Beep_OF GPIO_ResetBits(GPIOA,GPIO_Pin_8)

  12. #define LED1OF GPIO_SetBits(GPIOB,GPIO_Pin_0)
  13. #define LED2OF GPIO_SetBits(GPIOB,GPIO_Pin_1)
  14. #define LED3OF GPIO_SetBits(GPIOB,GPIO_Pin_5)

  15. #define LED1ON GPIO_ResetBits(GPIOB,GPIO_Pin_0)
  16. #define LED2ON GPIO_ResetBits(GPIOB,GPIO_Pin_1)
  17. #define LED3ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)

  18. #define K1_Port GPIOA
  19. #define K1_Pin  GPIO_Pin_0

  20. #define K2_Port GPIOC
  21. #define K2_Pin  GPIO_Pin_13

  22. #define Beep_Port GPIOA
  23. #define Beep_Pin GPIO_Pin_8

  24. unsigned int Temp_Val;//温度
  25. unsigned char fun=2;

  26. //GPIO端口配置程序
  27. void GPIO_Init_Func()
  28. {
  29.     GPIO_InitTypeDef GPIO_InitDef;
  30.    
  31.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
  32.    
  33.     GPIO_InitDef.GPIO_Pin = Beep_Pin; //蜂鸣器
  34.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_Out_PP;
  35.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_10MHz;
  36.     GPIO_Init(Beep_Port,&GPIO_InitDef);
  37.    
  38.     GPIO_InitDef.GPIO_Pin = K1_Pin; //按键 K1
  39.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_IPD;
  40.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_10MHz;
  41.     GPIO_Init(K1_Port,&GPIO_InitDef);

  42.     GPIO_InitDef.GPIO_Pin = K2_Pin; //按键 K2
  43.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_IPD;
  44.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_10MHz;
  45.     GPIO_Init(K2_Port,&GPIO_InitDef);            
  46. }

  47. //任务3
  48. void LED_GPIO_Init()
  49. {
  50.     GPIO_InitTypeDef GPIO_InitDef;
  51.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

  52.            GPIO_InitDef.GPIO_Pin = GPIO_Pin_5;
  53.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_Out_PP;
  54.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
  55.     GPIO_Init(GPIOB,&GPIO_InitDef);

  56.     GPIO_InitDef.GPIO_Pin = GPIO_Pin_1;
  57.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_Out_PP;
  58.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
  59.     GPIO_Init(GPIOB,&GPIO_InitDef);
  60.         
  61.     GPIO_InitDef.GPIO_Pin = GPIO_Pin_0;
  62.     GPIO_InitDef.GPIO_Mode = GPIO_Mode_Out_PP;
  63.     GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
  64.     GPIO_Init(GPIOB,&GPIO_InitDef);

  65. }

  66. void TIM1_PWM_Config(u16 arr, u16 psc)
  67. {  
  68.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  69.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  70.         NVIC_InitTypeDef NVIC_InitStructure;

  71.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        
  72.         
  73.         GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
  74.   
  75.         TIM_TimeBaseStructure.TIM_Period =arr-1;
  76.         TIM_TimeBaseStructure.TIM_Prescaler =  psc-1;
  77.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  78.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  79.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  80.         
  81.         TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE );

  82.         NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  83.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  84.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  85.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  86.         NVIC_Init(&NVIC_InitStructure);

  87.         
  88.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  89.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  90.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  91.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  92.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);  

  93.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  

  94.         TIM_Cmd(TIM1, ENABLE);  
  95.         

  96. }

  97. void TIM1_UP_IRQHandler(void)
  98. {

  99.         if(TIM_GetITStatus(TIM1,TIM_IT_Update) == 1)
  100.         {
  101.                 if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5) == 1)
  102.                 {

  103.                 LED1ON;
  104.    //LED2ON ;
  105.    LED3ON;
  106.                 }
  107.                
  108.                 else
  109.                 {
  110.                         
  111.             //LED1OF;
  112.                         LED2OF;
  113.                         LED3OF;
  114.         }        

  115. TIM_ClearITPendingBit(TIM1,TIM_IT_Update);               
  116. }
  117.         }
  118.         //按键驱动子程序
  119. int Temp_Warn = 50;

  120. //u16 psc_dat = 7200;
  121. u16 arr_dat = 10000;
  122.         
  123.         unsigned int Tim_Dat = 0;
  124. void Scan_Key_Func()
  125. {
  126.     u16 i;
  127.    
  128.     if(GPIO_ReadInputDataBit(K1_Port,K1_Pin) == 1) //K1
  129.     {
  130.                                 

  131.         for(i = 0; i < 0xfff; i++);
  132.                       if(Temp_Warn<255)
  133.                                 {Temp_Warn++;}
  134.                 if(arr_dat < 65535){
  135.                         arr_dat = arr_dat + 1000;
  136.                
  137. //                        TIM1_PWM_Config(arr_dat,7200;
  138.                         }
  139.         while(GPIO_ReadInputDataBit(K1_Port,K1_Pin) == 1); //等待按键松开
  140.                         
  141.                         
  142.                         

  143.                 }
  144.     if(GPIO_ReadInputDataBit(K2_Port,K2_Pin) == 1) //K1
  145.     {
  146.                         

  147.         for(i = 0; i < 0xfff; i++);
  148.        if(Temp_Warn>0)
  149.                          {        Temp_Warn--;}
  150.                 if(arr_dat >1000){
  151.                         arr_dat = arr_dat - 1000;
  152.                         //TIM1_PWM_Config(arr_dat,7200);
  153.                         }
  154.         while(GPIO_ReadInputDataBit(K2_Port,K2_Pin) == 1); //等待按键松开
  155.    }   
  156.                
  157. }
  158.         



  159. //任务5
  160. void USART_Config()
  161. {
  162.                
  163.         GPIO_InitTypeDef         GPIO_InitStruct;
  164.         USART_InitTypeDef USART_InitStrut;
  165.         NVIC_InitTypeDef NVIC_InitStructure;
  166.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);        
  167.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);        
  168.         
  169.         GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9; //USART2 TX
  170.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  171.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
  172.         
  173.         GPIO_Init(GPIOA,&GPIO_InitStruct);
  174.         GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_10; //USART2 RX
  175.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  176.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;        
  177.         GPIO_Init(GPIOA,&GPIO_InitStruct);
  178.         
  179.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  180.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  181.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  182.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  183.         NVIC_Init(&NVIC_InitStructure);
  184.         
  185.                
  186.         USART_InitStrut.USART_BaudRate = 9600 ;//9600;
  187.         USART_InitStrut.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  188.         USART_InitStrut.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  189.         USART_InitStrut.USART_Parity = USART_Parity_No;
  190.         USART_InitStrut.USART_StopBits = USART_StopBits_1;
  191.         USART_InitStrut.USART_WordLength = USART_WordLength_8b;

  192.   USART_Init(USART1,&USART_InitStrut);
  193.         USART_Cmd(USART1,ENABLE);
  194.         
  195.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//RX
  196. }


  197. void USART_TX_Data(char*Str)
  198. {
  199.   while(*Str != '\0')
  200.         {
  201.                 USART_SendData(USART1,*Str);
  202.                 Str++;
  203.         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  204.         }
  205. }

  206. unsigned char usart1Buf[255];
  207. unsigned int RXDATA=0;


  208. void USART1_IRQHandler()
  209. {

  210.   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  211.         {
  212.                
  213.                 usart1Buf[RXDATA]=USART_ReceiveData(USART1);
  214.                 RXDATA++;RXDATA%=255;
  215.         USART_ClearFlag(USART1, USART_FLAG_RXNE);
  216.         }
  217. }
  218. float OUTPUT_Val;


  219. //报警

  220. void Warn_Func()
  221. {
  222.         if (Temp_Val >= (Temp_Warn*10)) Beep_ON;
  223.         if (Temp_Val < (Temp_Warn*10)) Beep_OF;
  224. }


  225. //任务8ADC转换
  226. void ADC_Config()
  227. {
  228.         GPIO_InitTypeDef  GPIO_InitStru;
  229.         ADC_InitTypeDef  ADC_InitStr;
  230.         NVIC_InitTypeDef NVIC_InitSrt;
  231.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
  232.         RCC_APB2Periph_ADC1,ENABLE);
  233.          
  234.         GPIO_InitStru.GPIO_Mode = GPIO_Mode_AIN;
  235.         GPIO_InitStru.GPIO_Pin = GPIO_Pin_1;
  236.         GPIO_InitStru.GPIO_Speed = GPIO_Speed_10MHz;
  237.         GPIO_Init(GPIOC,&GPIO_InitStru);

  238.         ADC_InitStr.ADC_ContinuousConvMode = DISABLE;
  239.         ADC_InitStr.ADC_DataAlign = ADC_DataAlign_Right;
  240.         ADC_InitStr.ADC_ExternalTrigConv = ADC_ExternalTrigInjecConv_None;
  241.         ADC_InitStr.ADC_Mode = ADC_Mode_Independent;
  242.         ADC_InitStr.ADC_NbrOfChannel = 1;
  243.         
  244.         ADC_InitStr.ADC_ScanConvMode = DISABLE;
  245.         ADC_Init(ADC1,&ADC_InitStr);
  246.         ADC_Cmd(ADC1,ENABLE);////////////
  247.         
  248.         ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
  249.         
  250.         NVIC_InitSrt.NVIC_IRQChannel = ADC1_2_IRQn;
  251.         NVIC_InitSrt.NVIC_IRQChannelCmd = ENABLE;
  252.         NVIC_InitSrt.NVIC_IRQChannelPreemptionPriority = 0;
  253.         NVIC_InitSrt.NVIC_IRQChannelSubPriority = 3;
  254.         NVIC_Init(&NVIC_InitSrt);        
  255.         
  256.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  257.         
  258.   ADC_ResetCalibration(ADC1);        //使能复位校准  
  259.   while(ADC_GetResetCalibrationStatus(ADC1));        //等待复位校准结束
  260.   ADC_StartCalibration(ADC1);         //开启AD校准
  261.   while(ADC_GetCalibrationStatus(ADC1));         //等待校准结束
  262.         
  263.         ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  264.         
  265.         ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );        
  266. }
  267. u16 ADC_Buf = 0;
  268. void ADC1_2_IRQHandler(void)
  269. {
  270.         if(ADC_GetITStatus(ADC1,ADC_IT_EOC) == 1)
  271.         {
  272.                 ADC_Buf = ADC_GetConversionValue(ADC1);
  273.                
  274.           ADC_ClearITPendingBit(ADC1,ADC_IT_EOC) ;
  275.         }

  276. }



  277. int main(void)
  278. {        
  279.         
  280.         unsigned i=0;
  281.                         ESP8266_Init();
  282.   GPIO_Init_Func();
  283.         LED_GPIO_Init();
  284.   TIM1_PWM_Config(arr_dat,7200);
  285.         USART_Config();

  286.   ILI9341_Init();




  287.         while(1)
  288.         {
  289.          
  290.         
  291.           USART_TX_Data("Temp_Warn\n");
  292.                 for(i=0;i<0xfffff;i++);
  293.                         Temp_Val = Get_Time();
  294.                 LED_Display_Function();
  295.                         Warn_Func();
  296.                 ADC_Config();
  297.                 Scan_Key_Func();
  298.                         ESP8266_Send_Data();
  299.                 ESP8266_Recv_Data();
  300.         }

  301. }
复制代码

全部资料51hei下载地址:
Demo_Code.7z (227.5 KB, 下载次数: 38)

评分

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

查看全部评分

回复

使用道具 举报

ID:401143 发表于 2019-1-6 13:31 来自手机 | 显示全部楼层
main函数有一个错误“unsigned i” 改成“u32 i”
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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