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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2987|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 求毛片 | 四虎午夜剧场 | 日本一区二区三区在线观看 | 看片91 | 荷兰欧美一级毛片 | 精品在线视频播放 | www.国产一区 | 精品国产伦一区二区三区观看体验 | 久久欧美高清二区三区 | 日本免费在线 | 天天视频一区二区三区 | 久久国产精品一区 | 亚洲一区二区久久 | 免费在线一区二区三区 | 一区二区三区欧美 | 欧美精品一区二区三区在线播放 | 青青久久久| www.久久| 欧美中文字幕在线观看 | 国产午夜影院 | 亚洲乱码国产乱码精品精的特点 | 欧美日日 | 日日骚视频 | 精品亚洲一区二区三区 | 成人久久 | 成人3d动漫一区二区三区91 | 国产成人精品一区 | 国产一区二区在线视频 | 日本一道本视频 | 午夜影院在线视频 | 亚洲欧美日韩精品久久亚洲区 | 爱操av| 免费看片在线播放 | 久久福利电影 | 精品国产一区探花在线观看 | 欧美日韩亚洲在线 | 99久久日韩精品免费热麻豆美女 | 精品国产三级 | 美女一级毛片 | 国产精品毛片一区二区三区 | 国产乱性|