自己做的,原理圖什么都有,
基于單片機的CO檢測系統
本設計是基于STC單片機的CO檢測系統,可以220V供電,也可以5V供電,可以檢測CO濃度,自行設置報警值,當檢測到CO濃度超過該設定值后進行聲光報警,并將此時的CO濃度值和該時刻的時間存儲,存儲后可以查詢,每次可存儲3次報警值,可以通過藍牙在手機上讀取出當前的CO濃度和時間。
該系統共有7個按鍵,從左至右依次是功能按鍵、查詢按鍵、加(上翻)按鍵、減(下翻)按鍵、清空按鍵、退出按鍵、復位按鍵。
當系統供電后,顯示主界面,如圖1所示。
0.png (261.04 KB, 下載次數: 170)
下載附件
2016-7-20 02:44 上傳
圖1 主界面
1602液晶第一行顯示時間,第二行前半部分顯示此時CO濃度,即CO:****ppm(注意當系統供電后,CO傳感器會有一個預熱時間,需要55S左右的預熱),第二行后半部分顯示設定的報警值,即H:****,當按下功能按鍵后,進入報警值調節界面,如圖2所示。此時通過加(上翻)按鍵、減(下翻)按鍵來調節報警值,當調節完成后,按下退出按鍵,返回圖1所示界面。
0.png (276.83 KB, 下載次數: 155)
下載附件
2016-7-20 02:44 上傳
圖2 報警值設置界面
當CO濃度超過設置報警值后,蜂鳴器響,紅色LED發光,當濃度值降低到報警值以下后報警自動解除,此次的報警時間和報警值將被存儲。通過查詢按鍵,進入查看存儲報警值的界面,如圖3所示。
0.png (272.66 KB, 下載次數: 157)
下載附件
2016-7-20 02:45 上傳
圖3 查詢界面
該系統可以進行3次報警值的存儲,即連續發生3次報警后,這3次的報警值可以被存儲,通過加(上翻)按鍵、減(下翻)按鍵進行翻頁查詢。當3次存儲完成后,按下清除按鍵可以清空存儲數據,為下次存儲做準備。查詢或清除完成后,通過退出按鍵,返回圖1 所示界面。復位按鍵對單片機系統復位,出現死機后,通過該按鍵重啟。
注意事項
1. 程序下載 程序利用串口下載,首先將下載器正確連接(說明一下,板子上的下載口從左到右依次接下載器的TX、RX,下載器上標的有,+5V和GND和藍牙共用,共用的目的是下載程序時把藍牙拔掉,切記),打開STC下載器如圖。
0.png (213.83 KB, 下載次數: 205)
下載附件
2016-7-20 02:46 上傳
選擇STC125A60S2,點擊“打開程序文件”選擇源程序文件夾中的Output文件夾的(源程序) .hex文件。 點擊下載,當提示上電時拔下電源再插上就可以了。 免冷切下載器不需要把電。
如果對我們的設計滿意,請把我們推薦給您身邊其他需要幫助的同學。
贈人玫瑰,手有余香
基于物聯網CO在線實時監測的設計的原理圖:
0.png (152.18 KB, 下載次數: 190)
下載附件
2016-7-20 02:38 上傳
部分源碼預覽(元整的源碼請下載附件)
- /*
- *********************************************************************************************************
- *
- * 模塊名稱 : 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;
-
- }
復制代碼
0.png (80.57 KB, 下載次數: 196)
下載附件
2016-7-20 02:39 上傳
原理圖下載:
PCB_Project_24.pdf
(540.98 KB, 下載次數: 94)
2016-7-17 10:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
基于物聯網CO在線實時監測的設計源碼下載:
源程序1 - 副本.zip
(107.37 KB, 下載次數: 117)
2016-7-17 10:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|