基于STC12C5A60S2单片机一个简易的蓝牙控制智能小车

快速导航
STC12已封装好的函数库

H桥模块

L238N模块资料
在这里插入图片描述
在这里插入图片描述

程序使用STC12C5A60S2独立PWM发生器
小车接线方面

//---------------------------------------------
//L298N双H桥直流驱动硬件接口定义
//-----------------------------------------------
sbit IN1 = P0^0; 			//左电机正转
sbit IN2 = P0^1;			//左电机反转
sbit IN3 = P0^5; 			//右电机正转
sbit IN4 = P0^6; 			//右电机反转

PWM接
H桥通道使能A接P1.3(PWM0)
H桥通道使能B接P1.4(PWM1)

PWM独立发生器不懂可以看这里
STC12C5A60S2独立PWM
请添加图片描述

蓝牙模块

安装一定要关闭小车电源
每一次上传程序都需要拔出蓝牙模块,上传完成后再装上

请添加图片描述

程序设置基本逻辑

PWM初始化
设置PWM占空比
串口1初始化
无线遥控

主函数

#include "config.h"
#include "motor.h"
#include "pwm.h"
#include "uart_ISR.h"

//实验头文件

//无线遥控函数
void Remote()
{
	switch(UartData)
	{
		case 'A':	SmartCarStops();break;//智能小车停车
		case 'B':	SmartCarRight();break;//智能小车右转
		case 'C':	SmartCarLeft();break;//智能小车左转
		case 'D':	SmartCarBack();break;//智能小车后退
		case 'E':	SmartCarForward();break;//智能小车前进
	}
}


void main()
{	
	PCA_Init();//PWM初始化
	PWM_Set(30,210);//设置PWM占空比
	UartInit();//串口1初始化
	
	
	while(1)
	{
		Remote();//无线遥控
	}
}

基本配置头文件

#ifndef _CONFIG_H
#define _CONFIG_H


//通用头文件


#include <STC12C5A60S2.H>
#include <intrins.h>

#define MAIN_Fosc		11059200L	//宏定义主时钟HZ
//#define MAIN_Fosc		12000000L

#define BAUD 			9600 		//UART 波特率


//具体逻辑查看如下真值表
//ENA	IN1		IN2		直流电机状态
//0		 x       x         停止
//1      0       0         制动
//1      0       1         正转
//1      1       0         反转
//1      1       1         制动
#define LeftMotorStop	 	IN1 = 0, IN2 = 0//左电机停止
#define RightMotorStop		IN3 = 0, IN4 = 0//右电机停止
#define LeftMotorGo			IN1 = 0, IN2 = 1//左电机正传
#define LeftMotorBack		IN1 = 1, IN2 = 0//左电机反转
#define RightMotorGo		IN3 = 1, IN4 = 0//右电机正传
#define RightMotorBack		IN3 = 0, IN4 = 1//右电机反转
/****************************************************************
已有数据类型重新定义
****************************************************************/
typedef signed char int8;  //8位有符号型
typedef signed int  int16; //16位有符号型
typedef unsigned char uint8;  //8位无符号型
typedef unsigned char uchar;  //8位无符号型
typedef unsigned int  uint16; //16位无符号型
typedef unsigned int  uint; //16位无符号型
typedef unsigned long uint32; //32位无符号型
typedef unsigned char BYTE;	  //8位无符号型
typedef unsigned int WORD;	  //16位无符号型



//---------------------------------------------
//L298N双H桥直流驱动硬件接口定义
//-----------------------------------------------
sbit IN1 = P0^0; 			//左电机正转
sbit IN2 = P0^1;			//左电机反转
sbit IN3 = P0^5; 			//右电机正转
sbit IN4 = P0^6; 			//右电机反转


#endif

电机驱动文件

motor.c

#include "config.h"
#include "motor.h"

//智能小车前进
void SmartCarForward(void)
{
	LeftMotorGo;	//左电机正转
	RightMotorGo;	//右电机正转
}

//智能小车后退
void SmartCarBack(void)
{
	LeftMotorBack;		//左电机反转
	RightMotorBack;		//右电机反转
}

//智能小车左转
void SmartCarLeft(void)
{
	LeftMotorStop;		//左电机停转
	RightMotorGo;		//右电机正转
}

//智能小车右转
void SmartCarRight(void)
{
	LeftMotorGo;		//左电机正转
	RightMotorStop;		//右电机停转
}

//智能小车停车
void SmartCarStops(void)
{
	LeftMotorStop;		//左电机停转
	RightMotorStop;		//右电机停转
}

motor.h

#ifndef _MOTOR_H
#define _MOTOR_H

//智能小车前进
void SmartCarForward(void);

//智能小车后退
void SmartCarBack(void);

//智能小车左转
void SmartCarLeft(void);

//智能小车右转
void SmartCarRight(void);

//智能小车停车
void SmartCarStops(void);


#endif


串口配置文件

uart_ISR.c

#include "config.h"
#include "uart_ISR.h"

unsigned char pdata UartData;//单字节串口数据

/********************************************************************
* 功能 : 初始化串口1程序,晶振11.0592, 波特率9600
* 输入 : 无
* 输出 : 无
***********************************************************************/
//串口初始化,晶振11.0592,波特率9600
void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x04;		//独立波特率发生器时钟为Fosc,即1T
	BRT = 0xDC;		//设定独立波特率发生器重装值
	AUXR |= 0x01;		//串口1选择独立波特率发生器为波特率发生器
	AUXR |= 0x10;		//启动独立波特率发生器
	
	EA = 1;//开总中断
	ES = 1;//开串口中断
}

void uart_Interrupt() interrupt 4
{
	if(RI)
	{
		RI = 0;
		UartData = SBUF;
		SBUF = UartData;
		TI=0;//向PC返回接收的数据
	}
}

uart_ISR.h

#ifndef _UART_ISR_H
#define _UART_ISR_H

extern unsigned char pdata UartData;//单字节串口数据

void UartInit(void);

#endif

PWM配置文件

pwm.c

#include "pwm.h"
#include "config.h"


/**********************************
 *函数名称:PCA_Init(void)
 *输入    :无
 *输出    :无
 *调用说明:外部调用
 *函数说明:PWM模块初始化
 ***********************************/
void PCA_Init(void)
{
	CCON = 0;				//PCA初始化
	CMOD = 0x00;			//空闲时不计数,不产生中断,时钟源为Sysclk/12,PWM频率大约为4KHz
	CL = 0x00;				//PCA低8位清零
	CH = 0x00;				//PCA高8位清零
 
	CCAPM0 = 0x42;			//8位PWM模式,无中断
	CCAP0H = 0xc0;			//PWM0占空比(调节此处值调节PWM占空比)
	CCAP0L = 0xc0;			//PWM0占空比(调节此处值调节PWM占空比)
 
	CCAPM1 = 0x42;			//8位PWM模式,无中断
	CCAP1H = 0x40;			//PWM1占空比(调节此处值调节PWM占空比)
	CCAP1L = 0x40;			//PWM1占空比(调节此处值调节PWM占空比)
 
	CR = 1;					//启动PCA计数器
}

/**********************************
 *函数名称:PWM_Set(unsigned char x,unsigned char y)
 *输入    :占空比输入1 unsigned char x(0-255),占空比输入unsigned char y(0-255)
 *输出    :无
 *调用说明:外部调用
 *函数说明:占空比设置
 ***********************************/
void PWM_Set(unsigned char x,unsigned char y)
{
	x = ~x;
	y = ~y;

	CCAP0H = y;				//设置比较值
	CCAP0L = y;	
	CCAP1H = x;				//设置比较值
	CCAP1L = x;
}

pwm.h

#ifndef _PWM_H
#define _PWM_H

void PCA_Init(void);

void PWM_Set(unsigned char x,unsigned char y);

#endif

安卓端

在这里插入图片描述

工程Demo及安卓调试APP

链接:https://pan.baidu.com/s/1zqpwz8mLYMK6xINJxXM0Jw
提取码:l786

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值