#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit trig=P1^0;
sbit echo=P2^0; //触发控制信号输入
sbit pwm=P2^6; //回响信号输出
sbit M1A=P0^0;
sbit M1B=P0^1;
sbit M2A=P0^2;
sbit M2B=P0^3;
uchar count,jd;
uint time=0,timer=0;
bit flag =0;
unsigned long s=0,zs=0,ys=0;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void tingzhi() //停止
{
M1A=0;
M1B=0;
M2A=0;
M2B=0;
}
void qianjin() //前进
{
M1A=0;
M1B=1;
M2A=0;
M2B=1;
}
void houtui() //后退
{
M1A=1;
M1B=0;
M2A=1;
M2B=0;
}
void zuozhuan() //左转
{
M1A=1;
M1B=0;
M2A=0;
M2B=1;
}
void youzhuan() //右转
{
M1A=0;
M1B=1;
M2A=1;
M2B=0;
}
void ceju(void)
{
while(!echo); //当echo为零时等待
TR0=1; //开启计数
while(echo); //当echo为1计数并等待
TR0=0;
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.7)/100; //单位cm
}
void qingling()
{
time=0;
TH1=65036/256;
TL1=65036%256;
count=0;
}
void zd0()interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
void zd1()interrupt 3
{
TH1=65036/256;
TL1=65036%256;
if(count<jd) pwm=1;
else pwm=0;
count++;
count=count%40;
timer++;
if(timer>=800)
{
timer=0;
trig=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
trig=0;
}
}
void main(void)
{
jd=3;
count=0;
TMOD=0x11;
TH0=0;
TL0=0;
TH1=65036/256;
TL1=65036%256;
IE=0x8a;
while(1)
{
TR1=1;
ceju();
if(s<=10);
{
tingzhi();
jd=1;
count=0;
delay(20);
TR1=0;
qingling();
TR1=1;
ceju();
ys=s;
jd=5;
count=0;
delay(20);
TR1=0;
qingling();
TR1=1;
ceju();
zs=s;
jd=3;
count=0;
delay(20);
TR1=0;
if((zs>=ys)&&(zs>10))
{
zuozhuan();
}
else if((ys>=zs)&&(ys>10))
{
youzhuan();
}
else
{
houtui();
}
if((s>10)||(flag==1))
{
qianjin();
}
}
}
}
小车代码
用的51单片机,HC-SR04超声波模块,l298n电机驱动,还有HC-06蓝牙模块。
大佬,我这都快卡半个月了,一直找不出问题。 |