赞
踩
快速导航
STC12已封装好的函数库
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.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
链接:https://pan.baidu.com/s/1zqpwz8mLYMK6xINJxXM0Jw
提取码:l786
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。