为了检测自己学习51单片机的成果,制作了一个简单的蓝牙小车,特此来记录一下。
本文会讲解HC-05,L298N电机驱动的使用,12V转5V这个模块比较简单就不做讲解。
废话少说,先上代码!!!
main.c
#include <STC8.H>
#include "UART.h"
#include "PWM.h"
#include "Timer0.h"
void main(void)
{
P3M1 = 0x00;
P3M0 = 0xF2;//P30为准双向口,P31为推挽输出;
P5M1 = 0x00;
P5M0 = 0xFF;//P50~P53为推挽输出;
P4M1 = 0x00;
P4M0 = 0xFF;
P1M0 = 0xFF;
P1M1 = 0x00;
P52 = 0;
P53 = 0;
Uart_Init();//串口初始化;
Timer0Init();//定时器初始化
EA = 1;//打开总中断;
while(1);
}
PWM.h
#ifndef __PWM_H
#define __PWM_H
#include <STC8.H>
#include "UART.h"
sbit IN1 = P3^6;
sbit IN2 = P3^7;
sbit IN3 = P5^0;
sbit IN4 = P5^1;
int a=0;
int count=0;
void forward()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void back()
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void stop()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void left()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
void right()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
}
#endif
Timer0.c
#include <STC8.H>
void Timer0Init(void) //1微秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xF4; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1;
ET0 = 1;//定时器0开始计时
}
Timer0.h
#include <STC8.H>
void Timer0Init(void);
UART.h
#ifndef __UART_H
#define __UART_H
#include <STC8.H>
#include "PWM.h"
#include "oled.h"
void Uart_Init(void)
{
PCON &= 0x3F;
SCON = 0x50;
AUXR |= 0x40;
AUXR &= 0xFE;
TMOD &= 0x0F;
TH1 = 0xFE;
TL1 = 0xC8;
ET1 = 0;
TR1 = 1;
ES = 1;
PS = 2;
}
void Uart1() interrupt 4
{
ES=0;
if(RI)
{
RI = 0;
if(SBUF == 'F')
{
forward();
ET0 = 0;
TF0 = 0;
P34 = 1;
P33 = 1;
P40 = 0;
}
else if(SBUF == 'B')
{
back();
ET0 = 0;
TF0 = 0;
P34 = 1;
P33 = 1;
P40 = 1;
}
else if(SBUF == 'L')
{ ET0 = 1;
left();
a=1;
count=0;
TF0 = 0;
P34 = 1;
}
else if(SBUF == 'R')
{ET0 = 1;
right();
a=2;
count=0;
TF0 = 0;
P33 = 1;
}
else if(SBUF == 'S')
{ ET0 = 0;
TF0 = 0;
stop();
}
else if(SBUF == 'X')
{
P52 = 1;
}
else if(SBUF == 'Y')
{
P52 = 0;
}
else if(SBUF == 'M')
{
P53 = 1;
}
else if(SBUF == 'N')
{
P53 = 0;
}
else if(SBUF == 'A')
{
P53 = 1;
P52 = 1;
}
else if(SBUF == 'C')
{
P53 = 0;
P52 = 0;
}
}
if(TI)
{
TI = 0;
}
ES = 1;
}
void TMO_Rountine(void) interrupt 1
{
count++;
if(a==1)
{
if(count==7)
{
P33 = 0;
}
if(count==10)
{ P33 = 1;
count=0;
}
}
else if(a==2)
{
if(count==7)
{
P34 = 0;
}
if(count==10)
{ P34 = 1;
count=0;
}
}
}
#endif
HC-05模块的使用
概述
HC-05蓝牙模块是一种基于蓝牙协议的简单无线通信设备。该模块基于BC417单芯片蓝牙IC,符合蓝牙v2.0标准,支持UART和USB接口。
具有两种工作模式:命令响应工作模式和自动连接工作模式。
当模块处于命令响应工作模式(或者AT模式)时能才能执行 AT 命令,用户可向模块发送各种 AT指令,为模块设定控制参数或发布控制命令。(AT指令就是我们PC与一些终端设备(例如蓝牙,WiFi模块)之间进行通信的,配置这些终端设备参数的一套指令。)在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输。主模式:该模块可以主动搜索并连接其它蓝牙模块并接收发送数据。从模式:只能被搜索被其它蓝牙模块连接进行接收发送数据。回环:蓝牙模块就是将接收的数据原样返回给远程的主设备。
HC-05蓝牙模块有六个管脚
STATE:状态指示。未连接时输出低电平,连接时输出高电平。
RXD:UART接收引脚
TXD:UART发射引脚
GND:地
VCC:接电源,可以用+5V。
EN:使能。接地禁用模块,悬空或接3.3V使能。
如何进入AT模式:
HC-05与HC-06不同,HC-06没有连接上时,就是AT模式,而HC-05需要有个开关,注意到模块上的小黑点没有,不按的时候是可配对状态,1秒闪2次。按它再上电就使HC-05进入AT模式了,严格的讲,它只是一个开的作用,无法退出AT模式。(退出的话可以在串口发送AT+RESET复位,或者重新上电)此时指示灯慢闪(2秒亮一次),模块进入AT状态。
AT指令可以参考csdn上其他文章,这里就不在列出。
注意事项:这里是凭我自己的调试经验而来
1.发送AT指令的时候,注意应该有换行。
2.电脑上选择的波特率应该和模块一致。
L298N电机驱动的使用
一、接线
废话不多说直接上图
1、输出
L298N模块拥有双通道输出,也就是输出A与输出B,可以实现对两路电机进行不同的控制与操作,输出A与输出B就是直接连电机的两端即可。
2、供电AGB与板载5V使能的神奇跳线帽
这里就很迷幻,我就是这里出了差错,不知道该工几伏的电压,也不知道该从哪个口子输入,经过学习别的博主的总结,一共是三种接法。
①双5V输入
在A、B两处都接入一个5V电压,G接GND,AGB上方的板载5V使能要用跳线帽接起来。这种方法电压比较小,轮子可能转不起来,也无法进行PWM调速。不推荐!
②单12V输入
在A处接入一个7-12V电压,G接GND,B是一个5V输出,AGB上方的板载5V使能要用跳线帽接起来。没听错输入就变输出了,可以用来给单片机供电那种(但不太好用),这种方法很好用,转速可以,也可以进行PWM调速,最常用的方法就是它。
③单大于12V输入
在A处接入一个大于12V电压,G接GND,B是一个5V输出,AGB上方的板载5V使能的跳线帽接要拔掉。这种方法电压太大可能会烧坏玩具电机等小型电机,顺便摧毁单片机,不推荐!
3、通道使能
①PWM调速
如果你想用PWM调速,那就把通道使能脚接入单片机的PWM波输出脚。ENA控制输出A,ENB控制输出B。
②非PWM调速
不用PWM调速,就单纯想让电机转动,就给使能脚一个高电平即可,可以通过跳线帽将其与高电平输出脚相连,如果给使能脚低电平的话,电机将无法转动。
4、逻辑输入
四个脚分别接单片机的4个IO口即可。IN1、IN2控制通道A,IN3、IN4控制通道B。
二、使用方法
按照上面的方法进行接线后,我们开始理清逻辑关系。
电机状态是由通道使能脚与其对应的逻辑数输入脚进行控制。非PWM调速,就给ENA高电平,按照表格设置IN1、IN2就可以确定电机状态。PWM调速,ENA与单片机PWM波输出口相连接,按照表格设置IN1、IN2就可以确定电机状态。PWM占空比控制电机转速,占空比越大,转速越高。具体逻辑参照下面两个表格
补充:
1.作者我另外在小车上加入了前照灯,增加了点趣味
2.使用12V转5V模块是为了给单片机供电,因为使用L298N电机驱动的5V供电十分不稳定,容易烧毁单片机(别问我怎么知道的,烧过。。。。)
成品图:
文章来源:https://www.toymoban.com/news/detail-494548.html
文章来源地址https://www.toymoban.com/news/detail-494548.html
到了这里,关于基于STC8A8K64SD4的蓝牙小车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!