自己做的,原理图什么都有,
基于单片机的CO检测系统
本设计是基于STC单片机的CO检测系统,可以220V供电,也可以5V供电,可以检测CO浓度,自行设置报警值,当检测到CO浓度超过该设定值后进行声光报警,并将此时的CO浓度值和该时刻的时间存储,存储后可以查询,每次可存储3次报警值,可以通过蓝牙在手机上读取出当前的CO浓度和时间。
该系统共有7个按键,从左至右依次是功能按键、查询按键、加(上翻)按键、减(下翻)按键、清空按键、退出按键、复位按键。
当系统供电后,显示主界面,如图1所示。
图1 主界面
1602液晶第一行显示时间,第二行前半部分显示此时CO浓度,即CO:****ppm(注意当系统供电后,CO传感器会有一个预热时间,需要55S左右的预热),第二行后半部分显示设定的报警值,即H:****,当按下功能按键后,进入报警值调节界面,如图2所示。此时通过加(上翻)按键、减(下翻)按键来调节报警值,当调节完成后,按下退出按键,返回图1所示界面。
图2 报警值设置界面
当CO浓度超过设置报警值后,蜂鸣器响,红色LED发光,当浓度值降低到报警值以下后报警自动解除,此次的报警时间和报警值将被存储。通过查询按键,进入查看存储报警值的界面,如图3所示。
图3 查询界面
该系统可以进行3次报警值的存储,即连续发生3次报警后,这3次的报警值可以被存储,通过加(上翻)按键、减(下翻)按键进行翻页查询。当3次存储完成后,按下清除按键可以清空存储数据,为下次存储做准备。查询或清除完成后,通过退出按键,返回图1 所示界面。复位按键对单片机系统复位,出现死机后,通过该按键重启。
注意事项
1. 程序下载 程序利用串口下载,首先将下载器正确连接(说明一下,板子上的下载口从左到右依次接下载器的TX、RX,下载器上标的有,+5V和GND和蓝牙共用,共用的目的是下载程序时把蓝牙拔掉,切记),打开STC下载器如图。
选择STC125A60S2,点击“打开程序文件”选择源程序文件夹中的Output文件夹的(源程序) .hex文件。 点击下载,当提示上电时拔下电源再插上就可以了。 免冷切下载器不需要把电。
如果对我们的设计满意,请把我们推荐给您身边其他需要帮助的同学。
赠人玫瑰,手有余香
基于物联网CO在线实时监测的设计的原理图:
部分源码预览(元整的源码请下载附件)
- /*
- *********************************************************************************************************
- *
- * 模块名称 : ADC采集配置
- * 文件名称 : adc.h
- * 版 本 : V1.0
- * 说 明 : 负责co输出电压采集
- * 修改记录 :
- * 版本号 日期 作者 说明
- * v1.0 2015-4-30
- *
- *
- *********************************************************************************************************
- */
- #include "adc.h"
- /******************************************************************************
- *函数名称:uint adc10_start(uchar channel);
- *函数功能:adc采集
- *输入参数:channel:1-7
- *输出参数:adc
- *返回值:adc10_start()
- *******************************************************************************/
- uint adc10_start(uchar channel) //channel = 0~7
- {
- uint adc;
- uchar i;
- ADC_RES = 0;
- ADC_RESL = 0;
- ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
- i = 250;
- do{
- if(ADC_CONTR & ADC_FLAG)
- {
- ADC_CONTR &= ~ADC_FLAG;
- adc = (uint)ADC_RES;
- adc = (adc << 2) | (ADC_RESL & 3);
- return adc;
- }
- }while(--i);
- return 1024;
- }
- /******************************************************************************
- *函数名称:void delay1_ms(unsigned char ms);
- *函数功能:延时函数
- *输入参数:ms
- *输出参数:无
- *返回值:无
- *******************************************************************************/
- void delay1_ms(unsigned char ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc / 14000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /******************************************************************************
- *函数名称:void INputchange(uchar date);
- *函数功能:选择12C5A60AD/S2系列模拟输入(AD)选择
- *输入参数:date
- *输出参数:无
- *返回值:无
- *******************************************************************************/
- void INputchange(uchar date)
- {
- P1ASF = date;//0x03;//(1 << ADC_CH0); //12C5A60AD/S2系列模拟输入(AD)选择
- ADC_CONTR = ADC_360T | ADC_ON;
-
- }
- /******************************************************************************
- *函数名称:uint AdHandle(uchar num);
- *函数功能:AD数据处理函数
- *输入参数:num
- *输出参数:number
- *返回值:AdHandle
- *******************************************************************************/
- uint AdHandle(uchar num)
- { uint count;
- uint number;
- delay1_ms(100);
- delay1_ms(100);
- count = adc10_start(num); // P1.0 ADC
- number = ((float)count*4.8828 ); //将采集的电压放大1000倍,主要是为了提高co计算的精度
- return number;
-
- }
复制代码
- /*
- *********************************************************************************************************
- *
- * 模块名称 : ADC采集配置
- * 文件名称 : adc.h
- * 版 本 : V1.0
- * 说 明 : 负责co输出电压采集
- * 修改记录 :
- * 版本号 日期 作者 说明
- * v1.0 2015-4-30
- *
- *
- *********************************************************************************************************
- */
- #include "adc.h"
- /******************************************************************************
- *函数名称:uint adc10_start(uchar channel);
- *函数功能:adc采集
- *输入参数:channel:1-7
- *输出参数:adc
- *返回值:adc10_start()
- *******************************************************************************/
- uint adc10_start(uchar channel) //channel = 0~7
- {
- uint adc;
- uchar i;
- ADC_RES = 0;
- ADC_RESL = 0;
- ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
- i = 250;
- do{
- if(ADC_CONTR & ADC_FLAG)
- {
- ADC_CONTR &= ~ADC_FLAG;
- adc = (uint)ADC_RES;
- adc = (adc << 2) | (ADC_RESL & 3);
- return adc;
- }
- }while(--i);
- return 1024;
- }
- /******************************************************************************
- *函数名称:void delay1_ms(unsigned char ms);
- *函数功能:延时函数
- *输入参数:ms
- *输出参数:无
- *返回值:无
- *******************************************************************************/
- void delay1_ms(unsigned char ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc / 14000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /******************************************************************************
- *函数名称:void INputchange(uchar date);
- *函数功能:选择12C5A60AD/S2系列模拟输入(AD)选择
- *输入参数:date
- *输出参数:无
- *返回值:无
- *******************************************************************************/
- void INputchange(uchar date)
- {
- P1ASF = date;//0x03;//(1 << ADC_CH0); //12C5A60AD/S2系列模拟输入(AD)选择
- ADC_CONTR = ADC_360T | ADC_ON;
-
- }
- /******************************************************************************
- *函数名称:uint AdHandle(uchar num);
- *函数功能:AD数据处理函数
- *输入参数:num
- *输出参数:number
- *返回值:AdHandle
- *******************************************************************************/
- uint AdHandle(uchar num)
- { uint count;
- uint number;
- delay1_ms(100);
- delay1_ms(100);
- count = adc10_start(num); // P1.0 ADC
- number = ((float)count*4.8828 ); //将采集的电压放大1000倍,主要是为了提高co计算的精度
- return number;
-
- }
复制代码
原理图下载:
PCB_Project_24.pdf
(540.98 KB, 下载次数: 94)
|