單片機控制的灌溉系統(tǒng):
2、土壤濕度不在范圍內(nèi),水泵工作。
3、土壤氮磷鉀傳感器檢測土壤的肥料不夠時,蜂鳴器報警并進肥料。
#include "ADC0832.h"
#include "intrins.h"
//讀取AD值
unsigned int ADC0832(unsigned char channel) //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_();//延時1us
_nop_();//延時1us
ADCS = 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++) //循環(huán)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++)//循環(huán)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; //合并數(shù)據(jù)
if (i < 7) ndat >>= 1;//去掉符號
}
ADCS = 1; //清除片選
ADCLK = 0;//拉低時鐘
ADDI=1;
dat <<= 8;//數(shù)據(jù)移位
dat |= ndat;//合并數(shù)據(jù)
return(ndat);
}
資料借鑒于此?紛傳
閱讀全文