📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2008/02/14
** Last Version: V1.00
** Description: MicroMouse615上的无记忆功能的走迷宫实验
**
**--------------------------------------------------------------------------------------------------------
** Created By: 廖茂刚
** Created date:
** Version:
** Descriptions:
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
/*********************************************************************************************************
包含头文件
*********************************************************************************************************/
#include "hw_memmap.h"
#include "hw_ints.h"
#include "hw_types.h"
#include "interrupt.h"
#include "gpio.h"
#include "sysctl.h"
#include "Systick.h"
#include "Timer.h"
#include "Pwm.h"
#include "Type.h"
#include "Zlg7289.h"
/*********************************************************************************************************
PB端口定义
*********************************************************************************************************/
#define IRSEND_BEVEL GPIO_PIN_0 /* 驱动斜角红外的调制信号 */
#define LEFTSIDE GPIO_PIN_1 /* 左方传感器输出的信号 */
#define FRONTSIDE_L GPIO_PIN_2 /* 左前方传感器输出的信号 */
#define FRONTSIDE GPIO_PIN_3 /* 前方传感器输出的信号 */
#define FRONTSIDE_R GPIO_PIN_4 /* 右前方传感器输出的信号 */
#define RIGHTSIDE GPIO_PIN_5 /* 右方传感器输出的信号 */
/*********************************************************************************************************
PC端口定义
*********************************************************************************************************/
#define KEY GPIO_PIN_4 /* 按键连接的端口 */
/*********************************************************************************************************
PD端口定义
*********************************************************************************************************/
#define PHRA1 GPIO_PIN_0 /* 右侧步进电机的A1相 */
#define PHRA2 GPIO_PIN_1 /* 右侧步进电机的A2相 */
#define PHRB1 GPIO_PIN_2 /* 右侧步进电机的B1相 */
#define PHRB2 GPIO_PIN_3 /* 右侧步进电机的B2相 */
#define PHLA1 GPIO_PIN_4 /* 左侧步进电机的A1相 */
#define PHLA2 GPIO_PIN_5 /* 左侧步进电机的A2相 */
#define PHLB1 GPIO_PIN_6 /* 左侧步进电机的B1相 */
#define PHLB2 GPIO_PIN_7 /* 左侧步进电机的B2相 */
/*********************************************************************************************************
PE端口定义
*********************************************************************************************************/
#define IRSEND_SIDE GPIO_PIN_0 /* 驱动左前右正向红外发射 */
/*********************************************************************************************************
常量宏定义 -- 迷宫类型
*********************************************************************************************************/
#define MAZETYPE 8 /* 8: 四分之一迷宫;16: 全迷宫 */
/*********************************************************************************************************
常量宏定义--前进一个迷宫格步进电机需要走的步数
*********************************************************************************************************/
#define ONEBLOCK 125
/*********************************************************************************************************
常量宏定义--电脑鼠状态
*********************************************************************************************************/
#define STOP 0 /* 电脑鼠停止 */
#define GOAHEAD 1 /* 电脑鼠前进 */
#define TURNLEFT 3 /* 电脑鼠向左转 */
#define TURNRIGHT 4 /* 电脑鼠向右转 */
#define TURNBACK 5 /* 电脑鼠向后转 */
/*********************************************************************************************************
常量宏定义--传感器
*********************************************************************************************************/
#define LEFT 0 /* 左方传感器 */
#define FRONTL 1 /* 左前方传感器 */
#define FRONT 2 /* 前方传感器 */
#define FRONTR 3 /* 右前方传感器 */
#define RIGHT 4 /* 右方传感器 */
/*********************************************************************************************************
常量宏定义--电机状态
*********************************************************************************************************/
#define MOTORSTOP 0 /* 电机停止 */
#define WAITONESTEP 1 /* 电机暂停一步 */
#define MOTORRUN 2 /* 电机运行 */
/*********************************************************************************************************
常量宏定义--电机运行方向
*********************************************************************************************************/
#define MOTORGOAHEAD 0 /* 电机前进 */
#define MOTORGOBACK 1 /* 电机后退 */
/*********************************************************************************************************
结构体定义
*********************************************************************************************************/
struct motor {
int8 cState; /* 电机运行状态 */
int8 cDir; /* 电机运行方向 */
uint32 uiPulse; /* 电机需要转动的步数 */
uint32 uiPulseCtr; /* 电机已转动的步数 */
int32 iSpeed; /* 电机转动速度 */
};
typedef struct motor MOTOR;
/*********************************************************************************************************
定义全局变量
*********************************************************************************************************/
static MOTOR GmRight = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化右电机状态 */
static MOTOR GmLeft = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化左电机状态 */
static uint8 GucMouseState = STOP; /* 保存电脑鼠当前运行状态 */
static uint32 GuiAccelTable[300] = {0}; /* 电机加减速各阶段定时器值 */
static int32 GiMaxSpeed = 70; /* 保存允许运行的最大速度 */
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: /* A2 */
GPIOPinWrite(GPIO_PORTD_BASE,
PHRA1 | PHRA2 | PHRB1 | PHRB2,
PHRA1 | PHRA2);
break;
case 2: /* A2B1 */
GPIOPinWrite(GPIO_PORTD_BASE,
PHRA1 | PHRA2 | PHRB1 | PHRB2,
PHRA1 | PHRA2 | PHRB2);
break;
case 3: /* B1 */
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: /* A1 */
GPIOPinWrite(GPIO_PORTD_BASE,
PHRA1 | PHRA2 | PHRB1 | PHRB2,
PHRA2);
break;
case 6: /* A1B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
PHRA1 | PHRA2 | PHRB1 | PHRB2,
PHRA2 | PHRB1 | PHRB2);
break;
case 7: /* B2 */
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: /* A1B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
PHLA1 | PHLA2 | PHLB1 | PHLB2,
PHLA2 | PHLB1 | PHLB2);
break;
case 3: /* A1 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -