基于C语言的避障系统程序

基于C语言的避障小车程序
因为最近在做一些小项目,我就把我写的程序分享给大家,一起学习

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint  unsigned int

sbit Trig=P3^0;

sbit Echo=P3^3;

sbit control=P3^5;

uint 
dis,flag=0,timeH,timeL,succeed_flag,time;

void   tran_ret();

void  delay_nus(uint n);

void  delay_ms(long int m);

void  delay_n100us(uint n);

void  run();

//void  backrun();

//void  freestop();

void  turnleft();

void  turnright ();

void  Sturnround();

void  Nturnround();

void  servo_turn(int gao);

//**********************************************************************

//主函数

void
main()

{

TMOD=0x01;

EA=1;

ET0=1;

IT1=0;

Trig=0;

servo_turn(0);

delay_ms(5000);

while(1)

{

tran_ret();

if(dis>30)

{

run();

}

else

{

P1=0XFF;

servo_turn(-90);

delay_ms(5000);

tran_ret();

if
(dis>30)

{

turnleft();

P1=0XFF;

servo_turn(0);

delay_ms(5000);

run();

}

else

{

P1=0XFF;

servo_turn(90);

delay_ms(5000);

tran_ret();

if (dis>30)

{

turnright();

servo_turn(0);

delay_ms(5000);

run();

}

else

{

Nturnround ();

servo_turn(0);

delay_ms(5000);

run();

}

}

}

}

}

//*************************************************************************************

//子函数

//**************************************************************************************

//全速前进

void run()

{

P1=0xaa;

//delay_ms(60);

//P1=0xff;

}

/*//全速后退

void  backrun()

{     P1=0x55;

delay_ms(19);

P1=0x00;

delay_ms(1);

} */

//自由停止

/*void freestop ()

{

P1=0x00;

delay_ms(20);

} */

//左转

void  turnleft()

{

P1=0x0a;

delay_ms(100);

//P1=0xff;

}

//右转

void  turnright()

{

P1=0xa0;

delay_ms(100);

//     P1=0xff;

}

/*//原地顺时针打转

void  Sturnround()

{

P1=0xa0;

delay_ms(40);

P1=0x00;

delay_ms(1);

} */

//原地逆时针打转

void  Nturnround ()

{

P1=0x0a;

delay_ms(100);

//     P1=0x00;

}

//发射

void tran_ret()

{

EA=0; //关总中断

Trig=1; //超声波输入端

delay_nus(20);//延时20us

Trig=0; //产生一个20us的脉冲

while(Echo==0); //等待Echo回波引脚变高电平

succeed_flag=0; //清测量成功标志

EA=1;

EX1=1; //打开外部中断0

TH0=0;//定时器1清零

TL0=0; //定时器1清零

TF0=0; //计数溢出标志

ET0=1;

TR0=1; //启动定时器1

delay_ms(20); //等待测量的结果

TR0=0; //关闭定时器1

EX1=0; //关闭外部中断0

if(succeed_flag==1)

{

time=timeH*256+timeL;

dis=time*0.0182; //cm

发布了12 篇原创文章 · 获赞 9 · 访问量 1265

猜你喜欢

转载自blog.csdn.net/qq_44906335/article/details/90733790