云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于STC89C51单片机的智能超声波避障小车 - 图文

基于STC89C51单片机的智能超声波避障小车 - 图文

  • 62 次阅读
  • 3 次下载
  • 2026/1/11 7:52:16

L293D_IN3=1; L293D_IN4=0; }

void Stop(void) //刹车 {

L293D_IN1=0; L293D_IN2=0; L293D_IN3=0; L293D_IN4=0; }

void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left) //后退左转 {

L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0; Delay(100); L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0; }

//========================================================================================================================= /********距离计算程序***************/ void Conut(void) {

time=TH1*256+TL1; TH1=0; TL1=0;

//此时time的时间单位决定于晶振的速度,外接晶振为11.0592MHZ时, //time的值为0.54us*time,单位为微秒 //那么1us声波能走多远的距离呢?1s=1000ms=1000000us // 340/1000000=0.00034米 //0.00034米/1000=0.34毫米 也就是1us能走0.34毫米 //但是,我们现在计算的是从超声波发射到反射接收的双路程, //所以我们将计算的结果除以2才是实际的路程

S=time*2;//先算出一共的时间是多少微秒。

S=S*0.17;//此时计算到的结果为毫米,并且是精确到毫米的后两位了,有两个小数点

if(S<=300) // {

if(turn_right_flag!=1) { Stop(); Delay1ms(5);//发现小车自动复位的时候,可以稍微延长一点这个延时,减少电机反向电压对电路板的冲击。 } turn_right_flag=1; P2_3=0; Delay1ms(50); P2_3=1;

Turn_Right(120,120); //小于设定距离时电机后退转弯 } else {

turn_right_flag=0;

Forward(Forward_R_DATA,Forward_L_DATA); //前进(大于20-30CM前进) }

//======================================= if((S>=5000)||flag==1) //超出测量范围 {

flag=0;

DisplayListChar(0, 1, table1); } else {

disbuff[0]=S; disbuff[1]=S/10; disbuff[2]=S/100; disbuff[3]=S/1000;

DisplayListChar(0, 1, table);

DisplayOneChar(9, 1, ASCII[disbuff[3]]); DisplayOneChar(10, 1, ASCII[disbuff[2]]); DisplayOneChar(11, 1, ASCII[disbuff[1]]); DisplayOneChar(12, 1, ASCII[10]);

DisplayOneChar(13, 1, ASCII[disbuff[0]]); } }

/********************************************************/ void zd0() interrupt 3 //T0中断用来计数器溢出,超过测距范围 {

flag=1; //中断溢出标志 RX=0; }

/********超声波高电平脉冲宽度计算程序***************/ void Timer_Count(void) { TR1=1; //开启计数 while(RX); //当RX为1计数并等待 TR1=0; //关闭计数 Conut(); //计算 }

/********************************************************/ void StartModule() //启动模块 {

TX=1; //启动一次模块 Delay10us(2); TX=0; }

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

/*************主程序********************/ void main(void) {

unsigned char i; unsigned int a;

cmg88();//关数码管

Delay1ms(400); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化 Delay1ms(5);//延时片刻

DisplayListChar(0, 0, Range); DisplayListChar(0, 1, table);

TMOD=TMOD|0x10;//设T0为方式1,GATE=1; EA=1; //开启总中断 TH1=0;

TL1=0;

ET1=1; //允许T0中断

//=============================== //PWM_ini();

//=============================== turn_right_flag=0;

//================================= B: for(i=0;i<50;i++) //判断K3是否按下 { Delay1ms(1);//1ms内判断50次,如果其中有一次被判断到K3没按下,便重新检测 if(P3_6!=0 )//当K3按下时,启动小车 goto B; //跳转到标号B,重新检测 }

//蜂鸣器响一声

BUZZ=0; //50次检测K3确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。

Delay1ms(50);

BUZZ=1;//响50ms后关闭蜂鸣器

//======================================================================================================================= while(1) { RX=1;

StartModule(); //启动模块 for(a=951;a>0;a--) {

if(RX==1) {

Timer_Count(); //超声波高电平脉冲宽度计算函数 } } } }

结束语:本系统有STC89C52单片机,超声波模块,LCD1602显示器,报警系统等组成。STC89C52控制电机的转动和报警系统的动作。

LCD1602显示智能型小车到障碍物之间的距离便于人查看。智能小车能够实现自动避障,自动报警,实时监控障碍距离的功能。

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

L293D_IN3=1; L293D_IN4=0; } void Stop(void) //刹车 { L293D_IN1=0; L293D_IN2=0; L293D_IN3=0; L293D_IN4=0; } void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left) //后退左转 { L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0; Delay(100); L293D_IN1=1; L293D_IN2=0; L293D_IN3=1; L293D_IN4=0; } //================

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com