⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 电子鼠走迷宫无记忆源码----------------
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************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 + -