自己做的,原理圖什么都有,
基于單片機(jī)的CO檢測系統(tǒng)
本設(shè)計(jì)是基于STC單片機(jī)的CO檢測系統(tǒng),可以220V供電,也可以5V供電,可以檢測CO濃度,自行設(shè)置報(bào)警值,當(dāng)檢測到CO濃度超過該設(shè)定值后進(jìn)行聲光報(bào)警,并將此時(shí)的CO濃度值和該時(shí)刻的時(shí)間存儲(chǔ),存儲(chǔ)后可以查詢,每次可存儲(chǔ)3次報(bào)警值,可以通過藍(lán)牙在手機(jī)上讀取出當(dāng)前的CO濃度和時(shí)間。
該系統(tǒng)共有7個(gè)按鍵,從左至右依次是功能按鍵、查詢按鍵、加(上翻)按鍵、減(下翻)按鍵、清空按鍵、退出按鍵、復(fù)位按鍵。
當(dāng)系統(tǒng)供電后,顯示主界面,如圖1所示。
圖1 主界面
1602液晶第一行顯示時(shí)間,第二行前半部分顯示此時(shí)CO濃度,即CO:****ppm(注意當(dāng)系統(tǒng)供電后,CO傳感器會(huì)有一個(gè)預(yù)熱時(shí)間,需要55S左右的預(yù)熱),第二行后半部分顯示設(shè)定的報(bào)警值,即H:****,當(dāng)按下功能按鍵后,進(jìn)入報(bào)警值調(diào)節(jié)界面,如圖2所示。此時(shí)通過加(上翻)按鍵、減(下翻)按鍵來調(diào)節(jié)報(bào)警值,當(dāng)調(diào)節(jié)完成后,按下退出按鍵,返回圖1所示界面。
圖2 報(bào)警值設(shè)置界面
當(dāng)CO濃度超過設(shè)置報(bào)警值后,蜂鳴器響,紅色LED發(fā)光,當(dāng)濃度值降低到報(bào)警值以下后報(bào)警自動(dòng)解除,此次的報(bào)警時(shí)間和報(bào)警值將被存儲(chǔ)。通過查詢按鍵,進(jìn)入查看存儲(chǔ)報(bào)警值的界面,如圖3所示。
圖3 查詢界面
該系統(tǒng)可以進(jìn)行3次報(bào)警值的存儲(chǔ),即連續(xù)發(fā)生3次報(bào)警后,這3次的報(bào)警值可以被存儲(chǔ),通過加(上翻)按鍵、減(下翻)按鍵進(jìn)行翻頁查詢。當(dāng)3次存儲(chǔ)完成后,按下清除按鍵可以清空存儲(chǔ)數(shù)據(jù),為下次存儲(chǔ)做準(zhǔn)備。查詢或清除完成后,通過退出按鍵,返回圖1 所示界面。復(fù)位按鍵對(duì)單片機(jī)系統(tǒng)復(fù)位,出現(xiàn)死機(jī)后,通過該按鍵重啟。
注意事項(xiàng)
1. 程序下載 程序利用串口下載,首先將下載器正確連接(說明一下,板子上的下載口從左到右依次接下載器的TX、RX,下載器上標(biāo)的有,+5V和GND和藍(lán)牙共用,共用的目的是下載程序時(shí)把藍(lán)牙拔掉,切記),打開STC下載器如圖。
選擇STC125A60S2,點(diǎn)擊“打開程序文件”選擇源程序文件夾中的Output文件夾的(源程序) .hex文件。 點(diǎn)擊下載,當(dāng)提示上電時(shí)拔下電源再插上就可以了。 免冷切下載器不需要把電。
如果對(duì)我們的設(shè)計(jì)滿意,請(qǐng)把我們推薦給您身邊其他需要幫助的同學(xué)。
贈(zèng)人玫瑰,手有余香
基于物聯(lián)網(wǎng)CO在線實(shí)時(shí)監(jiān)測的設(shè)計(jì)的原理圖:
部分源碼預(yù)覽(元整的源碼請(qǐng)下載附件)
- /*
- *********************************************************************************************************
- *
- * 模塊名稱 : ADC采集配置
- * 文件名稱 : adc.h
- * 版 本 : V1.0
- * 說 明 : 負(fù)責(zé)co輸出電壓采集
- * 修改記錄 :
- * 版本號(hào) 日期 作者 說明
- * v1.0 2015-4-30
- *
- *
- *********************************************************************************************************
- */
- #include "adc.h"
- /******************************************************************************
- *函數(shù)名稱:uint adc10_start(uchar channel);
- *函數(shù)功能:adc采集
- *輸入?yún)?shù):channel:1-7
- *輸出參數(shù):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;
- }
- /******************************************************************************
- *函數(shù)名稱:void delay1_ms(unsigned char ms);
- *函數(shù)功能:延時(shí)函數(shù)
- *輸入?yún)?shù):ms
- *輸出參數(shù):無
- *返回值:無
- *******************************************************************************/
- void delay1_ms(unsigned char ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc / 14000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /******************************************************************************
- *函數(shù)名稱:void INputchange(uchar date);
- *函數(shù)功能:選擇12C5A60AD/S2系列模擬輸入(AD)選擇
- *輸入?yún)?shù):date
- *輸出參數(shù):無
- *返回值:無
- *******************************************************************************/
- void INputchange(uchar date)
- {
- P1ASF = date;//0x03;//(1 << ADC_CH0); //12C5A60AD/S2系列模擬輸入(AD)選擇
- ADC_CONTR = ADC_360T | ADC_ON;
-
- }
- /******************************************************************************
- *函數(shù)名稱:uint AdHandle(uchar num);
- *函數(shù)功能:AD數(shù)據(jù)處理函數(shù)
- *輸入?yún)?shù):num
- *輸出參數(shù):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計(jì)算的精度
- return number;
-
- }
復(fù)制代碼
- /*
- *********************************************************************************************************
- *
- * 模塊名稱 : ADC采集配置
- * 文件名稱 : adc.h
- * 版 本 : V1.0
- * 說 明 : 負(fù)責(zé)co輸出電壓采集
- * 修改記錄 :
- * 版本號(hào) 日期 作者 說明
- * v1.0 2015-4-30
- *
- *
- *********************************************************************************************************
- */
- #include "adc.h"
- /******************************************************************************
- *函數(shù)名稱:uint adc10_start(uchar channel);
- *函數(shù)功能:adc采集
- *輸入?yún)?shù):channel:1-7
- *輸出參數(shù):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;
- }
- /******************************************************************************
- *函數(shù)名稱:void delay1_ms(unsigned char ms);
- *函數(shù)功能:延時(shí)函數(shù)
- *輸入?yún)?shù):ms
- *輸出參數(shù):無
- *返回值:無
- *******************************************************************************/
- void delay1_ms(unsigned char ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc / 14000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /******************************************************************************
- *函數(shù)名稱:void INputchange(uchar date);
- *函數(shù)功能:選擇12C5A60AD/S2系列模擬輸入(AD)選擇
- *輸入?yún)?shù):date
- *輸出參數(shù):無
- *返回值:無
- *******************************************************************************/
- void INputchange(uchar date)
- {
- P1ASF = date;//0x03;//(1 << ADC_CH0); //12C5A60AD/S2系列模擬輸入(AD)選擇
- ADC_CONTR = ADC_360T | ADC_ON;
-
- }
- /******************************************************************************
- *函數(shù)名稱:uint AdHandle(uchar num);
- *函數(shù)功能:AD數(shù)據(jù)處理函數(shù)
- *輸入?yún)?shù):num
- *輸出參數(shù):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計(jì)算的精度
- return number;
-
- }
復(fù)制代碼
原理圖下載:
PCB_Project_24.pdf
(540.98 KB, 下載次數(shù): 94)
2016-7-17 10:18 上傳
點(diǎn)擊文件名下載附件
基于物聯(lián)網(wǎng)CO在線實(shí)時(shí)監(jiān)測的設(shè)計(jì)源碼下載:
源程序1 - 副本.zip
(107.37 KB, 下載次數(shù): 117)
2016-7-17 10:16 上傳
點(diǎn)擊文件名下載附件
|