面向污水處理廠(chǎng)的氣體檢測(cè)電子鼻系統(tǒng)硬件部分主要由以下的部分組成:硫化氫傳感器、氨氣傳感器、甲烷傳感器、一氧化碳傳感器、A/D轉(zhuǎn)換模塊、按鍵模塊、電源供電模塊、STC89C51單片機(jī)最小系統(tǒng)、液晶顯示模塊、聲光報(bào)警電路。由傳感器采集到的硫化氫、氨氣、甲院、一氧化碳數(shù)值傳送給單片機(jī),在單片機(jī)的處理下,將最后的具體數(shù)值通過(guò)液晶屏顯示出來(lái)。并設(shè)置上限,越限時(shí)要發(fā)出報(bào)警。
#include "ADC0832.h"
#include "intrins.h"
//讀取AD值
unsigned int ADC0832(unsigned char channel,unsigned char tong) //AD轉(zhuǎn)換,返回結(jié)果
{
unsigned char i = 0;
unsigned char j;
unsigned int dat = 0;
unsigned char ndat = 0;
if (channel == 0) channel = 2;//通道1
if (channel == 1) channel = 3;//通道2
ADDI = 1;//輸入引腳拉高
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
switch(tong)
{
case 0:ADCS1 = 0;break;//片選
case 1:ADCS2 = 0;break;//片選
case 2:ADCS3 = 0;break;//片選
case 3:ADCS4 = 0;//片選
}
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 1;//拉高時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 0;//拉低時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 1;//拉高時(shí)鐘
ADDI = channel & 0x1;
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 0;//拉低時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 1;//拉高時(shí)鐘
ADDI = (channel >> 1) & 0x1;
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 0;//拉低時(shí)鐘
ADDI = 1;//輸出1
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
dat = 0; //存儲(chǔ)清零
ADDI =1;
for (i = 0; i < 8; i++) //循環(huán)8次
{
dat |= ADDI;//讀取引腳
ADCLK = 1; //拉高時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 0;//拉低時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
dat <<= 1;//左移
if (i == 7) dat |= ADDI;//讀取引腳
}
for (i = 0; i < 8; i++)//循環(huán)8次
{
j = 0;
j = j | ADDI; //讀取引腳
ADCLK = 1; //拉高時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
ADCLK = 0; //拉低時(shí)鐘
_nop_();//延時(shí)1us
_nop_();//延時(shí)1us
j = j << 7; //左移7位
ndat = ndat | j; //合并數(shù)據(jù)
if (i < 7) ndat >>= 1;//去掉符號(hào)
}
switch(tong)
{
case 0:ADCS1 = 1;break; //清除片選
case 1:ADCS2 = 1;break; //清除片選
case 2:ADCS3 = 1;break; //清除片選
case 3:ADCS4 = 1; //清除片選
}
ADCLK = 0;//拉低時(shí)鐘
ADDI=1;
dat <<= 8;//數(shù)據(jù)移位
dat |= ndat;//合并數(shù)據(jù)
return(ndat);
}