|
70黑幣
void main()
{
unsigned int time,distance;
TH=30; //上電初始值30
EX0=0; //關(guān)閉外部中斷
IT0=1; //下降沿有效
EA=1; //打開中斷系統(tǒng)總開關(guān)
TMOD=0x11; //定時器工作方式
TH0=0x3c;
TL0=0xb0; //定時器0賦初值50ms
TH1=0xff;
TL1=0x9c;
ET0=1; //T0中斷允許
ET1=1;
TR0=1; //開啟T0計時
servorTime=0;
Trig=0;
Echo=0;
while(1) //進(jìn)入while循環(huán)
{
TH1=0;
TL1=0;
Trig=1;
Delay_us(5);
Trig=0;
while(Echo==0);
TR1=1;
while(Echo);
TR1=0;
time=(TH1)*256+(TL1);
distance=(int)(time*0.017); //計算路程 單位為cm
TH1=0xff;
TL1=0x9c;
read_wendu(); //讀溫度
keyscan(); //按鍵掃描
if(key_num==0) //判斷狀態(tài),是否是設(shè)置狀態(tài)
LcdDisplay(tvalue,0); //顯示正常值
else
LcdDisplay(TH*100,1); //顯示設(shè)置值
if(distance<30) //傳感器有信號
{
relay_w=0;
if(distance<20) //如果距離小于20c
{
if(distance<10) //如果距離小于10c
{
control=15; //使舵機(jī)向正擺動
servorTime=0;
TR1=1;
delay(15);
//delay(200);
TR1=0;
// delay(20);
}
else
{
control=12; //使舵機(jī)向正擺動
servorTime=0;
TR1=1;
delay(15);
//delay(200);
TR1=0;
// delay(20);
}
}
else
{
control=9; //使舵機(jī)向正擺動
servorTime=0;
TR1=1;
delay(15);
//delay(200);
TR1=0;
//delay(20);
}
// relay_w=0; //加熱繼電器打開
flag_js_bj=1; //計時報警標(biāo)志位置1
flag_js_gb=0; //計時關(guān)閉標(biāo)志位清零
EX0=1; //打開外部中斷
}
else //沒有信號
{
control=5; //使舵機(jī)向右擺動
servorTime=0;
TR1=1;
delay(10);
TR1=0;
flag_js_gb=1; //計時關(guān)閉標(biāo)志位值1
flag_js_bj=0; //計時報警標(biāo)志位清零
}
}
void T0_time() interrupt 1 //T0函數(shù)
{
TH0=0x3c;
TL0=0xb0; //重新賦初值
m++; //每50ms加一次
if(m>=20) //加到20次就是1秒
{
m=0; //清零
if(flag_js_gb==1) //計時關(guān)閉標(biāo)志位
{
sec_gb++; //關(guān)閉計時秒變量++
if(sec_gb>=3) //加到3秒
{
sec_gb=0; //清零
sec_bj=0;
flag_js_bj=0; //清零
flag_bj=0;
relay_w=1;
relay=1; //關(guān)閉兩個繼電器
EX0=0; //關(guān)閉外部中斷
}
}
if(flag_js_bj==1) //計時報警標(biāo)志位
{
sec_bj++; //報警計時秒變量++
if(sec_bj>=15) //加到60秒
{
sec_bj=0;
sec_gb=0; //兩個變量都清零
flag_js_gb=0; //關(guān)閉標(biāo)志位清零
flag_bj=1; //啟動報警標(biāo)志位
}
}
if(flag_bj==1) //報警標(biāo)志位為1
{
BUZZ=!BUZZ; //蜂鳴器取反閃爍報警
}
else //沒有進(jìn)入報警
{
BUZZ=1; //關(guān)閉蜂鳴器
}
}
}
void T1_int(void) interrupt 3{ //產(chǎn)生舵機(jī)所需要的脈沖
TH1=0xff;
TL1=0x9c;
servorTime++;
if(servorTime<=control)
servorControl=1;
else
servorControl=0;
if(servorTime>=200)
servorTime=0;
}
|
最佳答案
查看完整內(nèi)容
因?yàn)槟愕某绦蚴且粋縫合怪,所以不斷出現(xiàn)沖突
你要先理清各個硬件的運(yùn)行原理,才去結(jié)合他們
|