|
|
寫了個(gè)程序,本想用STC12C5A60S2的P1.4引腳接受濕度傳感器輸出的模擬信號(hào),然后判斷是否達(dá)到閾值,達(dá)到閾值后通過P2.0引腳輸出高電平使水泵繼電器開關(guān)打開,可是不知道哪里出了問題實(shí)物調(diào)試一直不成功,請(qǐng)大神指教一下。濕度傳感器用的YL-69,比較器用的LM-393,程序如下:
#include "STC12C5A60S2.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
void InitADC();
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void main()
{
InitADC();
P2=0x00;
if(GetADCResult(4)>=0.001) //0.001為閾值
P2=0x01;
}
BYTE GetADCResult(BYTE ch) //AD轉(zhuǎn)換結(jié)果
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
return ADC_RES;
}
void InitADC() //AD寄存器初始化
{
P1ASF=0xff;
ADC_RES=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
Delay(2);
}
void Delay(WORD n) //延時(shí)函數(shù)
{
WORD x;
while(n--)
{
x=5000;
while(x--);
}
}
|
|