RIOJT
Rir*
R2V1-T
R2N
CiM)
10Un
R19
CH
发ih
:
2\T
hi-r1j
10
160
S6K
士接收
超声波模块
三、主要模块基本原理
(1)超声波模块
」U
10uS的TTL
发信号
i■坏发岀8个40KHZ脉冲
□
值号
楔块内郎发出信号
回QR电平無出与怯测距SB成比例
超声波时序图
以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。
一旦检测到回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:
距离二高电平时间*声速(340M/S)/2。
(2)液晶显示模块
LCD1602
如上图所示,整个液晶屏采用标准的16脚接口,其中GND为电源地,VCC接5V正电源,VEE为液晶显示屏对比度调整端,通过一个可调电阻接地,可调电阻调到最大时对比度最弱,可调电阻调到零时对比度最高。
RS为寄存器选择端,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
E端为使能端,当E端由低电平跳变成高电平时,液晶屏执行命令。
DBO―DB7为8位双向数据线。
四、流程图及源代码
主函数流程图
源程序
#include
#include
include,,LCD1602display.hn
#deflneTXP2_l
#defineRXP2_0
sbitDU=P2A6;
sbitWE=P2A7;
#deflneFonvard_L_DATA180//当前进不能走直线的时候,请调节这两个参数,理想的时候是100,100,最大256,最小0。
0的时候最慢,256的时候最快
#defineFonvard_R_DATA180〃例如小车前进的时候有点向左拐,说明右边马达转速过快,那可以取一个值大一点,另外一个值小一点,例如200190
〃直流电机因为制造上的误差,同一个脉宽下也不一定速度一致的,需要自己手动调节
//sbitP4_0=0xc0;//P4口地址
/*****按照原图接线定义******/
sbitL293D_IN1=P1A2;
sbitL293D_IN2=P1A3;
sbitL293D_IN3=P1A6;
sbitL293D_IN4=P1A7;
sbitL293D_EN1=P1A4;
sbitL293D_EN2=P1人5;
sbitBUZZ=P2A3;〃蜂鸣器
voidcmg88()//关数码管,点阵函数
{
DU=1;
P0=0X00;
DU=0;
}
voidDelay400Ms(void);//延时400毫秒函数
unsignedchaicodeRange[]='-=RangeFindei==u;//LCD1602显示格式
unsignedchaicodeASCH[13]=“0123456789.-M”;
unsignedchaicodetable[]=,'Distance:
000.0cm,';
unsignedchaicodetablel[]="!
!
!
Outofrange";
unsignedchaidisbuff[4]={0,0,0,0};//用于分别存放距离的值0.1mm、mm、cm和m的值
voidCount(void);//距离计算函数
unsignedmttime=0;//用于存放定时器时间值
unsignedlongS=0;//用于存放距离的值
bitflag=0;〃量程溢出标志位
bittuin_nght_flag;
〃—================================
voidFonvard(unsignedchaiSpeed_Right,unsignedcharSpeed_Left)//前进
{
L293D_IN1=O;
L293D_IN2=1;
L293D_IN3=1;
L293D_IN4=0;
}
voidStop(void)〃杀!
|车
L293D_IN1=O;
L293D_IN2=0;
L293D_IN3=0;
L293D_IN4=0;
}_
voidTurn_Right(unsignedcharSpeed_Right,unsignedchaiSpeed_Left)//后退左转
{
L293D_IN1=1;
L293D_IN2=0;
L293D_IN3=1;
L293D_IN4=0;
Delay(lOO);
L293D_IN1=1;
L293D_IN2=0;
L293D_IN3=1;
L293D_IN4=0;
}
voidConut(void)
r
tmie=THl*256+TLl;
TH1=O;
TL1=O;
〃此时time的时间单位决定于晶振的速度,外接晶振为11.0592MHZ时,
//time的值为0.54us*time,单位为微秒
〃那么lus声波能走多远的距离呢?
ls=1000ms=1000000i】s
//340/1000000=0.00034米
//0.00034米/1000=0.34毫米也就是lus能走0.34毫米
〃但是,我们现在计算的是从超声波发射到反射接收的双路程,〃所以我们将计算的结果除以2才是实际的路程
S=tune*2y/先算出一共的时间是多少微秒。
S=S*0.17;〃此时计算到的结果为毫米,并且是精确到毫米的后两位了,有两个小数点
if(S<=300)//
if(tuni_nght_flag!
=1)
{
StopO;
Delaylms(5);//发现小车自动复位的时候,可以稍微延长一点这个延时,减少电机反向电压对电路板的冲击。
}
tuni_nght_flag=1;
P2_3=0;
Delaylms(50);
P2_3=l;
Tuin_Right(120,120);〃小于设定距离时电机后退转弯
}
else
{
nnn_nght_flag=O;
Fonvaid(Fonvard_R_DATA,Fowaid_L_DATA);〃前进(大于
20-30CM前进)
}
//====================if((S>=5OOO)||flag==l)//超出测量范围
{
flag=0;
DisplayListCliar(O,1,tablet);
}
else
{
disbuff[0]=S%10;
disbuff[l]=S/10%10;
disbuff[2]=S/100%10;
disbuff[3]=S/lOOO;
DisplayListCliar(O,1,table);
DisplayOneChar(9,1,ASCII[disbuff[3]]);
DisplayOneChar(10,1,ASCII[disbuff[2]]);
DisplayOneChar(l1,1,ASCII[disbuff[l]]);
DisplavOneChar(12,1,ASCII[10]);
DisplayOneChar(13,1,ASCII[disbuff[O]]);
}
}
*******************************************************/
voidzdOQlnteriupt3//TO中断用來计数器溢出,超过测距范围
flag=l;
RX=O;
}
//中断溢出标志
/********超声波高电平脉冲宽度计算程序***************/
voidTunei_Count(void)
TR1=1;
while(RX);
〃开启计数
〃当RX为1计数并等待
TR1=O;
ConutQ;
〃关闭计数
〃计算
}
******************************************************
voidStailModuleQ〃启动模块
{
TX=1;〃启动一次模块
Delay10us
(2);
TX=0;
}
y*******************************************************voidmam(void)
{
unsignedchaii;
unsignedinta;
cmg88()^/关数码管
Delaylms(400);〃启动等待,等LCM讲入工作状态LCMIiiitO;//LCM初始化
Delaylms(5);〃延时片刻
DisplavListChar(O,0,Range);
DisplayListChar(O,1,table);
TMOD=TMOD|OxlO;//设TO为方式1,GATE=1;
EA=1;〃开启总中断
TH1=O;
TL1=O;
ET1=1;〃允许TO中断
//==—======—=============//PWM_mi();
//==—======—=============
tum_nght_flag=0;
B:
foi(i=0;i<50;i++)〃判断K3是否按下
{
Delaylms(l);//lms内判断50次,如果其中有一次被判断到K3没按下,便重新检测
if(P3_6!
=0)〃当K3按下时,启动小车
gotoB;〃跳转到标号B,重新检测
}
//蜂鸣器响一声
BUZZ=0;〃50次检测K3确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。
Delaylms(50);
BUZZ=1;//响50ms后关闭蜂鸣器
while(l)
{
RX=1;
StartModuleQ;〃启动模块
for(a=951;a>0;a-)
if(RX=l)
{
Timer_Count();〃超声波高电平脉冲宽度计算函数
}
}
}
结束语:
本系统有STC89C52单片机,超声波模块,LCD1602显示器,报警系统等组成。
STC89C52控制电机的转动和报警系统的动作。
智能小
LCD1602显示智能型小车到障碍物之间的距离便于人査看。
车能够实现自动避障,自动报警,实时监控障碍距离的功能