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

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

系别:电子信息工程班级:信10050 6 学号:信10050601 姓名:徐彬彬

引言

制作一个基于51单片机的控制的无线控制小车。

一、系统设计

由51单片机控制直流电机的正反转来控制小车的运动。

无线部分用来接收上位机(电脑或者手机)发出的信号,通过信号控制单片机调用函数程序来控制小车的运行状态。

无线部分:用蓝牙从机的TTL接口接收信号反馈给单片机,还可以通过电脑的无线局域网网卡来控制路由器的TTL串口来控制单片机的状态。由于蓝牙模块容易得到且接口方便,电压可以用+5V控制,携带方便,便于在小车上安装。

电机驱动:电机驱动需要大电流,较高的电压,考虑到单片机的负载能力,用L298N驱动模块来驱动电机,单片机输出逻辑信号控制L298N模块输出正反向电压,由此控制电机的正反转。

小车的运动状态:小车为四轮驱动,一侧的两个电机分为一组。

二、软件设计

单片机电路:

由p1口输出逻辑电平驱动L298N电路

L298N驱动电机电路,供给+5V和+12V电压

三、系统的仿真与调试

用简单程序仿真测试电路连接情况

汇编程序代码:

org 0000h

ajmp main

org 0080h

main:

mov a,#0ffh

mov p1,a ;不转

call delay ;延时

loop: mov a,#00ah ;正转

mov p1,a

call delay

mov a,#0ffh;停止

mov p1,a

call delay

mov a,#005h;反转

mov p1,a

call delay

mov a,#0ffh;停止

mov p1,a

call delay

jmp loop

delay: mov r5,#50 ;延时。

d1: mov r6,#40

d2: mov r7,#248

djnz r7,$

djnz r6,d2

djnz r5,d1

ret

end

仿真结果:电机正反转均正常

小车程序:

用单片机控制小车的四个状态,前进,后退,左转,右转。由四个函数实现,执行条件为中断。当蓝牙从机接收到数据传输到单片机时,单片机内部选择指令,调动while函数,判断指令数据,从而控制小车状态。

四、程序设计

循环函数,控制小车的状态

while(1)

{

switch(Buffer[0])

{

case 0: Moto_Stop(); break;

case 1: Moto_Forward(); break;

case 2: Moto_Backward(); break;

case 3: Moto_TurnLeft(); break; case 4: Moto_TurnRight(); break; default:break;

}

}

五、总结(心得体会)

是否完成

六、程序清单

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar Buffer[4] = {0}; //从串口接收的数据

uint i,j;

sbit Left_Positive=P1^0;

sbit Left_Negative=P1^1;

sbit Right_Positive=P1^2;

sbit Right_Negative=P1^3;

sbit LeftLight=P2^1;

sbit RightLight=P2^2;

/******************************************************************** * 名称: Delay_1ms()

* 功能: 延时子程序,延时时间为1ms * x

* 输入: x (延时一毫秒的个数)

* 输出: 无

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

void Delay_1ms(uint i)//1ms延时

{

uchar x,j;

for(j=0;j

for(x=0;x<=148;x++);

}

/******************************************************************** * 名称: Com_Int()

* 功能: 串口中断子函数

* 输入: 无

* 输出: 无

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

void Com_Int(void) interrupt 4

{

EA = 0;

if(RI == 1) //当硬件接收到一个数据时,RI会置位

{

Buffer[0] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII

相关文档
最新文档