面向污水处理厂的气体检测电子鼻系统硬件部分主要由以下的部分组成:硫化氢传感器、氨气传感器、甲烷传感器、一氧化碳传感器、A/D转换模块、按键模块、电源供电模块、STC89C51单片机最小系统、液晶显示模块、声光报警电路。由传感器采集到的硫化氢、氨气、甲院、一氧化碳数值传送给单片机,在单片机的处理下,将最后的具体数值通过液晶屏显示出来。并设置上限,越限时要发出报警。
#include "ADC0832.h"
#include "intrins.h"
//读取AD值
unsigned int ADC0832(unsigned char channel,unsigned char tong) //AD转换,返回结果
{
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_();//延时1us
_nop_();//延时1us
switch(tong)
{
case 0:ADCS1 = 0;break;//片选
case 1:ADCS2 = 0;break;//片选
case 2:ADCS3 = 0;break;//片选
case 3:ADCS4 = 0;//片选
}
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
ADDI = channel & 0x1;
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 1;//拉高时钟
ADDI = (channel >> 1) & 0x1;
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
ADDI = 1;//输出1
_nop_();//延时1us
_nop_();//延时1us
dat = 0; //存储清零
ADDI =1;
for (i = 0; i < 8; i++) //循环8次
{
dat |= ADDI;//读取引脚
ADCLK = 1; //拉高时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0;//拉低时钟
_nop_();//延时1us
_nop_();//延时1us
dat <<= 1;//左移
if (i == 7) dat |= ADDI;//读取引脚
}
for (i = 0; i < 8; i++)//循环8次
{
j = 0;
j = j | ADDI; //读取引脚
ADCLK = 1; //拉高时钟
_nop_();//延时1us
_nop_();//延时1us
ADCLK = 0; //拉低时钟
_nop_();//延时1us
_nop_();//延时1us
j = j << 7; //左移7位
ndat = ndat | j; //合并数据
if (i < 7) ndat >>= 1;//去掉符号
}
switch(tong)
{
case 0:ADCS1 = 1;break; //清除片选
case 1:ADCS2 = 1;break; //清除片选
case 2:ADCS3 = 1;break; //清除片选
case 3:ADCS4 = 1; //清除片选
}
ADCLK = 0;//拉低时钟
ADDI=1;
dat <<= 8;//数据移位
dat |= ndat;//合并数据
return(ndat);
}
阅读全文