51单片机5路超声波避障C程序

合集下载

51单片机超声波测距C程序

51单片机超声波测距C程序

51单片机超声波测距C程序(2018-01-26 14:09:10>超声波检测原理超声波测距的程序流程图程序如下://超声波模块程序〃超声波模块程序//Trig = P2A0//Echo = P3A2#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int//void delay( uint z>{uint x,y 。

for(x=z 。

x>0。

x-->for(y=110 。

y>0。

y-->。

//void delay_20us(>{uchar a 。

for(a=0。

a<100。

a++>。

}//*********************************************************** ****// 显示数据转换程序void display(uint temp>{uchar ge,shi,bai 。

bai=temp/100 。

shi=(temp%100>/10 。

ge=temp%10。

wela=1 。

P0=0xf7。

wela=0 。

dula=1 。

P0=table[bai] 。

delay(1> 。

dula=1 。

P0=0x00 。

// 关位码dula=0 。

wela=1 。

P0=0xef 。

wela=0 。

dula=1 。

P0=table[shi] 。

dula=0 。

delay(1> 。

dula=1 。

P0=0x00。

// 关位码dula=0 。

dula=1 。

P0=table[ge] 。

dula=0 。

wela=1 。

P0=0xdf 。

wela=0。

dula=1 。

P0=0x00。

// 关位码dula=0 。

}//***************************************************************void main(>{uint distance 。

基于AT89S51单片机的智能超声波避障小车

基于AT89S51单片机的智能超声波避障小车

自动寻物小车目录摘要 (3)一、总体方案概述 (3)二、总体电路原理图 (3)三、各模块功能介绍 (4)(一)、超声波测距模块 (4)(二)、数码管显示模块 (4)(三)、直流电机控制模块 (6)(四)、语音提示模块 (7)(五)、速度自控模块 (8)(六)、信号提示模块 (8)(七)、单片机控制模块 (8)四、系统软件设计 (9)五、元件清单 (10)六、应用前景 (10)六、参考文献 (11)摘要:现今发达的交通在给人们带来便捷的同时也带来了许多的交通事故。

发生交通事故的因素有很多。

当然,如果我们的汽车能够更加智能,就是说事先能预测并显示前面障碍物离车的距离,当障碍物距离很近时汽车会自动采取一些措施避开障碍物,这样就能够在很大程度上避免这些事故的发生。

在本论文中,我们将会看到能够实现这一功能的智能小车。

关键字:超声波、测量、避障、单片机、语音一、总体方案概述本小车使用一台AT89S51单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,并且用数码管实时的显示出来,在小车与障碍物的距离小于安全距离(用软件设定)时,小车会发出“在距您车前方x(数码显示的实时距离)米的地方有一障碍物,请您注意避让”的语音提示,并且拐弯,以避开障碍物,同时会点亮相应侧边的发光二极管作为提示信号。

在避开障碍物后,小车会沿直线前进。

本系统设计的简易智能小车分为几个模块:单片机控制系统、超声波路面检测系统、前进、转弯控制电机以及方向指示灯系统。

它们之间的相互关系如下图1所示。

图1:智能小车简要原理框架图.二、总体电路原理图三、各模块功能介绍(一)、超声波测距模块首先利用单片机输出一个40kHz 的触发信号,把触发信号通过TRIG 管脚输入到超声波测距模块,再由超声波测距模块的发射器向某一方向发射超声波,在发射时刻的同时单片机通过软件开始计时,超声波在空气中传播,途中碰到障碍物返回,超声波测距模块的接收器收到反射波后通过产生一个回应信号并通过ECHO 脚反馈给单片机,此时单片机就立即停止计时。

51 超声波 程序

51 超声波 程序
outcomeL =TL1; //取出定时器的值
succeed_flag=1; //至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
case 0x01:P0=shi;P2=0xbf;flag++;break;
case 0x02:P0=bai;P2=0xdf;flag=0;break;
}
}
//显示数据转换程序
void conversion(uint temp_data)
{
ge_data=temp_data;
bai_data=SEG7[bai_data];
shi_data=SEG7[shi_data]&0x7f;
ge_data =SEG7[ge_data];
EA=0;
bai = bai_data;
shi = shi_data;
} //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
//定时器0中断,用做显示
timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0xfd; //写入定时器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge; P2=0x7f;flag++;break;
i=0;
flag=0;
Tx=0; //首先拉低脉冲输入引脚

基于51单片机的超声波避障小车设计-毕业论文

基于51单片机的超声波避障小车设计-毕业论文

基于51单片机的超声波避障小车设计-毕业论文内蒙古科技大学本科生毕业设计说明书(毕业论文)题目:基于单片机的超声波避障小车设计学生姓名:祝伟泰学号:1267112115 专业:测控技术与仪器班级:测控2012-1指导教师:燕芳副教授内蒙古科技大学毕业设计说明书(毕业论文)基于单片机的超声波避障小车设计摘要随着科学技术的飞速发展,人们对智能汽车的研究有增无已,智能车已然成为以后科学技术发展的新思路和新方向。

智能车可以按照预先设定的模式在一个环境里自动的运作,不需要人为的操控,可应用于路面检测,科学勘探,智能温度测量等。

本设计中制作的智能小车(又称轮式机器人)是本人在综合应用了本科所学的专业知识后设计出的一台智能小车,它具有超声波测距,自动避障,同步测速等功能。

虽然超声波避障小车只是智能车领域中的冰山一角,但是它却也是智能车中一个典型的代表。

麻雀虽小五脏俱全,本次设计的超声波避障小车,用STC15单片机作为核心控制器,设计出一种可以自动避障,并能同步实现速度和距离的测量以及显示的智能小车。

避障和测距通过超声波测距模块实现,并加入光电码盘测速模块从而实现测速功能,小车驱动由L298N驱动电路完成,数据的显示用LCD1602实现。

关键词:STC15单片机;超声波;避障;测速I内蒙古科技大学毕业设计说明书(毕业论文)Ultrasonic obstacle avoidance car design basedon Micro Computer UnitAbstractWith the development of science and technology, People have increased the research of smart car.Smart car has become the new way of thinking and a new direction for after the development of science and technology . Smart cars can be according to the preset mode automatically in an environment of operation, without the need of human control, can be applied to road testing, scientific exploration, intelligent temperature measurement, etc.This paper discusses the intelligent car (also known as wheeled robot) is I after summarized the major undergraduate course design a smart car, it has the ultrasonic distance measurement, automatic obstacle avoidance, synchronous speed, and other functions. Although ultrasonic obstacle avoidance car is just the tip of the iceberg in the field of smart car, but it is also a typical representative in intelligent vehicles. The sparrow is small all-sided, the design of ultrasonic obstacle avoidance car, use STC51 single-chip microcomputer as the core controller, design a kind of can automatic obstacleavoidance, and can realize the speed and distance measurement simultaneously and the smart car show. Obstacle avoidance and the distance by ultrasonic ranging module, and add light code disc speed measuring module and function of speed of the car drive by L298N drive circuit is completed, through LCD1602 display of measured data.Keywords: STC15;Ultrasonic sensors; avoidance; speedII内蒙古科技大学毕业设计说明书(毕业论文)目录摘要 (I)Abstract (II)1.1课题研究背景和意义 (1)1.2智能汽车的发展概述 (1)1.3 课题研究技术要求与主要内容 ....................................... 2 第二章总体方案设计 (4)2.1总体方案设计 (4)2.1.1具体设计思路 .................................................52.2系统各模块的设计方案 (6)2.2.1控制核心模块的选择方案论证 ...................................62.2.2主电路板的方案论证 ...........................................67 2.2.3测距避障传感器的方案论证 .....................................2.2.4 测速模块的选择方案论证 ......................................89 2.2.5电机驱动选择方案论证 .........................................2.2.6 显示装置的选型方案论证 ......................................92.3 本章小结 ........................................................11 第三章硬件电路设计 (11)3.1 STC15单片机简介 .................................................123.1.1 引脚说明 ...................................................123.1.2 特别管脚说明 ...............................................133.1.3 中断说明 ...................................................133.2 时钟电路和复位电路 (14)3.3电源电路部分 .....................................................143.4超声波传感器 .....................................................143.4.1 超声波测距的物理性质 .......................................153.4.2 超声波测距的原理 ...........................................153.4.3超声波测距过程分析 ..........................................163.5 电机驱动电路 ....................................................17III内蒙古科技大学毕业设计说明书(毕业论文)3.5.1 电机驱动电路分析 ...........................................183.5.2 PWMD调速分析 ...............................................193.6 LCD1602显示电路设计 .............................................193.6.1 LCD1602显示 ................................................193.6.2 LCD1602引脚功能说明 ........................................203.6.3 1602LCD的指令说明及时序: (20)3.7 光电测速模块 (22)3.8 报警电路设计 ..................................................... 23 第四章软件设计部分 (24)4.1 主程序的设计 (24)4.2 超声波测距程序设计 (25)4.3 避障程序设计 (26)4.4 PWM程序设计 .....................................................2728 4.5 显示子程序设计 ...................................................4.7 报警程序设计 (29)系统调试 .........................................................30 第五章5.1概述 .............................................................305.2 各模块的调试 (30)5.2.1 LCD的调试 ..................................................305.2.2光电码盘调试 ................................................315.2.3 蜂鸣器报警调试 .............................................315.2.4 电机及驱动调试 .............................................325.2.5 超声波模块调试 .............................................32 总结 .................................................................... 33 参考文献 (34)附录A 实物图 ............................................................ 36 附录B 源程序 (37)致谢 ....................................................................38IV内蒙古科技大学毕业设计说明书(毕业论文)第一章绪论1.1课题研究背景和意义随着21世纪的到来科学技术的发展步入了一个高速发展的阶段,智能化也普及了各个领域。

基于AT89S51单片机的智能超声波避障 (3)

基于AT89S51单片机的智能超声波避障 (3)

超声波视觉 优点:价格合理,夜间不受影响。 易于多目标测量和分类,分辨率好。 缺点:测量范围小,对天气变化敏感。 不能直接测量距离,算法复杂,处理速 度慢。


激光雷达MMW雷达: 优点:价格相合理,夜间不受影响 不受灯光、天气影响。 缺点:对水、灰尘、灯光敏感。 价格贵

本设计采用小型超声波传感器作为探测前方障碍物体的检 测元件,如电动车前方遇到有障碍物时,此超声波信号被 障碍物反射回来,由接收器接收。
测速系统


采用红外传感器进行测速。但无论是反 射式红外传感器还是对射式红外传感器, 他们对都 对外围环境要求较高,易受外部环境的 影响,稳定性不高,且价格较为昂贵。
测速发电机

测速发电机的输出电动势具有斜率高、特性成线性、 无信号区小或剩余电压小、正转和反转时输出电压不 对称度小、对温度敏感低等特点。此外,直流测速发 电机要求在一定转速下输出电压交流分量小,无线电 干扰小;交流测速发电机要求在工作转速变化范围内 输出电压相位变化小。 本设计考虑到小车的大小设计,采用红外传感器进行 测速。
基于AT89S51单片机的智能 避障小车设计方案与论证
设计人:
郭彬彬 张奔 冯栋
一、总体方案概述

本小车使用一台AT89S51单片机作为主 控芯片,它通过超声波测距来获取小车 距离障碍物的距离,并且用数码管实时 的显示出来,在小车与障碍物的距离小 于安全距离时,拐弯,以避开障碍物, 同时会点亮相应侧边的发光二极管作为 提示信号。在避开障碍物后,小车会沿 直线前进。

驱动系统


采用继电器对电动机的开或关进行制,通过开 关的切换对小车的速度进行调整.此 方案的优点是电路较为简单,缺点是继电器的 响应时间慢,易损坏,寿命较短,可靠性不高。

51单片机超声波测距C程序

51单片机超声波测距C程序

51单片机超声波测距C程序(2018-01-26 14:09:10>超声波检测原理超声波测距的程序流程图程序如下://超声波模块程序〃超声波模块程序//Trig = P2A0//Echo = P3A2#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int//void delay( uint z>{uint x,y 。

for(x=z 。

x>0。

x-->for(y=110 。

y>0。

y-->。

//void delay_20us(>{uchar a 。

for(a=0。

a<100。

a++>。

}//*********************************************************** ****// 显示数据转换程序void display(uint temp>{uchar ge,shi,bai 。

bai=temp/100 。

shi=(temp%100>/10 。

ge=temp%10。

wela=1 。

P0=0xf7。

wela=0 。

dula=1 。

P0=table[bai] 。

delay(1> 。

dula=1 。

P0=0x00 。

// 关位码dula=0 。

wela=1 。

P0=0xef 。

wela=0 。

dula=1 。

P0=table[shi] 。

dula=0 。

delay(1> 。

dula=1 。

P0=0x00。

// 关位码dula=0 。

dula=1 。

P0=table[ge] 。

dula=0 。

wela=1 。

P0=0xdf 。

wela=0。

dula=1 。

P0=0x00。

// 关位码dula=0 。

}//***************************************************************void main(>{uint distance 。

51单片机红外解码、超声波测距程序(详细解释程序)

51单片机红外解码、超声波测距程序(详细解释程序)

// c51红外解码、超声波测距程序#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define count 4uchar data IRcode[4]; //定义一个4字节的数组用来存储代码uchar table[4];uchar enled[4]={0x1f,0x2f,0x4f,0x8f};uchar CodeTemp,temp,tt; //编码字节缓存变量uchari,j,k,temp,timeH,timeL,succeed_flag,flag,h,h1,h2,a,key,key1,key2; //延时用的循环变量uint distance,distance1,time; //距离,timesbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)sbit come=P3^3;sbit d=P1^1;//发送码sbit BZ=P1^0;sbit s=P3^7;//38ksbit ss=P3^6;//38kuchar m;// 开关控制//sbit n=P2;//电机反转code unsigned charseg7code[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28}; //显示段码/**************************** 定时器0中断************************/void timer0() interrupt 1{TH0=(65536-count)/256;TL0=(65536-count)%256;s=~s;//产生38K信号ss=~ss;//tt++;//发送超声波个数}/**************************** 延时0.9ms子程序************************/void Delay0_9ms(void){uchar j,k;for(j=18;j>0;j--)for(k=20;k>0;k--);}/***************************延时1ms子程序**********************/void Delay1ms(void){uchar i,j;for(i=2;i>0;i--)for(j=230;j>0;j--);}/***************************延时4.5ms子程序**********************/ void Delay4_5ms(void){uchar i,j;for(i=10;i>0;i--)for(j=225;j>0;j--);}/**************************** 解码延时子程序************************/ void Delay(void){uchar i,j,k;for(i=100;i>0;i--)for(j=100;j>0;j--)for(k=3;k>0;k--);}/**************************** 显示延时子程序************************/ void ledDelay(unsigned int tc) //延时程序{unsigned int i,j;for(i=0;i<10;i++)for(j=0;j<tc;j++);}/************************************************ ****************///定时器1中断,用做超声波测距无回波void timer1() interrupt 3{TR1=0;ET1=0;EX1=0;TH1=0;TL1=0;}/***********************显示程序*********************/ void Led(int date) //显示函数{ int i;table[0]=date/1000;table[1]=date/100%10;table[2]=date/10%10;table[3]=date%10;date=0;for(i=0;i<120;i++){P2=enled[i%4]&m;//P2口高四位控制数码管,低位陪分控制继电器P0=seg7code[table[i%4]]; //取出千位数,查表,输出。

基于51单片机的超声波智能避障小车论文

基于51单片机的超声波智能避障小车论文

基于51单片机的超声波智能避障小车所在院系:电气与控制工程学院作者:2015.7.7论文题目:基于51单片机的超声波智能避障小车专业:微电子学1201学生:指导老师:刘晓荣柴钰王健摘要随着国内外智能小车的迅速发展,我们在本次课设中进行了超声波智能避障小车的设计,超声波避障小车主要是运用超声波测距进行数据传输,最后通过单片机控制电机进行避障,这次小车设计的意义在于探索智能小车的设计理念及设计方法,有些生活中的实际问题便是由于人的反应时间过长所引起,而智能车实现了自动应急,为生命保障做最后一道壁垒。

关键词:智能小车,单片机,超声波,测距,避障1绪论二十一世纪是计算机技术、科学技术和汽车工业迅猛发展的时代,在此大环境下,汽车与电子信息产业逐渐的一体化,向电子化、多媒体化和智能化方向发展,智能超声波避障小车则是其中的代表,它的研究及应用无疑成为关注的焦点。

1.1概述本小车使用一台STC89C52单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,在小车与障碍物的距离小于安全距离(用软件设定)时自动拐弯,以避开障碍物。

在避开障碍物后,小车会沿直线前进。

本系统设计的简易智能小车分为几个模块:单片机控制系统、超声波路面检测系统、前进、转弯控制电机。

1.1.1 基于51单片机的超声波智能避障小车的发展随着社会的不断发展和科学技术水平的不断提高,人类渴望创造出一种取代人力的劳动工具解放劳动力,于是出现了“机器人”这个代名词。

1959年诞生世界上第一台机器人,至今已有50多年的历史,机器人技术在科学领域也取得了质的飞跃,目前已发展成一门机械、电子、计算机、自动控制、信号处理,传感器等多学科为一体的尖端技术。

智能超声波避障小车经历了三代技术创新变革。

第一代超声波避障小车可编程的示教再现型,不需要装载任何传感器,只是采用简单的开关控制,通过编程来设置小车的路径与运动参数,在工作过程中不能根据环境的变化而改变自身的运动轨迹。

基于51单片机的智能循迹避障小车C源程序

基于51单片机的智能循迹避障小车C源程序

项目名称:智能小车系别:信息工程系专业:11电气工程及其自动化姓名:刘亮、崔占闯、韩康指导教师:王蕾崔占闯联系邮箱:目录摘要: ...............................................................................................3关键词: (3)绪论: (3)一、系统设计 (4)1.一、任务及要求 (4)1.2车体方案认证与选择 (4)二、硬件设计及说明 (5)2.1循迹+避障模块 (5)2.2主控模块 (6)2.3电机驱动模块 (6)2.4机械模块 (7)2.5 电源模块 (7)三、自动循迹避障小车整体设计 (7)四、软件设计及说明 (8)4.1系统软件流程图 (9)4.2系统程序 (9)五、系统测试进程 (12)六、总结 (13)七、附录:系统元器件 (13)摘要本设计要紧有三个模块包括信号检测模块、主控模块、电机驱动模块。

信号检测模块采纳红外光对管,用以对有无障碍与黑线进行检测。

主控电路采纳宏晶公司的8051核心的STC89C52单片机为操纵芯片。

电机驱动模块采纳意法半导体的L298N专用电机驱动芯片,单片操纵与传统分立元件电路相较,使整个系统有专门好的稳固性。

信号检测模块将搜集到的路况信号传入STC89C52单片机,经单片机处置事后对L298N发出指令进行相应的调整。

通过有无光线接收来操纵电动小车的转向,从而实现自动循迹避障的功能。

关键词:智能循迹避障小车,STC89C52单片机,L298N驱动芯片,信号检测模块,循迹避障绪论(一)智能小车的作用和意义自第一台工业机械人诞生以来,机械人的进展已经遍及机械、电子、冶金、交通、宇航、国防等领域。

最近几年来机械人的智能水平不断提高,而且迅速地改变着人们的生活方式。

人们在不断探讨、改造、熟悉自然的进程中,制造能替代人劳动的机械一直是人类的妄图。

随着科学技术的进展,机械人的感系统,关于视觉的各类技术而言图像处置技术已相当发达,而基于图像的明白得技术还很掉队,机械视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。

基于51单片机超声波蔽障小车

基于51单片机超声波蔽障小车

西安高新科技职业学院毕业设计(论文)课题名称智能小车_______ 年级2008_____________ 系别计算机科学与技术_ _ 专业计算机控制技术______ 班级计控(1)班_______ 姓名谢振宇学号0801020154_ 指导教师刘清德__________西安高新科技职业学院毕业设计(论文)成绩评议年级2008系别计算机科学与技术专业计算机控制技术姓名谢振宇题目智能小车指导教师评阅意见成绩评定:指导教师:年月日评阅教师意见评阅教师:年月日答辩小组意见答辩小组教师:年月日西安高新科技职业学院毕业论文(设计)指导及答辩记录论文(设计)题目智能小车学生姓名谢振宇专业班级计控(1)班指导教师刘清德毕业论文指导记录(注明指导过程摘要及日期)第一阶段指导老师下达论文任务书,补充任务书里专业知识,查阅资料,上报设计题目。

2010年12月25日—2010年12月25日第二阶段提出设计构思,老师指导解决实现智能车驱动,机械,制动,外观设计,以及控制核心选用8位单片机。

2011年4月20日—2011年4月25日第三阶段设计控制电路,外围电路,以及车体机械部分(转向部分),老师指导电机驱动,电源及其车体功耗,来选取合适的负载及其驱动芯片。

完成全部硬件,及老师借用实验室设备指导完成硬件的调试部分。

并且完成软件程序编译及其芯片烧写。

2011年5月3日—2011年5月15日第四阶段完成论文的编写,在老师的指导下修改完善。

2011年5月28日—2011年5月20日毕业论文答辩记录(注明答辩过程摘要、结果及日期)毕业设计(论文)任务书本任务书下达给:2008 年级计算机科学与技术系计算机控制技术专业姓名谢振宇设计题目:智能小车1.毕业设计(论文)任务及要求(包括设计或论文的主要内容、主要技术指标,并根据题目性质对学生提出具体要求)1)确定系统设计方案;2)进行系统的硬件设计,车体机械设计;3)完成元件选择;4)完成应用程序设计;5)进行软硬件调试;2.重点研究的问题及原始资料及依据(包括设计或论文的工作基础、研究条件、应用环境等)设计自动蔽障小车,设计内容包括:1)使用8051单片机片作为控制系统。

51单片机循迹避障c语言程序

51单片机循迹避障c语言程序

51单片机循迹避障c语言程序#includereg52.hunsigned char timer1;typedef unsigned char uint8;typedef unsigned int uint16;电机驱动口定义#define out1 0xfa 前进#define out2 0xf6 右转#define out3 0xf9 左转#define out4 0xf5 后退#define out5 0xff 停车sbit zhongbz = P3^3; 中间壁障sbit zuo = P1^0; 左边壁障sbit you = P1^1; 右边壁障sbit PWM=P1^2; 右边电机脉宽调制void system_Ini() 初始化中断{TMOD= 0x11;PWMTH1 = 0xfe; 11.0592TL1 = 0x33;TR1 = 1;IE =0x8A;}void pwm() 脉宽调制{if(timer1100) timer1=0;if(timer130) PWM=0;else PWM=1;}void delay1ms(uint16 z){uint16 x,y;for(x = z; x 0; x--)for(y = 115; y 0; y--);}void BiZhang(){if((zuo == 1&&zhongbz == 1&&you ==1)(zuo == 0 && zhongbz == 1 && you == 0)) 前进{P2 = out1;}if((zuo == 1&&zhongbz == 1&&you ==0) 壁障左转(zuo == 1&&zhongbz == 0&&you ==0)){P2 = out3;}if((zuo == 0&&zhongbz == 1&&you ==1) 壁障右转(zuo == 1&&zhongbz == 0&&you ==1)){P2 = out2;}if(zuo == 0&&zhongbz == 0&&you ==1){P2 = out4;delay1ms(250);P2 = out2;delay1ms(350);}if(((0 == zuo) &&(zhongbz == 0)&& (0 == you))) 如果三边都检测到了障碍物就停止,然后再次判断是否三边都有障碍物{P2 = out4;delay1ms(1000);if(((0 == zuo) &&(zhongbz == 0)&& (0 == you))) 如果再次检测到三边都有障碍物就后退{P2 = out4;delay1ms(100);}}}void main(){system_Ini();while(1){pwm();BiZhang();}}void T1zd(void) interrupt 3 3 为定时器1的中断号{TH1 = 0xfe; 11.0592TL1 = 0x33;timer1++;}。

基于89c51单片机的智能超声波避障小车

基于89c51单片机的智能超声波避障小车

基于89c51单⽚机的智能超声波避障⼩车接⼝实验课程结课论⽂学号、专业:姓名:论⽂题⽬:指导教师:所属学院:成绩评定教师签名桂林电⼦科技⼤学研究⽣院2014年 7 ⽉ 1 ⽇引⾔现今发达的交通在给⼈们带来便捷的同时也带来了许多的交通事故。

发⽣交通事故的因素有很多。

当然,如果我们的汽车能够更加智能,就是说事先能预测并显⽰前⾯障碍物离车的距离,当障碍物距离很近时汽车会⾃动采取⼀些措施避开障碍物,这样就能够在很⼤程度上避免这些事故的发⽣。

第⼀章总体⽅案概述本⼩车使⽤⼀⽚A T89c52 单⽚机作为主控芯⽚;⽤HC-SR04超声波模块来探测前⽅障碍物的距离,⽤单⽚机P3.1⼝送出⼤于10us 的⾼电平,P3.0⽤来检测回波,⽤单⽚机定时中断计算超声波来回经历的时间,这样可以通过距离计算公式求得前⽅障碍物的距离;LCD1602液晶屏⽤来显⽰距离;L298驱动芯⽚⽤来驱动两个直流电机,在单⽚机P1⼝控制L298的IN1,IN2,IN3,IN4的⾼低电平来控制两个直流电机的正反转,并且在P1⼝输出PWM 波,控制车⼦的⾏驶速度;选⽤ISD1760语⾳芯⽚实现语⾳播报功能,主要采⽤独⽴按键⽅式,进⾏语⾳的录放,⽤单⽚机的P2.4⼝控制语⾳的播放。

本系统设计的简易智能⼩车分为⼏个模块:系统控制模块,测距模块,驱动模块,显⽰模块,语⾳播报模块以及电源模块。

以上相关模块的具体描述如下:系统控制模块:单⽚机STC89C52RC; 测距模块:HC-SR04超声波测距;驱动模块:芯⽚L298及其相关逻辑电路;显⽰模块:LCD1602及其外围电路语⾳播报模块:芯⽚ISD1760及其录放⾳电路;电源模块:4节1.5伏的锂电池它们之间的相互关系如下图1所⽰。

单⽚机控制模块液晶显⽰模块直流电机驱动模块超声波测距模块语⾳播报模块图1 智能⼩车简要原理框架图第⼆章硬件电路设计2.1 单⽚机控制模块此模块控制着超声波测距模块、液晶显⽰模块、直流电机驱动模块、语⾳播报模块的⼯作。

51单片机驱动超声波测距模块C51程序

51单片机驱动超声波测距模块C51程序

51单片机驱动超声波测距模块C51程序51单片机驱动超声波测距模块C51程序#include;#define uchar unsigned char#define uint unsigned int#define ulong unsigned long//******************* 函数声明**************************void init_T otal(); //总初始化void init_T0(); //初始化定时器T0void init_T1(); //初始化定时器T1void init_inter0();//初始化外部中断1void send_T();void delay(uint z);//延时一段时间void delay_300us();//延时300usvoid delay_100us();//延时100us//*********************************************** *********sbit lcdrs=P1^7;sbit lcdrw=P3^1;sbit lcden=P1^5;//1602液晶控制端sbit send=P1^0;//sbit BEEP=P2^5;sbit wei=P2^6;sbit duan=P2^7;volatile uchar Count_TH ,Count_TL;//分别读计数器T1的高位TH1,低位TL1uchar t0,flag;uint time;uchar code table1[]=" distance "; uchar code table2[]=" ";//初始化显示void write_com(uchar com)//1602写指令函数{lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar datb)//1602写数据函数{ lcdrs=1;P0=datb;delay(1);lcden=1;delay(1);lcden=0;}void distance(uchar addr,uint datb){uchar bai,shi,ge ;bai=datb/100;shi=datb%100/10;ge=datb%10;write_com(0x80+0x40+addr);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);}/************************************************ *************************************** 名称:void init_T otal()* 功能:总初始化* 入口参数:NULL* 全局变量:NULL* 返回值:NULL**************************************************************************************/void init_T otal(){init_T0(); //初始化定时器T0为工作方式2 init_T1(); //初始化定时器T1为工作方式1 init_inter0();//初始化外部中断1EA=1; //开总中断}/*************************************************************************************** 名称:void init_T0()* 功能:初始化定时器T0为工作方式2* 入口参数:NULL* 全局变量:NULL* 返回值:NULL**************************************************************************************/void init_T0(){TMOD=0X12;TH0=0XE7;TL0=0XE7;EA=0;ET0=1;TR0=1;}/************************************************ *************************************** 名称:void init_T1()* 功能:初始化定时器T1为工作方式1* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void init_T1(){TMOD=0X12;TH1=0;TL1=0;EA=0;ET1=1;TR1=1;}/************************************************ *************************************** 名称:void init_inter1()* 功能:初始化外部中断1为低电平触发方式* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void init_inter0(){IT0=0; //低电平触发EA=0;EX0=0; //关外部中断1}/************************************************ *************************************** 名称:void inter_T0() interrupt 1* 功能:定时器T0中断函数产生40KHZ的方波* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void inter_T0() interrupt 1{send=~send;}/************************************************ *************************************** 名称:void inter_T1() interrupt 3* 功能:定时器T1中断函数* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void inter_T1() interrupt 3{TR1=0;EX0=0; //关外部中断0TH1=0;TL1=0;flag=2;}/************************************************ *************************************** 名称:void inter1() interrupt 2* 功能:外部中断1函数* 入口参数:NULL* 全局变量:Count_TH,Count_TL* 返回值:NULL************************************************* *************************************/void inter0() interrupt 0{TR1=0;EX0=0;flag=1;}/************************************************ *************************************** 名称:void send_T()* 功能:发送10个超声波脉冲* 入口参数:NULL* 全局变量:Count* 返回值:NULL************************************************* *************************************/void send_T(){delay_100us();//发送100us的方波TR0=0;//关定时器T0}/************************************************ *************************************** 名称:void delay(uint z)* 功能:延时一段时间* 入口参数:z* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay(uint z){uint x,y;for(x=z;x>;0;x--)for(y=1000;y>;0;y--);}/************************************************ *************************************** 名称:void delay_300us()* 功能:延时300us* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay_300us(){uint x;for(x=75;x>;0;x--);}/************************************************ *************************************** 名称:void delay_100us()* 功能:延时100us* 入口参数:NULL* 全局变量:NULL* 返回值:NULL************************************************* *************************************/void delay_100us(){uint x;for(x=24;x>;0;x--);}//*********************************************** ****************************************void main(){uint t,s;init_T otal();//总初始化while(1){TR1=1;//启动定时器1TR0=1;//启动定时器0send_T(); //发送100us超声波脉冲delay_300us();//延时300us跳过盲区EX1=1; //开外部中断1while(!flag); //等待回波或定时器T1溢出if(flag==1) //回波{Count_TH=TH1;//读计数器T1的高位TH1 Count_TL=TL1;//读计数器T1的低位TL1 t=Count_TH*256+Count_TL;s=(33140*t)/400000;distance(4,s);//液晶1602显示距离 }/* else //定时器T1溢出{Count_TH=0XFE;Count_TL=0X7F;// P2=Count_TH;P2=Count_TL;}*/delay(150);flag=0;//标志位清0TH1=0; //T1清0重新计时TL1=0;}}。

超声波避障小车程序设计之欧阳语创编

超声波避障小车程序设计之欧阳语创编

/******************************* ******************************** ******************************** ************///5路超声波避障实验:51单片机 + HC-SR04超声波 // /******************************************************** ***************************************************/ #include <AT89x52.H> //器件配置文件#include <intrins.h> #define RX1 P3_6//小车左侧超声波HC-SR04接收端#define TX1 P1_7 //发送端#define RX2 P3_3 //左前方超声波#define TX2 P0_2#define RX3 P2_4 //正前方超声波#define TX3 P2_5#define RX4 P3_5 //右前方超声波#define TX4 P3_4#define RX5 P3_7 //右侧超声波#define TX5 P1_6#define Left_moto_pwm P1_5 //PWM信号端#define Right_moto_pwm P1_4 //PWM信号端//定义小车驱动模块输入IO口sbit IN1=P1^0;sbit IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;sbit EN1=P1^4;sbit EN2=P1^5;bit Right_moto_stop=1;bit Left_moto_stop =1;#define Left_moto_go {IN1=0,IN2=1,EN1=1;} //左电机向前走#define Left_moto_back {IN1=1,IN2=0,EN1=1;} //左边电机向后走#define Left_moto_Stop {EN1=0;} //左边电机停转#define Right_moto_go {IN3=1,IN4=0,EN2=1;} //右边电机向前走#define Right_moto_back {IN3=0,IN4=1,EN2=1;} //右边电机向后走#define Right_moto_Stop {EN2=0;} //右边电机停转 unsigned char pwm_val_left =0;//变量定义unsigned char push_val_left =0;// 左电机占空比N/20 unsigned char pwm_val_right =0;unsigned char push_val_right=0;// 右电机占空比N/20unsigned int time=0;unsigned int timer=0;unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S5=0;void delay_1ms(unsigned char x) //1ms延时函数,100ms以内可用 { unsigned char i; while(x--) for(i=124;i>0;i--); }/******************************************************** /void Count1() //计算左侧超声波距离的函数{ while(!RX1); //当RX1为零时等待TR0=1; //开启计数while(RX1); //当RX1为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S1=(time*1.7)/100; //算出来是CM } void Count2() //计算函数{ while(!RX2); //当RX2为零时等待TR0=1; //开启计数while(RX2); //当RX2为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S2=(time*1.7)/100; //算出来是CM } void Count3() //计算函数{ while(!RX3); //当RX3为零时等待TR0=1; //开启计数while(RX3); //当RX3为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S3=(time*1.7)/100; //算出来是CM } void Count4() //计算函数{ while(!RX4); //当RX4为零时等待TR0=1; //开启计数while(RX4); //当RX4为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S4=(time*1.7)/100; //算出来是CM } void Count5() //计算函数{while(!RX5); //当RX5为零时等待TR0=1; //开启计数while(RX5); //当RX5为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S5=(time*1.7)/100; //算出来是CMvoid leftrun(void) {push_val_left=20;push_val_right=20;Left_moto_back //左电机往后走 Right_moto_go //右电机往前走 }/****************************************************** ******************/ //右转void rightrun(void){push_val_left=20;push_val_right=20;Left_moto_go //左电机往前走 Right_moto_back //右电机往后走 }/****************************************************** ******************/ //停止void stoprun(void){Left_moto_Stop //左电机停 Right_moto_Stop //右电机停 }/****************************************************** ******************/ /* PWM调制电机转速 */ /**************************** ********************************************//* 左电机调速 */ /*调节push_val_left的值改变电机转速,占空比 */void pwm_out_left_moto(void){if(Left_moto_stop){ if(pwm_val_left<=push_val_left){ Left_moto_pwm=1; }else { Left_moto_pwm=0; }if(pwm_val_left>=20)pwm_val_left=0;}else { Left_moto_pwm=0; } }/****************************************************** ************/ /* 右电机调速 */void pwm_out_right_moto(void){ if(Right_moto_stop){ if(pwm_val_right<=push_val_right){ Right_moto_pwm=1;}else { Right_moto_pwm=0; }if(pwm_val_right>=20) pwm_val_right=0; }else { Right_moto_pwm=0; } }/****************************************************** **/void timer0() interrupt 1 //T0中断 { }/***************************************************/ ///*TIMER1中断服务子函数产生PWM信号*/void timer1()interrupt 3{ TH1=(65536-1000)/256; //1ms定时 TL1=(65536-1000)%256;timer++;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto(); }/****************************************************** *** ***************************************************** *****/void main(void){TMOD=0x11; //设T0为方式1,GATE=1; TH0=0;TL0=0;TH1=(65536-1000)/256; //1ms定时TL1=(65536-1000)%256;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1; //开启总中断while(1) {TX1=1; //开启超声波1探测delay_1ms(1);TX1=0;Count1(); //测距TX2=1;delay_1ms(1);TX2=0;Count2();TX3=1;delay_1ms(1);TX3=0;Count3();TX4=1;delay_1ms(1);TX4=0;Count4();TX5=1;delay_1ms(1);TX5=0;Count5();if(S3<20 && S1<20 && S5<20) //进入狭窄通道{ backrun(); //倒车delay_1ms(100);}else if(S3<20 && S1<S5 ) //车子与障碍物90度垂直,左边距离小右转{ rightrun(); }else if(S3<20 && S5<S1 ) //车子与障碍物90度垂直,右边距离小左转 { leftrun(); }else if(S2<20){ rightrun(); //车与障碍物呈45度角时,车的左边比车的右边距离小,右转 }else if(S4<20){ leftrun(); //车与障碍物呈45度角时,车的右边比车欧阳语创编的左边距离小,左转 }else { run(); } } }欧阳语创编。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/****************************************************************************** *****************************///5路超声波避障实验:51单片机+ HC-SR04超声波///****************************************************************************** *****************************/#include <AT89x52.H> //器件配置文件#include <intrins.h>#define RX1 P3_6 //小车左侧超声波HC-SR04接收端#define TX1 P1_7 //发送端#define RX2 P3_3 //左前方超声波#define TX2 P0_2#define RX3 P2_4 //正前方超声波#define TX3 P2_5#define RX4 P3_5 //右前方超声波#define TX4 P3_4#define RX5 P3_7 //右侧超声波#define TX5 P1_6#define Left_moto_pwm P1_5 //PWM信号端#define Right_moto_pwm P1_4 //PWM信号端//定义小车驱动模块输入IO口sbit IN1=P1^0;sbit IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;sbit EN1=P1^4;sbit EN2=P1^5;bit Right_moto_stop=1;bit Left_moto_stop =1;#define Left_moto_go {IN1=0,IN2=1,EN1=1;} //左电机向前走#define Left_moto_back {IN1=1,IN2=0,EN1=1;} //左边电机向后走#define Left_moto_Stop {EN1=0;} //左边电机停转#define Right_moto_go {IN3=1,IN4=0,EN2=1;} //右边电机向前走#define Right_moto_back {IN3=0,IN4=1,EN2=1;} //右边电机向后走#define Right_moto_Stop {EN2=0;} //右边电机停转unsigned char pwm_val_left =0;//变量定义unsigned char push_val_left =0;// 左电机占空比N/20unsigned char pwm_val_right =0;unsigned char push_val_right=0;// 右电机占空比N/20unsigned int time=0;unsigned int timer=0;unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S5=0;void delay_1ms(unsigned char x) //1ms延时函数,100ms以内可用{unsigned char i;while(x--)for(i=124;i>0;i--);}/********************************************************/void Count1() //计算左侧超声波距离的函数{while(!RX1); //当RX1为零时等待TR0=1; //开启计数while(RX1); //当RX1为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S1=(time*1.7)/100; //算出来是CM}void Count2() //计算函数{while(!RX2); //当RX2为零时等待TR0=1; //开启计数while(RX2); //当RX2为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S2=(time*1.7)/100; //算出来是CM}void Count3() //计算函数{while(!RX3); //当RX3为零时等待TR0=1; //开启计数while(RX3); //当RX3为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S3=(time*1.7)/100; //算出来是CM}void Count4() //计算函数{while(!RX4); //当RX4为零时等待TR0=1; //开启计数while(RX4); //当RX4为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S4=(time*1.7)/100; //算出来是CM}void Count5() //计算函数{while(!RX5); //当RX5为零时等待TR0=1; //开启计数while(RX5); //当RX5为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S5=(time*1.7)/100; //算出来是CM/************************************************************************/ //前进void run(void){push_val_left=8; //左电机调速,速度调节变量0-20。

0最小,20最大,四驱大轮>6push_val_right=8; //右电机调速Left_moto_go ; //左电机往前走Right_moto_go ; //右电机往前走}/************************************************************************/ //后退void backrun(void){push_val_left=20;push_val_right=20;Left_moto_back ; //左电机往前走Right_moto_back ; //右电机往前走}/************************************************************************/ //左转void leftrun(void){push_val_left=20;push_val_right=20;Left_moto_back ; //左电机往后走Right_moto_go ; //右电机往前走}/************************************************************************/ //右转void rightrun(void){push_val_left=20;push_val_right=20;Left_moto_go ; //左电机往前走Right_moto_back ; //右电机往后走}/************************************************************************/ //停止void stoprun(void)Left_moto_Stop ; //左电机停Right_moto_Stop ; //右电机停}/************************************************************************/ /* PWM调制电机转速*/ /************************************************************************//* 左电机调速*/ /*调节push_val_left的值改变电机转速,占空比*/void pwm_out_left_moto(void){if(Left_moto_stop){if(pwm_val_left<=push_val_left){Left_moto_pwm=1;}else{Left_moto_pwm=0;}if(pwm_val_left>=20)pwm_val_left=0;}else{Left_moto_pwm=0;}}/******************************************************************//* 右电机调速*/ void pwm_out_right_moto(void){if(Right_moto_stop){if(pwm_val_right<=push_val_right){Right_moto_pwm=1;}else{Right_moto_pwm=0;}if(pwm_val_right>=20)pwm_val_right=0;}else{Right_moto_pwm=0;}}/********************************************************/ void timer0() interrupt 1 //T0中断{}/***************************************************////*TIMER1中断服务子函数产生PWM信号*/void timer1()interrupt 3{TH1=(65536-1000)/256; //1ms定时TL1=(65536-1000)%256;timer++;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto();}/********************************************************* **********************************************************/void main(void){TMOD=0x11; //设T0为方式1,GA TE=1;TH0=0;TL0=0;TH1=(65536-1000)/256; //1ms定时TL1=(65536-1000)%256;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1; //开启总中断while(1){TX1=1; //开启超声波1探测delay_1ms(1);TX1=0;Count1(); //测距TX2=1;delay_1ms(1);TX2=0;Count2();TX3=1;delay_1ms(1);TX3=0;Count3();TX4=1;delay_1ms(1);TX4=0;Count4();TX5=1;delay_1ms(1);TX5=0;Count5();if(S3<20 && S1<20 && S5<20) //进入狭窄通道{backrun(); //倒车delay_1ms(100);}else if(S3<20 && S1<S5 ) //车子与障碍物90度垂直,左边距离小右转{rightrun();}else if(S3<20 && S5<S1 ) //车子与障碍物90度垂直,右边距离小左转{leftrun();}else if(S2<20){rightrun(); //车与障碍物呈45度角时,车的左边比车的右边距离小,右转}else if(S4<20){leftrun(); //车与障碍物呈45度角时,车的右边比车的左边距离小,左转}else{run();}}}。

相关文档
最新文档