单片机智能蓝牙小车课程设计.docx

上传人:b****8 文档编号:10920984 上传时间:2023-02-23 格式:DOCX 页数:13 大小:80.03KB
下载 相关 举报
单片机智能蓝牙小车课程设计.docx_第1页
第1页 / 共13页
单片机智能蓝牙小车课程设计.docx_第2页
第2页 / 共13页
单片机智能蓝牙小车课程设计.docx_第3页
第3页 / 共13页
单片机智能蓝牙小车课程设计.docx_第4页
第4页 / 共13页
单片机智能蓝牙小车课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机智能蓝牙小车课程设计.docx

《单片机智能蓝牙小车课程设计.docx》由会员分享,可在线阅读,更多相关《单片机智能蓝牙小车课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

单片机智能蓝牙小车课程设计.docx

单片机智能蓝牙小车课程设计

系别:

电子信息工程班级:

信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】:

,年份

不少于三篇

附录:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1