紅外小車加超聲波測距
程序哪里有錯誤?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit hw=P3^0;
sbit tr=P3^4;
sbit ec=P3^5;
sbit wela=P2^7;
sbit dula=P2^6;
uint distance,time,tl,th;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay_20us(void )
{
uchar a ;
for(a=0;a<100;a++);
}
void delay(uint a )
{
while(a--);
}
void delaym(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uint temp)
{
uint ge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delaym(1);
dula=1;
P0=0x00; //關位碼
dula=0;
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delaym(1);
dula=1;
P0=0x00; //關位碼
dula=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xfb;
wela=0;
delaym(1);
dula=1;
P0=0x00; //關位碼
dula=0;
}
void forward() //左右輪都正轉,前進 //speed>=0&&speed<=100; time=speed*200us
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void backward() //左右輪都后轉,后退
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void main()
{ TMOD=0X10;
while(1)
{
if(hw==1)
{
forward();
}
else
{
backward();
}
tr=1; //超聲波輸入端
delay_20us(); //延時20us
tr=0; //產生一個20us的脈沖
while(ec==0); //等待Echo回波引腳變高電平
TH1=0; //定時器1清零
TL1=0; //定時器1清零
TF1=0; //計數溢出標志
TR1=1; //啟動定時器1
while(ec==1);
th=TH1;
tl=TL1;
TL1=0;
TH1=0;
TR1=0; //關閉定時器1
time=th*256+tl;
distance=time*0.017; //厘米
display(distance+1);
}
}
|