基于STC8A8K64SD4的蓝牙小车

这篇具有很好参考价值的文章主要介绍了基于STC8A8K64SD4的蓝牙小车。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了检测自己学习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电机驱动的使用

一、接线
废话不多说直接上图

基于STC8A8K64SD4的蓝牙小车

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占空比控制电机转速,占空比越大,转速越高。具体逻辑参照下面两个表格

基于STC8A8K64SD4的蓝牙小车

基于STC8A8K64SD4的蓝牙小车

 补充:

1.作者我另外在小车上加入了前照灯,增加了点趣味

2.使用12V转5V模块是为了给单片机供电,因为使用L298N电机驱动的5V供电十分不稳定,容易烧毁单片机(别问我怎么知道的,烧过。。。。)

成品图:

基于STC8A8K64SD4的蓝牙小车

 文章来源地址https://www.toymoban.com/news/detail-494548.html

到了这里,关于基于STC8A8K64SD4的蓝牙小车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • STC8H8K64U单片机-ADC采集数

    STC8H8K64U单片机-ADC采集数

    配置单片机的ADC时一定要将IO口配置成高阻输入模式, 以下是单片机引脚对应的ADC通道  

    2024年02月07日
    浏览(17)
  • 8051如何仿真,STC8H8K64U自带硬件USB直接仿真

    8051如何仿真,STC8H8K64U自带硬件USB直接仿真,解决8051的仿真问题,USB直接下载用户程序。 STC8H8K64U 系列单片机不仅可以借助STC专用工具—— STC-USB Link1D 和 一箭双雕之USB转双串口/全自动烧录器 进行串口仿真还可以 直接通过芯片自带的硬件USB接口进行仿真、烧录。下面是用自

    2024年02月09日
    浏览(12)
  • STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

    STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

    开发环境准备:Keil uVision5 烧录软件:STC-ISP(V6.92A) 芯片: STC8H8K64U-45I-LQFP64 芯片引脚: 打开Keil,点击【Project】,选择【new uVersion project】 Device选择【STC MCU Database】 在search中输入“8H8K”,选择【STC8H8K64U Series】,点击【ok】 选择项目所在的文件夹,添加一个Keil项目

    2024年01月17日
    浏览(16)
  • STC8H8K蓝牙智能巡线小车——3.按键开关状态获取

    STC8H8K蓝牙智能巡线小车——3.按键开关状态获取

    电路分析 引脚为P37 开关未按下时,P37是高电平 开关按下时,GND导通,P37是低电平 编程思路 Driver目录中添加KEY.h文件,应包含引脚定义、开关GPIO实例化函数、开关状态获取函数以及当按下和未按下时执行不同的函数(函数指针作为函数参数) Driver目录中添加KEY.c文件,做具

    2024年01月17日
    浏览(30)
  • 16个触摸按键,16个8段LED数码管大电流自动刷新,STC8H4K64TL

    16个触摸按键,16个8段LED数码管大电流自动刷新,STC8H4K64TL

    16个触摸按键,16个8段LED数码管大电流自动涮新,STC8H4K64TL STC8H4K64TL-45MHz-LQFP48/32, QFN48/32, 主要功能演示板, 附详细的演示程序/原理图,大家可在本贴技术讨论 1,演示了16个触摸按键输入的效果, 2,演示了 大电流自动涮新 16个8段LED数码管,简化了硬件设计,减轻了CPU的压力,

    2024年02月10日
    浏览(10)
  • STC8H驱动hub75e接口的64*64LED点阵屏

    STC8H驱动hub75e接口的64*64LED点阵屏

    由于最近在做毕业设计,应导师要求学习LED点阵屏的显示原理,学习并驱动hub75e接口的64*64LED点阵屏。点阵屏上一个点有三个颜色分量R,G,B,1为亮,0为灭。当这个点为110时,颜色为红色和绿色的混合--黄色。          hub75e接口如上图所示,其中R1/G1/B1和R2/G2/B2为两个R

    2024年02月11日
    浏览(29)
  • STC89C52 小车-舵机转向/蓝牙控制/寻迹,有PCB有讲解,更新

    STC89C52 小车-舵机转向/蓝牙控制/寻迹,有PCB有讲解,更新

    推荐单片机:STC89C52或51(尽量52 还有提供 可用于测试直接烧录的89单片机文件(hex),不需要重新编译 。 还是老话: 源代码可以直接编译通过。 本人是自学,原创内容--转载请务必说明!! 所有下载在文章结尾(包全代码,附件) 代码:为个人gitHub库,无法或不会下载的可以评论

    2024年02月02日
    浏览(11)
  • STC8学习 ——ADC 1

    注意:  uint8_t正常左移8位是0,但如果赋值给uint16_t就占uint16_t中高8位,要保留数据就要把八位数据左移8位后赋给16数据,继续赋给8位数据,结果就是0 注意:通过ADC采集数据并输出电压的原理是  电压和对应ADC端口采集结果的比值是恒定的 ADC第15通道采集的内部参考电压值

    2023年04月24日
    浏览(13)
  • STC8学习5 - 定时器

    STC8学习5 - 定时器

    定时器也可以做为计数器,其实他们本质上的原理是一样的,定时器是计数单片机内部的系统时钟,每1个或者12个时钟脉冲,就加一。计数器则是记录外部输入脉冲。 1. 定时器0有四种工作模式,这里使用的是定时器0的16位可重新装载模式,16位(0x0000~0xFFFF)即可以从0数到

    2024年02月06日
    浏览(21)
  • 【STC8】热启动&&串口指令下载

    【STC8】热启动&&串口指令下载

      在目标开发板没有装载自动下载电路的时候,往往需要冷启动,也就是需要手动开关电源,来达到单片机复位下载。当然还有一种方法是热启动,通过串口接收到自定义的指令后,软件执行复位下载。这就是本文介绍的内容。 开发板:STC8A8K64S4A12开发板(用的是STC8A8K64

    2024年02月06日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包