/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: Mouse_Drive.c
** Last modified Date:
** Last Version:
** Description: 电脑鼠底层驱动
**
**--------------------------------------------------------------------------------------------------------
** Created By:
** Created date:
** Version:
** Descriptions:
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
/*********************************************************************************************************
包含头文件
*********************************************************************************************************/
#include "Mouse_Drive.h"
/*********************************************************************************************************
定义全局变量
*********************************************************************************************************/
MAZECOOR GmcMouse = {0,0}; /* 保存电脑鼠当前位置坐标 */
uint8 GucMouseDir = UP; /* 保存电脑鼠当前方向 */
uint8 GucMapBlock[MAZETYPE][MAZETYPE] = {0}; /* GucMapBlock[x][y] */
/* x,横坐标;y,纵坐标; */
/* bit3~bit0分别代表左下右上 */
/* 0:该方向无路,1:该方向有路 */
static __MOTOR __GmLeft = {0, 0, 0, 0, 0}; /* 定义并初始化左电机状态 */
static __MOTOR __GmRight = {0, 0, 0, 0, 0}; /* 定义并初始化右电机状态 */
static uint8 __GucMouseState = __STOP; /* 保存电脑鼠当前运行状态 */
static uint32 __GuiAccelTable[400] = {0}; /* 电机加减速各阶段定时器值 */
static int32 __GiMaxSpeed = SEARCHSPEED; /* 保存允许运行的最大速度 */
static uint8 __GucDistance[5] = {0}; /* 记录传感器状态 */
/*********************************************************************************************************
** Function name: __delay
** Descriptions: 延时函数
** input parameters: uiD :延时参数,值越大,延时越久
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __delay (uint32 uiD)
{
for (; uiD; uiD--);
}
/*********************************************************************************************************
** Function name: __rightMotorContr
** Descriptions: 右步进电机驱动时序
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __rightMotorContr (void)
{
static int8 cStep = 0; /* 保存电机当前位置 */
switch (__GmRight.cDir) {
case __MOTORGOAHEAD: /* 向前步进 */
cStep = (cStep + 1) % 8;
break;
case __MOTORGOBACK: /* 向后步进 */
cStep = (cStep + 7) % 8;
break;
default:
break;
}
switch (cStep) {
case 0: /* A2B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2);
break;
case 1: /* B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA1 | __PHRA2);
break;
case 2: /* A1B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA1 | __PHRA2 | __PHRB2);
break;
case 3: /* A1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRB2);
break;
case 4: /* A1B1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA2 | __PHRB2);
break;
case 5: /* B1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA2);
break;
case 6: /* A2B1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRA2 | __PHRB1 | __PHRB2);
break;
case 7: /* A2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
__PHRB1 | __PHRB2);
break;
default:
break;
}
}
/*********************************************************************************************************
** Function name: __leftMotorContr
** Descriptions: 左步进电机驱动时序
** input parameters: __GmLeft.cDir :电机运行方向
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __leftMotorContr (void)
{
static int8 cStep = 0; /* 保存电机当前位置 */
switch (__GmLeft.cDir) {
case __MOTORGOAHEAD: /* 向前步进 */
cStep = (cStep + 1) % 8;
break;
case __MOTORGOBACK: /* 向后步进 */
cStep = (cStep + 7) % 8;
break;
default:
break;
}
switch (cStep) {
case 0: /* A2B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2);
break;
case 1: /* B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLB1 | __PHLB2);
break;
case 2:
评论0