标题:
51单片机超声波避障智能小车源程序
[打印本页]
作者:
liuchun512
时间:
2018-4-22 09:27
标题:
51单片机超声波避障智能小车源程序
无聊的时候写的小车超声波避障程序
串口接线方式.jpg
(76.61 KB, 下载次数: 58)
下载附件
2018-4-22 15:52 上传
单片机源程序如下:
/***********************************************************************************************************/
//HC-SR04 超声波测距模块 DEMO 程序
//晶振:11。0592
//程序 QQ: 517535000
//接线:模块TRIG接 P1.2 ECH0 接P1.1
//串口波特率9600
/***********************************************************************************************************/
#include <AT89X51.H>
#include <intrins.h>
#include <STDIO.H>
#define uchar unsigned char
#define uint unsigned int
#define RX P1_5
#define TX P1_6
sbit IN1=P2^4 ;
sbit IN2=P2^3;
sbit IN3=P2^2;
sbit IN4=P2^1;
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
void qian()//前进
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void hou()//后退
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void stop()//停止
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void you()//右转
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void StartModule() //T1中断用来扫描数码管和计800MS启动模块
{
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if(flag==1) //超出测量
{
flag=0;
}
}
/********************************************************/
void main(void)
{
TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1;
SCON|=0X50; //设置为工作方式1
TMOD|=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //开启总中断
// delayms(2000);
while(1)
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
/* printf("%f\r\n",S); //输出一次数据
if(S<10)
IN1=0;
else IN1=1; */
if(S<30)
{
delayms(2);
if(S<30)
{
stop();
delayms(4);
hou();
delayms(30);
B:you();
delayms(20);
stop();
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
if(S>40)
{
you();
delayms(8);
stop();
delayms(4);
qian();
}
else
{
goto B;
}
}
else
{
qian();
}
}
else
{
qian();
}
delayms(10);
}
}
复制代码
所有资料51hei提供下载:
超声波避障.rar
(84.88 KB, 下载次数: 87)
2018-4-22 09:27 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
xuwei517
时间:
2018-5-3 22:58
谢谢 这是好东西啊
作者:
leezll
时间:
2019-10-23 02:20
发现刷写后没有反应!!!!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1