作者aa706045 (小呆榕)
看板ASM
标题Re: [问题] 超音波程式问题
时间Thu Aug 14 15:48:28 2008
超音波测距,正常需求,如果距离为0~5cm,则亮红灯。5~50cm,亮黄灯。50~150cm,则亮绿灯。
而现在程式出现的问题是,距离算的不够精准,而且距离近的时候,红灯亮起,而稍微拉远时,
黄灯亮起一下之後,及转成红灯。无法确切得知距离远近,程式上面不知道是哪里出错,还请各
位前辈不吝指教,谢谢。
以下为我们的程式:
#include <REG51F.H>
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P36=P3^6;
sbit P37=P3^7;
void AddTime(void);
void CountDistance(void);
void delay_250US(void);
void delay_10US(void);
void delay_500MS(unsigned int count1);
unsigned int Time=250,Distance=0,Count=0;
main()
{
MAIN_L:
P10=1; //红灯
P11=1; //黄灯
P12=1; //绿灯
P37=1; //SINGLE_IN=H
P36=0;
delay_250US();
P36=1;
while(1)
{
while(P37==1)
{
MAIN_H:
TMOD=0x11;
AddTime();
Time++;
}
while(P37==0)
{
delay_10US();
if(P37==1)
{
goto MAIN_H;
}
else
{
Distance=Time/58;
goto MAIN_N;
}
MAIN_N:
while(Distance>=0&&Distance<1&&Count<10)
{
P10=0;
delay_500MS(10);
P11=1;
P12=1;
Count++;
}
while(Distance>=5&&Distance<30&&Count<10)
{
P10=1;
P11=0;
delay_500MS(10);
P12=1;
Count++;
}
while(Distance>=30&&Distance<300&&Count<10)
{
P10=1;
P11=1;
P12=0;
delay_500MS(10);
Count++;
}
Count=0;
Time=0;
goto MAIN_L;
}
}
}
void delay_250US(void)
{
TL1=65536-250;
TH1=(65536-250)>>8;
TR1=1;
while(TF1==0);
TR1=0;
TF1=0;
}
void AddTime(void)
{
TL0=65536-1;
TH0=(65536-1)>>8;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
}
void delay_10US(void)
{
TL0=65536-10;
TH0=(65536-10)>>8;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
}
void delay_500MS(unsigned int count1)
{
TL0=65536-50000;
TH0=(65536-50000)>>8;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
count1--;
}
不知道 算不算作业文捏
因为不知道错误在哪边
希望高手~帮帮忙~说大概哪边有错误~
好让我继续改进
多谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.23.39.253
1F:→ ast9869:能不能尽量不要用goto 呢? 08/14 16:39
2F:推 ruemann:用平均啦,不要收到一次就做判断 08/14 18:41