赞
踩
目录
名称 | 功能 | 图片 |
小车零件 | 小车项目的前提(组装方法问某宝商家) | ![]() |
面包板 | 我把面包板分为了四个区域。一区和四区功能相同,二区和三区功能相同。一区要看列,一区有正负极,如果一区要通电,+接正极,-接负极。这样+的那一列全都带正电,-的那一列全相当于GND。 二区要看行,二区的每一行的电压性质相同。 | ![]() |
2路L9110s模块 | 控制着小车的电机,输入不同电平控制正反转。以图中的方向为准,六个引脚分别是A-1B,A-1A,VCC,GND,B-1B,B-1A。在这里我让VCC和GND接入面包板的区域一,A-1B,A-1A,控制着左边的电机,B-1B,B-1A控制着右边的电机。同时将电机接线接入绿色的槽里面,正负无所谓,但要一对一对的接入,左边接左电机引线,右边接右电机引线。 | ![]() |
蓝牙模块 | 配合蓝牙手机助手使用,注意接线正确 | ![]() |
main.c
#include "motor.h"
#include "uart.h"
void main()
{
UartInit();
while(1)
{
}
}
motor.c
#include "motor.h"
void Go_Forward()//前进
{
RightConA=0;
RightConB=1;
LeftConA=0;
LeftConB=1;
}
void Go_Back()//后退
{
RightConA=1;
RightConB=0;
LeftConA=1;
LeftConB=0;
}
void Go_Left()//左转
{
RightConA=0;
RightConB=1;
LeftConA=0;
LeftConB=0;
}
void Go_Right()//右转
{
RightConA=0;
RightConB=0;
LeftConA=0;
LeftConB=1;
}
void STOP()//停止
{
RightConA=0;
RightConB=0;
LeftConA=0;
LeftConB=0;
}
motor.h
#ifndef _MOTOR_H
#define _MOTOR_H
#include <reg52.h>
sbit RightConA=P3^2;
sbit RightConB=P3^3;
sbit LeftConA=P3^4;
sbit LeftConB=P3^5;
void Go_Forward();//前进
void Go_Back();//后退
void Go_Left();//左转
void Go_Right();//右转
void STOP();//停止
#endif
uart.c
#include "uart.h"
#include "motor.h"
#include <string.h>
char buffer[5];
void UartInit(void) //9600bps@11.0592MHz
{
AUXR = 0x01;
SCON = 0x50; //配置串口工作方式1,REN使能接收
TMOD &=0XF0;
TMOD |= 0x20;//定时器1工作方式位8位自动重装
TH1 = 0xFD;
TL1 = 0xFD;//9600波特率的初值
TR1 = 1;//启动定时器
EA = 1;//开启总中断
ES = 1;//开启串口中断
}
void Uart_Hangdler() interrupt 4
{
static int i=0;//静态变量,被初始化一次
char tmp;
if(RI==1)//中断处理函数中,对于接收中断的响应
{
RI=0;//清除接收中断标志位
tmp = SBUF;
if(tmp == 'M')
{
i = 0;
}
buffer[i++] = tmp;
if(i==5)
{
i=0;
}
if(buffer[0] == 'M' )//将第一位设置为M {
switch(buffer[1])
{
case '1':
Go_Forward();
break;
case '2':
Go_Back();
break;
case '3':
Go_Left();
break;
case '4':
Go_Right();
break;
case '5':
STOP();
break;
}
}
if(i==2)
{
memset(buffer,'\0',5);//记下了数字和字母清零
i=0;
}
}
}
uart.h
#ifndef _UART_H
#define _UART_H
#include <reg52.h>
sfr AUXR=0x8E;
void UartInit(void);
#endif
关于motor部分
RightConA对应B-1A
RightConB对应B-1B
LeftConA对应A-1A
LeftConB对应A-1B
让RightConA=0;
RightConB=1;
LeftConA=0;
LeftConB=1;来一个正向电压,前进(相对于车头),如果你的和我的不一样你可以调节一下2路L9110s模块里的方向。
让RightConA=0;
RightConB=1;
LeftConA=0;
LeftConB=0;在这里我们实行左转的时候,右轮动,左轮不动。
当需要停止的时候,四个引脚都停止供电。
关于uart部分
TR1=1,启动定时器开始计数,TF1=1,CPU申请中断,但是虽然他申请我们却可以不用,因此我在程序里并没有体现他的存在,我们不需要定时器1中断,我们需要串口中断
开启定时器1的中断,打开EA,ES。
进入中断后,判断中标志位RI是否为1,为1,软件清零。
设立一个临时变量接受来自接受寄存器SBUF的数据。如果遇到M,将其设置为第一个字符,接着数字是第二个字符。
M1前进
M2后退
M3左转
M4右转
M5停止
当i==2时,清零,并调用memset函数,对buffer的内容清零。
扫描这个二维码,下载蓝牙助手
打开手机蓝牙,打来蓝牙助手软件。找到我们的蓝牙,连接
点击 自定义按钮,点击 设置方向按钮
长按上方的蓝色长方形,设置为前进 M1,点击发送,确定。其余的功能对应设置。
设置完成后点击对应的按钮小车就会执行命令。
如果大家没有蓝牙,也可以选择串口助手,并打开串口,在发送缓冲区选择文本模式分别输入M1,M2,M3,M4,M5执行相应的命令。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。