快速导航
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
蓝牙模块
安装一定要关闭小车电源
每一次上传程序都需要拔出蓝牙模块,上传完成后再装上
程序设置基本逻辑
主函数
#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