/**********************亚博智能小车黑线循迹例程************************
* 平台:BST-V51 + Keil uVision3 + STC89C52RC
* 名称:智能小车例程
* 公司:深圳市亚博智能科技有限公司
* 编写:罗工
* 日期:2016-5-10
* 晶振:11.0592MHZ
* 说明:免费开源,不提供源代码分析,有问题直接到交流群交流
* 硬件设置:要有自己动手能力,进行组装接线和传感器灵敏度的调试,才能完成实验
* 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
******************************************************************/
//按下K4按键,1秒左右启电小车
//按下复位健可以停止小车
#include <reg52.h> //包含52系统头文件
#include <string.h>
#include "bst_car.h" //包含bst_car.h智能小车头文件
#include "ps2.h"
sfr T2MOD = 0xC9;
unsigned char pwm_val_left =0;//变量定义
unsigned char pwm_val_right =0;
unsigned char push_val_left ;// 左电机占空比N/20 //速度调节变量 0-20。。。0最小,20最大
unsigned char push_val_right ;// 右电机占空比N/20
// 大家可以根据循迹效果修改以上两个数值
bit Right_PWM_ON=1; //右电机PWM开关
bit Left_PWM_ON =1; //左电机PWM开关
bit startBit = 0; //串口接收开始标志位
bit newLineReceived = 0; //串口一帧协议包接收完成
unsigned char control=0X03; //车运动控制全局变量
unsigned char inputString[50]; //接收数据协议
long int distance = 0; //距离变量
unsigned int timeH, timeL;
unsigned char succeed_flag;
/*小车运行状态枚举*/
enum{
enSTOP = 0,
enRUN,
enBACK,
enLEFT,
enRIGHT,
enUPLEFT,
enUPRIGHT,
enDOWNLEFT,
enDOWNRIGHT,
enSPINLEFT,
enSPINRIGHT
}enCarState;
#define enMinMin() {push_val_left =20;push_val_right =20;}
#define enMin() {push_val_left =24;push_val_right =24;}
#define enMidle() {push_val_left =28;push_val_right =28;}
#define enMax() {push_val_left =32;push_val_right =32;}
int g_volume = 0;
int g_carstate = 0;
//延时函数
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=112;j>0;j--);
}
/******************************************************************************/
/* 函数名称 : delayt */
/* 函数描述 : 延时函数 */
/* 输入参数 : x */
/* 参数描述 : 延时时间数据 */
/* 返回值 : 无 */
/******************************************************************************/
void delayt(unsigned int x)
{
unsigned char j;
while(x-- > 0)
{
for(j = 0;j < 125;j++)
{
;
}
}
}
/******************************************************************************/
/* 函数名称 : Trig_SuperSonic */
/* 函数描述 : 发出声波函数 */
/* 输入参数 : 无 */
/* 参数描述 : 无 */
/* 返回值 : 无 */
/******************************************************************************/
void Trig_SuperSonic(void)//发出声波
{
OUTPUT = 1;
delayt(1);
OUTPUT = 0;
}
/******************************************************************************/
/* 函数名称 : Measure_Distance */
/* 函数描述 : 计算距离函数 */
/* 输入参数 : 无 */
/* 参数描述 : 无 */
/* 返回值 : 无 */
/******************************************************************************/
long Measure_Distance(void)
{
unsigned int time;
OUTPUT = 0;
EA = 1;
T2MOD = 0X00;
T2CON = 0x00; //定时器12位工作模式 自动重装
while(1)
{
EA = 0;
Trig_SuperSonic();
while(INPUT == 0);
succeed_flag = 0;
EA = 1;
EX0 = 1;
TH2 = 0;
TL2 = 0;
TR2 = 1; //开启定时器
delayt(10);
TR2 = 0;
EX0 = 0;
if(succeed_flag == 1)
{
time = timeH*256 + timeL;
distance = time*0.0172;
return distance;
}
else
{
distance = 0;
}
}
}
//前进
void run(void)
{
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}
//左转
void leftrun(void)
{
Right_moto_go ; //右电机往前走
Left_moto_Stop ; //左电机停止
}
void upleft()
{
Right_moto_go ; //右电机往前走
Left_moto_go ; //左电机前走
push_val_left = 10;
push_val_right = 25;
}
void downleft()
{
Left_moto_back;
Right_moto_back;
push_val_left = 10;
push_val_right = 25;
}
//右转
void rightrun(void)
{
Left_moto_go ; //左电机往前走
Right_moto_Stop ; //右电机往前走
}
void upright() //右上(右轮不动,左轮前进)
{
Right_moto_go ; //右电机往前走
Left_moto_go ; //左电机前走
push_val_left = 25;
push_val_right = 10;
}
void downright() //右下(右轮不动,左轮前进)
{
Left_moto_back;
Right_moto_back;
push_val_left = 25;
push_val_right = 10;
}
//后退
void back(void)
{
Left_moto_back ; // 左轮后退
Right_moto_back ; // 左轮后退
}
//停转
void stop(void)
{
Right_moto_Stop ; //停转
Left_moto_Stop ; //
}
//左旋转
void tleft(void)
{
Left_moto_go ; //左电机往前走
Right_moto_back ; // 左轮后退
}
//右旋转
void tright(void)
{
Left_moto_back ; //左电机往前走
Right_moto_go ; // 左轮后退
}
/************************************************************************/
// PWM调制电机转速
// 左电机调速
/*调节push_val_left的值改变电机转速,占空比*/
void pwm_out_left_moto(void)
{
if(Left_PWM_ON)
{
if(pwm_val_left<=push_val_left)
{
EN1=1;
}
else
{
EN1=0;
}
if(pwm_val_left>=32)
pwm_val_left=0;
}
else
{
EN1=0; //若未开启PWM则EN1=0 左电机 停止
}
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right<=push_val_right) //20ms内电平信号 111 111 0000 0000 0000 00
{
EN2=1; //占空比6:20
}
else
{
EN2=0;
}
if(pwm_val_right>=32)
pwm_val_right=0;
}
else
{
EN2=0; //若未开启PWM则EN2=0 右电机 停止
}
}
void setspeed()
{
switch(g_volume)
{
case 1: enMinMin();break;
case 2: enMin();break;
case 3: enMidle();break;
case 4: enMax();break;
//default:enMidle();break;
}
}
//TIMER0中断服务子函数产生PWM信号
void timer0()interrupt 1 using 2
{
TH0=0XFC; //1Ms定时
TL0=0X66;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
void exit0() interrupt 0 // 外部中断0 超声波接收
{
timeH = TH2;
timeL = TL2;
succeed_flag = 1;
EX0 = 0;
}
void timer2() interrupt 5 //定时器2
{
TF2 = 0;
TH2 = 0; //1Ms定时
TL2 = 0;
}
//pwm初始化
void pwmint(void)
{
TMOD=0X01;
TH0= 0XFC; //1ms定时
TL0= 0X66;
TR0= 1;
ET0= 1;
EA = 1; //开总中断
}
//WIFI、蓝牙初始化
void WifiInit(void)
{
SCON = 0x50; // SCON: 模式1, 8-bit UART, 使能接收
TMOD |= 0x20;
TH1=0xfd; //波特率9600 初值
TL1=0xfd;
TR1= 1;
EA = 1; //开总中断
//ES= 1; //打开
没有合适的资源?快使用搜索试试~ 我知道了~
PS2_51智能小车程序源码.rar_51连接ps2手柄_PS2_51智能小车程序_ps2手柄51_ps2智能小车_小程序 源码
共24个文件
bak:6个
obj:2个
lst:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 47 浏览量
2022-09-22
14:35:41
上传
评论
收藏 72KB RAR 举报
温馨提示
基于51单片机结合ps2手柄的智能小车程序
资源推荐
资源详情
资源评论
收起资源包目录
PS2_51智能小车程序源码.rar (24个子文件)
code
main.OBJ 29KB
bst_car.h 1KB
ps2.c 5KB
main.c 13KB
BLUETOOTH_Opt.Bak 1KB
BLUETOOTH 38KB
ps2.__i 39B
main.LST 27KB
BLUETOOTH.uvopt 75KB
BLUETOOTH_uvproj.bak 13KB
BLUETOOTH.opt.bak 1KB
main.__i 40B
Target 1.BAT 329B
BLUETOOTH.hex 11KB
BLUETOOTH_Uv2.Bak 2KB
BLUETOOTH.M51 40KB
ps2.h 951B
BLUETOOTH.plg 3KB
ps2.OBJ 13KB
BLUETOOTH_uvopt.bak 75KB
BLUETOOTH.lnp 57B
BLUETOOTH.uvproj 13KB
BLUETOOTH.Uv2.bak 2KB
ps2.LST 14KB
共 24 条
- 1
资源评论
- 天高云淡F2023-08-17资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
APei
- 粉丝: 63
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功