51自动避障小车整体程序
#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 /////12MHZ疑问之处us/
/////////////////////////////////////// display(distance);
}
if(succeed_flag==0)
{
dis=200; //
//////////// test = !test; //测试灯变化
}
}
//延时函数1
void delay_ms(long int n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
//延时函数2
void delay_nus(uint n)
{
uint i;
for(i=n;i>0;i--);
}
//延时函数3
void delay_n100us(uint n)
{
uint i;
while(n--)
{
for(i=7;i>0;i--);
}
}
//中断函数
void exter1() interrupt 2 // 外部中断1
{
timeH =TH0; //取出定时器的值
timeL =TL0; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX1=0; //关闭外部中断
TR0=0;
}
void servo_turn(int offset)
{
int servo,gao;
control=0;
servo=14;
offset/=9;
gao=servo-offset;
control=1;
delay_n100us(gao);
control=0;
delay_n100us(200-gao);
}
阅读更多- 51单片机智能小车C程序 蓝牙遥控+避障+自动寻迹
- 自动小车7279a程序
- 51单片机寻迹小车完整程序
- 【arduino】KitteBlock自动避障小车
- 自动避障小车
- STC51系列单片机不断电自动下载程序
- 智能小车循迹避障程序
- STC51系列单片机不断电自动下载程序
- 制作树莓派wifi遥控和自动避障小车
- 代码整洁--使用CodeMaid自动程序排版
- 程序自动启动
- 在VB2005中自动生成最简单的数据库程序
- Ubuntu 自动启动程序的设置
- 在linux下设置开机自动启动程序的方法
- 51的中断程序用C怎么写
- android实现程序自动升级到安装示例分享(下载android程序安装包)
- linux下用脚本语言开发自动重启程序
- Nokia真机测试程序自动退出现象搜集[1][javaME]
- C#Winform程序如何发布并自动升级(图解) - sufeinet
- 一个利用ASC码自动产生a-z文件的C#程序