一、题目要求
说明:(溶解氧浓度的硬件太贵就没做这个)
功能如下:
1.通过TFT屏实现实时各数据,可进行多级菜单切换
2.可以通过按键进行温度、PH、采集频率调节
3.可以通过语音控制温度、PH、采集频率的调节(SU-03T语音模块)
4.通过ESP8266将采取的数据上传到Onenet云端
5.采取的数据超过设置阈值会进行报警提示
6.大气压采取BMP180模块
成品展示
二、硬件材料
STM32F103C9T6最小系统
SU-03T语音模块
PH传感器模块(这个相对来说比较贵60几吧)
ESP8266模块
TDS传感器
BMP180大气压传感器
DS18B20温度传感器
TFT显示屏
蜂鸣器
三、部分代码
- <font face="Tahoma"><font size="3"><font color="#000000">/*-----------------------main.c------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "led.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "delay.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "key.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "sys.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "lcd.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "lcd_init.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "beep.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "time.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "ds18b20.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "adc.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "bmp180.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "iic.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">//外设层</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "oled.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "usart.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "esp8266.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">//网络协议层</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "onenet.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">//网络设备</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "esp8266.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">//c库</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">#include "string.h"</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*---------------------------------水质检测系统-----------------------------------*</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">Author:slow-walker</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">Date:2022-10-26</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">功能:</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">1.实时数据显示TFT屏 2.OneNet云平台数据显示(ESP8266远端传输) 3.ST-03T语音控制 4.按键调节</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">----------------------------------------------------------------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*--------------------------------------全局变量定义--------------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned int set_time = 1; //设置刷新数据的频率默认500ms 1s 2s</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char time_flag = 0; //定时器开始标志</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char display_flag = 0; //刷新标志</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">float temper = 15.0; //温度数据变量</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">float max_temper = 40.0,min_temper = 0.0,PH_Set = 7.0; //温度设置阀值 0-50 默认为最大值</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char key_value = 0,key = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char Index = 0,flag_function = 0; //界面索引</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">float ph, tds,p; //ph 浊度 大气压</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char buzzer_flag = 0;//警报标志</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*-------------------------------------界面显示函数---------------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*-------------------------------功能操作界面--------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Init_Interface(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{ </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> static unsigned int i = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(90,40,(unsigned char *)"Author:Slow-Walker",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(110,80,(unsigned char *)"Date:2022-10-26",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(140,240,(unsigned char *)"WIFI",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(220,240,(unsigned char *)"加载中",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> while(i*8 < 472)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(i*8,280,(unsigned char *)".",RED, WHITE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(50); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> i++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(500);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //LCD_ShowChinese(140,240,(unsigned char *)"加载成功",RED,GREEN,32,0); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //LCD_Init();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface1(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(150,120,(unsigned char *)"参数查看",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(150,160,(unsigned char *)"参数设置",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface2(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,80,(unsigned char *)"温度阈值:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,80,max_temper,4,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,120,(unsigned char *)"当前温度:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,120,temper,4,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,160,(unsigned char *)"当前",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(200,160,(unsigned char *)"PH",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,160,ph,4,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,200,(unsigned char *)"大气压值:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowIntNum(320,200,bmp180.p,6,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,240,(unsigned char *)"水电导率:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,240,tds,6,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface3(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,80,(unsigned char *)"温度阈值",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,80,max_temper,4,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(120,120,(unsigned char *)"PH",RED,GREEN,32,0); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(200,120,(unsigned char *)"阈值",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,120,PH_Set,4,RED,GREEN,32);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,160,(unsigned char *)"刷新频率:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowIntNum(320,160,set_time,1,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface4(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,120,(unsigned char *)"温度阈值",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,120,max_temper,4,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface5(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(120,120,(unsigned char *)"PH",RED,GREEN,32,0); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(200,120,(unsigned char *)"阈值",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowFloatNum1(320,120,PH_Set,4,RED,GREEN,32);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Interface6(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(80,0,(unsigned char *)"欢迎使用水质监测系统",RED,Q_BLUE,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(120,120,(unsigned char *)"刷新频率:",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowIntNum(320,120,set_time,1,RED,GREEN,32); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*----------------------------------按键操作函数--------------------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">unsigned char Key_Mode(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> key_value = KEY_Scan(); //按键1来进行模式的切换</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //按键每按一下蜂鸣器响200ms然后关掉 按键提示音</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(key_value)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_Init(); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(key_value == 1) //判断按键1是否被按下</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Index++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(key_value == 2) //判断按键1是否被按下</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Index--;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> switch(Index)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 1: Interface1();break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 2: Interface2();break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 3: Interface3();break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 4: Interface4();flag_function = 3;break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 5: Interface5();flag_function = 4;break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> case 6: Interface6();flag_function = 5;break; </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> default:break;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> key_value = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> return flag_function; //返回功能函数的标志位</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void Param_Set(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> unsigned char keyvalue = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> keyvalue = KEY_Scan(); //按键1来进行模式的切换</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //按键每按一下蜂鸣器响200ms然后关掉 按键提示音</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(flag_function == 3)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 3)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper += 2;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(max_temper >= 50)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper = 50;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 4)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper -= 2;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(max_temper == 0)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(flag_function == 4)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 3)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> PH_Set += 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 4)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> PH_Set -= 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(flag_function == 5)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 3)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time += 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(set_time > 3)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time = 3;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(keyvalue == 4)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time -= 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(set_time == 1)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time = 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> flag_function = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> keyvalue = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*-------------------------------------主函数-----------------------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">int main(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> unsigned char *dataPtr = NULL;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> unsigned short timeCount = 0; //发送间隔变量</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_init(); //延时函数初始化 </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Led_Init(); //LED端口初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Adc_Init(); //adc初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> KEY_Init(); //按键初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Beep_Init(); //蜂鸣器初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Time_Init(); //定时器2初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> DS18B20_Init();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BMP_Init();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BMP_ReadCalibrationData(); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(50);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> uart_init(9600);//串口1初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> uart3_init(115200); //串口3初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_Init(); //LCD初始化</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_Fill(0,0,LCD_W,LCD_H,GREEN); //LCD屏颜色初始化 </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Init_Interface(); //初始界面显示</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> ESP8266_Init(); //初始化ESP8266</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> printf("8266_INIT_END\n"); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> while(OneNet_DevLink()) //接入OneNET</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(500);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> printf("接入onenet成功");</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowString(140,240,(unsigned char *)"WIFI",RED,GREEN,32,0);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> LCD_ShowChinese(220,240,(unsigned char *)"加载成功",RED,GREEN,32,0); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(500); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> while(1) </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(display_flag)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> display_flag = 0; </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> temper = DS18B20_GetTemperture(); //读取温度</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Get_PH_and_TUR(); //获取PH这里没有读取浊度</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Get_TDS(); //TDS 水电导率</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BMP_UncompemstatedToTrue(); //大气压</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //测量的温度不在温度范围内进行蜂鸣器报警</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if( temper > max_temper)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> buzzer_flag = 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> buzzer_flag = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF(); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //PH超出阈值后报警</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if( ph > PH_Set)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> buzzer_flag = 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> buzzer_flag = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF(); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">// </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //printf("PH = %.1f TDS = %.2f Temper = %.2f Press:%ld\r\n",ph,tds,temper,bmp180.p);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //delay_ms(200);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //key = Key_Mode();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> // printf( "OneNet_SendData\r\n");//通过串 口1发送提示信息(要开始发送数据了) </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> OneNet_SendData();//发送数据给onenet </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> // printf("send_data_end\n");</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(100); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> ESP8266_Clear(); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(dataPtr != NULL)//如果返回数据不为空</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> OneNet_RevPro(dataPtr);//平台返回数据检测 </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(100); </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*-----------------------100ms定时器中断处理---------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void TIM2_IRQHandler(void) //TIM2 中断</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> static unsigned char count = 0,t = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查 TIM2 更新中断发生与否</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> count++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> t++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(count >= set_time) //set_time 通过按键来改变</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> display_flag = 1;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> count = 0; //计数清零</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(t == 10)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Key_Mode();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> Param_Set();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> t = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除 TIM2 更新中断标志</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">
- </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">/*-------------------------------串口中断服务函数-------------------------*/</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">void USART1_IRQHandler(void)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> char cmd = 0,Alarm = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> cmd = USART_ReceiveData(USART1);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //printf("%c",cmd);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> if(cmd == 0xAA)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xBB)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> max_temper--;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xCC)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> PH_Set++;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0**)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> PH_Set--;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xEE)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> for(Alarm =0;Alarm<8;Alarm++)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_ON();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> delay_ms(300);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xFF)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> //Alarm = 0;</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> BEEP_OFF();</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xCD)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time = 1; //500ms</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xDE)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time = 2;//2s</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> else if(cmd == 0xEF)</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> set_time = 3; //3.5s</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> USART_ClearFlag(USART1, USART_FLAG_RXNE);</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
复制代码
————————————————
版权声明:@slow-walker
|