|

楼主 |
发表于 2021-7-9 08:03:11
|
显示全部楼层
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit left_forward=P1^0; sbit left_backward=P1^1;
sbit right_forward=P1^2; sbit right_backward=P1^3;
sbit TRIG=P2^0; sbit ECHO=P2^1;
uint distance,count=0,flag=0;
void delay_ms(uint k); void lint(void);//初始化
void right(uint ms); void left(uint ms);
void forward(void); void stop(void);
void emit(void);
int main(void)
{
lint();
stop();
while(1)
{
emit();
if(distance<30)
{
right(500);
stop();
count++;
}
else
{
forward();
}
if(count==2)
{
count=0;left(1500);
stop();
}
}
}
void emit(void)//超声波
{
TRIG=0;
TRIG=1;
delay_ms(1);
TRIG=0;
while(!ECHO);
TR0=1;
while(ECHO);
TR0=0;
if(flag)
{
flag=0;
distance=300;
}
else
{
distance=(TH0<8)|TL0;
distance=distance*1.7/100;
}
TH0=0;
TL0=0;
}
void interrupt_timer0(void)interrupt 1
{
TH0=0;
TL0=0;
flag=1;
}
void delay_ms(uint k)
{
uint j,i;
for(i=0;i<k;i++)
for(j=0;j<125;j++);
}
void lint(void)//计时器
{
TMOD=0x01;
TH0=0;
TL0=0;
ET0=1;EA=1;TR0=0;
}
void right(uint ms)
{
left_forward=0;right_forward=1;left_backward=1;right_backward=1;delay_ms(ms);
}
void left(uint ms)
{
left_forward=1;right_forward=0;left_backward=1;right_backward=1;delay_ms(ms);
}
void forward(void)
{
left_forward=0;right_forward=0;left_backward=0;right_backward=0;
}
void stop(void)
{
left_forward=1;right_forward=1;left_backward=1;right_backward=1;
}
} |
|