标题:
42步进电机蓝牙控制模块化编程
[打印本页]
作者:
HeChunmu
时间:
2019-8-1 16:47
标题:
42步进电机蓝牙控制模块化编程
感谢51黑论坛给予我的帮助,我自己总结了前辈们的代码,写了一个42步进电机蓝牙控制的代码,能实现前后左右控制;寻迹,避障lcd1602显示功能还不齐全。
170ABB2975F0D0AC8A842E1B78957C1D.png
(240.11 KB, 下载次数: 31)
下载附件
2019-8-1 16:44 上传
单片机源程序如下:
#include "42moto.h"
#include "lcd1602.h"
/**********************************************
* IO设置
*
*
*************************************************/
/**************红外引脚定义*******************/
sbit HY_R = P1^4; //右边红外传感器定义
sbit HY_Z = P1^5; //中间红外传感器定义
sbit HY_L = P1^6; //左边红外传感器定义
/*************寻迹引脚定义*******************/
sbit XJ_R = P1^0; //右边寻迹传感器定义
sbit XJ_Z = P1^1; //中间寻迹传感器定义
sbit XJ_L = P1^2; //左边寻迹传感器定义
/************电机控制引脚定义*****************/
//sbit ENA_R = P1^2; // 右电机使能
sbit PUL_L = P2^0; // 左电机脉冲
sbit DIR_L = P2^2; // 左电机方向
sbit PUL_R = P2^3; // 右电机脉冲
sbit DIR_R = P2^4; // 右电机方向
//sbit ENA_L = P2^2; // 左电机使能
#define MotorTabNum 5
unsigned char T0_NUM;
signed char g_MotorNum = 0;
unsigned char MotorTab[6] = {6, 5, 4, 3, 2, 1};
void T0_Init();//中断定义
void delay(xms);
void hongwai(void);
void xunji(void);
/********************************延时函数***********************************************************/
void delay(xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/*************定时器初始化***********************************************************/
void T0_Init()
{
TMOD = 0x01;
TH0 = (65535-100)/256; // 1ms
TL0 = (65535-100)%256;
EA = 1;
ET0 = 1;
}
////延时n毫秒
//void delay_ms(unsigned int n)
//{
// unsigned int i=0,j=0;
// for(i=0;i<n;i++)
// for(j=0;j<123;j++);
//}
/*************定时器中断************************/
void T0_time() interrupt 1
{
// TR0 = 0;
TH0 = (65535-100)/256;
TL0 = (65535-100)%256;
T0_NUM++;
if(T0_NUM >= MotorTab[g_MotorNum]) // 增加按键g_MotorNum++ 减小按键g_MotorNum--
{
T0_NUM = 0;
// PUL_R =PUL_R^0x01; // 输出脉冲
// PUL_L =PUL_L^0x01; // 输出脉冲
}
}
/******42步进电机运动函数*******************************
DIR_R ^= 1; //=1后退
DIR_R ^= 1;
DIR_L ^= 0; //=0前进
DIR_L ^= 0;
因为两边电机的安装是一样的,所以DIR的方向有所不同
可以根据该电机接线的方式改变电机的方向
***********************************************/
void RUN(void) //前进
{
DIR_R ^= 0; //右前进
DIR_L ^= 0; //左后退就是前进
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
void RIGHT(void)//右转
{
DIR_L ^= 1; //右转,就让左边的电机前进,右边后退
DIR_R ^= 0; //右前进
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
void LEFT(void) //左转
{
DIR_L ^= 0; //左后退就是前进
DIR_R ^= 1; //左转,就让右边前进,左边后退
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
void BACK(void) //后退
{
DIR_R ^= 1; //这里就和前进相反就可以了
DIR_L ^= 1;
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
void STOP(void) //停止
{
EA=0; //让所有中断都关闭,
PUL_R =PUL_R^0x00; // 输出脉冲
PUL_L =PUL_L^0x00; // 输出脉冲
}
/********************按键控制*********************/
//void anjian()
//{
//
//}
/********************寻迹传感控制*********************/
void hongwai(void)
{
//有信号为0 没有信号为1
//if(HY_R==1&&HY_Z==1&&HY_L==1)//都没有信号就前进
if(HY_R==1&&HY_Z==1&&HY_L==1)//都没有信号就前进
{
EA=1;
//lcd_init1(); //显示RUN运行
DIR_R ^= 0; //右前进
DIR_L ^= 0; //左后退就是前进
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
TR0 = 1;
}
else
{
//有信号为0 没有信号为1
if(HY_R==0&&HY_Z==1&&HY_L==1)//右边有信号说明右障碍物,所以电机停止1S,然后后退1S,左电机后退,右电机转动
{
// lcd_init2();
DIR_L ^= 1; //右转,就让左边的电机前进,右边后退
DIR_R ^= 0; //右前进
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
//有信号为0 没有信号为1
if(HY_R==1&&HY_Z==1&&HY_L==0)//左边有信号说明左障碍物,所以电机停止1S,然后后退1S,右电机后退,左电机转动
{
// lcd_init3();
DIR_L ^= 0; //右转,就让左边的电机前进,右边后退
DIR_R ^= 1; //右前进
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
//有信号为0 没有信号为1
if(HY_R==1&&HY_Z==0&&HY_L==1)//中间有信号就后退
{
// lcd_init4();
DIR_R ^= 1; //这里就和前进相反就可以了
DIR_L ^= 1;
PUL_R =PUL_R^0x01; // 输出脉冲
PUL_L =PUL_L^0x01; // 输出脉冲
}
//有信号为0 没有信号为1
if(HY_R==0&&HY_Z==0&&HY_L==0)//当然全部有信号就停止
{
//lcd_init5();
EA=0;
}
}
}
/*************************寻迹传感控制**********************/
void xunji(void)
{
//有信号为0 没有信号为1
//if(HY_R==1&&HY_Z==1&&HY_L==1)//都没有信号就前进
if(XJ_R==1&&XJ_Z==1&&XJ_L==1)//都没有信号就前进
{
EA=1;
lcd_init1(); //显示RUN运行
delay(10); // 软件延时消抖
RUN();
TR0 = 1;
}
else
{
//有信号为0 没有信号为1
if(XJ_R==0&&XJ_Z==1&&XJ_L==1)//右边有信号说明右障碍物,所以电机停止1S,然后后退1S,左电机后退,右电机转动
{
lcd_init2();
delay(10); // 软件延时消抖
RIGHT();
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
42步进电机模块化2LY.rar
(55.16 KB, 下载次数: 22)
2019-8-1 16:43 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
HeChunmu
时间:
2019-8-1 17:00
小车的 照片
作者:
asp65
时间:
2019-8-2 00:09
好用,学习蓝牙的好方法。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1