单片机智能蓝牙小车课程设计.docx
《单片机智能蓝牙小车课程设计.docx》由会员分享,可在线阅读,更多相关《单片机智能蓝牙小车课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
单片机智能蓝牙小车课程设计
单
片
机
课
程
设
计
系别:
电子信息工程班级:
信100506
学号:
信10050601姓名:
徐彬彬
引言
制作一个基于51单片机的控制的无线控制小车。
一、系统设计
由51单片机控制直流电机的正反转来控制小车的运动。
无线部分用来接收上位机(电脑或者手机)发出的信号,通过信号控制单片机调用函数程序来控制小车的运行状态。
无线部分:
用蓝牙从机的TTL接口接收信号反馈给单片机,还可以通过电脑的无线局域网网卡来控制路由器的TTL串口来控制单片机的状态。
由于蓝牙模块容易得到且接口方便,电压可以用+5V控制,携带方便,便于在小车上安装。
电机驱动:
电机驱动需要大电流,较高的电压,考虑到单片机的负载能力,用L298N驱动模块来驱动电机,单片机输出逻辑信号控制L298N模块输出正反向电压,由此控制电机的正反转。
小车的运动状态:
小车为四轮驱动,一侧的两个电机分为一组。
二、软件设计
单片机电路:
由p1口输出逻辑电平驱动L298N电路
L298N驱动电机电路,供给+5V和+12V电压
三、系统的仿真与调试
用简单程序仿真测试电路连接情况
汇编程序代码:
org0000h
ajmpmain
org0080h
main:
mova,#0ffh
movp1,a;不转
calldelay;延时
loop:
mova,#00ah;正转
movp1,a
calldelay
mova,#0ffh;停止
movp1,a
calldelay
mova,#005h;反转
movp1,a
calldelay
mova,#0ffh;停止
movp1,a
calldelay
jmploop
delay:
movr5,#50;延时。
d1:
movr6,#40
d2:
movr7,#248
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
仿真结果:
电机正反转均正常
小车程序:
用单片机控制小车的四个状态,前进,后退,左转,右转。
由四个函数实现,执行条件为中断。
当蓝牙从机接收到数据传输到单片机时,单片机内部选择指令,调动while函数,判断指令数据,从而控制小车状态。
四、程序设计
循环函数,控制小车的状态
while
(1)
{
switch(Buffer[0])
{
case0:
Moto_Stop();break;
case1:
Moto_Forward();break;
case2:
Moto_Backward();break;
case3:
Moto_TurnLeft();break;
case4:
Moto_TurnRight();break;
default:
break;
}
}
五、总结(心得体会)
是否完成
六、程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharBuffer[4]={0};//从串口接收的数据
uinti,j;
sbitLeft_Positive=P1^0;
sbitLeft_Negative=P1^1;
sbitRight_Positive=P1^2;
sbitRight_Negative=P1^3;
sbitLeftLight=P2^1;
sbitRightLight=P2^2;
/********************************************************************
*名称:
Delay_1ms()
*功能:
延时子程序,延时时间为1ms*x
*输入:
x(延时一毫秒的个数)
*输出:
无
***********************************************************************/
voidDelay_1ms(uinti)//1ms延时
{
ucharx,j;
for(j=0;j
for(x=0;x<=148;x++);
}
/********************************************************************
*名称:
Com_Int()
*功能:
串口中断子函数
*输入:
无
*输出:
无
***********************************************************************/
voidCom_Int(void)interrupt4
{
EA=0;
if(RI==1)//当硬件接收到一个数据时,RI会置位
{
Buffer[0]=SBUF-48;//这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI=0;
}
EA=1;
}
/********************************************************************
*名称:
Com_Init()
*功能:
串口初始化,晶振11.0592,波特率9600,使串口中断
*输入:
无
*输出:
无
***********************************************************************/
voidCom_Init(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;//设置波特率9600
TL1=0xFd;
TR1=1;//启动定时器1
ES=1;//开串口中断
EA=1;//开总中断
}
/********************************************************************
*名称:
Moto_Forward()
*功能:
电机1、2启动,都是前进,整车表现为前进。
*输入:
无
*输出:
无问题
***********************************************************************/
voidMoto_Forward()
{
Right_Negative=0;
Left_Positive=0;
Left_Negative=1;
Right_Positive=1;
Delay_1ms(100);
}
/********************************************************************
*名称:
Moto_Backward()
*功能:
电机1、2启动,都是后退,整车表现为后退。
*输入:
无
*输出:
无
***********************************************************************/
voidMoto_Backward()
{
Left_Positive=0;
Right_Positive=0;
Right_Negative=1;
Left_Negative=1;
Delay_1ms(100);
}
/********************************************************************
*名称:
Moto_TurnLeft()
*功能:
电机1后退,电机2前进,整车表现为左转。
*输入:
无
*输出:
无
***********************************************************************/
voidMoto_TurnLeft()
{
Left_Negative=0;
Right_Positive=0;
Right_Negative=1;
Left_Positive=1;
Delay_1ms(100);
}
/********************************************************************
*名称:
Moto_TurnRight()
*功能:
电机1前进,电机2后退,整车表现为右转。
*输入:
无
*输出:
无
***********************************************************************/
voidMoto_TurnRight()
{
Right_Negative=0;
Left_Negative=0;
Left_Positive=1;
Right_Positive=1;
Delay_1ms(100);
}
/********************************************************************
*名称:
Moto_Stop()
*功能:
电机1停止,电机2停止,整车表现为停止。
*输入:
无
*输出:
无
***********************************************************************/
voidMoto_Stop()
{
Right_Negative=0;
Left_Negative=0;
Left_Positive=0;
Right_Positive=0;
Delay_1ms(100);
}
voidmain()
{
Delay_1ms(100);
Com_Init();//串口初始化
while
(1)//循环结构,选择函数控制小车的状态
{
switch(Buffer[0])
{
case0:
Moto_Stop();break;
case1:
Moto_Forward();break;
case2:
Moto_Backward();break;
case3:
Moto_TurnLeft();break;
case4:
Moto_TurnRight();break;
default:
break;
}
}
}
七、参考文献
【】作者.书名(版本)【M】:
出版社,年份
不少于三篇
附录: