|
錯(cuò)誤信息:external model ADC083X.DLL not found
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ADC_CLK = P1^6;
sbit ADC_DI = P1^5;
sbit ADC_DO = P1^5;
sbit ADC_CS = P1^7;
sbit Light = P3^2; //路燈控制位
sbit Voice = P1^0; //聲控信號(hào)輸入
sbit IR = P1^1; //紅外人體熱釋電信號(hào)輸入
unsigned char SunLux=0;
unsigned char fRun=0;
unsigned char SetSunLux=150;
void delayms(uint ms) //延時(shí)xx毫秒
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//*******************************************MQ2程序********************************//
uchar Get_AD_Result(void)
{
uchar i;
uchar DOUT=0; //只需255,故使用uchar 0~255
ADC_CS=0;
ADC_DI=1;//第一個(gè)上升沿前為高,確認(rèn)開始
ADC_CLK=0;
ADC_CLK=1;
_nop_(); //啟動(dòng)信號(hào)
ADC_DI=1; //第二個(gè)上升沿前為1
ADC_CLK=0;
ADC_CLK=1;
_nop_(); //
ADC_DI=0; //第三個(gè)上升沿前為0
ADC_CLK=0;
ADC_CLK=1;
_nop_(); //
ADC_CLK=1;
ADC_CLK=0; //開始采樣
_nop_();
_nop_();
ADC_DO=1;//寫全一,保證下面的讀引腳正常
for(i=8;i>0;i--)
{
ADC_CLK=1;
ADC_CLK=0; //下降沿采樣
_nop_();
DOUT=DOUT<<1;
DOUT=DOUT|ADC_DO; //按位或,ADC_DO是轉(zhuǎn)換后的輸出,其實(shí)就是把ADC_DO傳送到dig的低位
//因?yàn)锳DC_DO是一位,這樣左移位后獲得的空位放置的就是ADC_DO
//第二個(gè)時(shí)鐘下降沿獲得就是最高位
}
ADC_CS=1; //轉(zhuǎn)換結(jié)束
return(DOUT);
}
void main()
{
P1 = 0xff;
Light = 1;
while(1)
{
SunLux=Get_AD_Result(); //讀取當(dāng)前陽光的勒克司值,日光的傳感器在6通道
if(SunLux>SetSunLux) fRun=0; //當(dāng)日光的勒克司對(duì)應(yīng)的分壓值比設(shè)定值大時(shí),不允許路燈工作(路燈熄滅)
else fRun=1; //當(dāng)日光的勒克司對(duì)應(yīng)的分壓值比設(shè)定值小時(shí),允許聲音控制路燈點(diǎn)亮
if(fRun==1)
{
if((Voice==1)||(IR==0))
{
delayms(10);
if((Voice==1)||(IR==0))
{
Light = 0;
delayms(6000);
Light = 1;
}
}
}
else Light = 1;
}
}
|
|