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

📄 34

📁 电脑鼠走迷宫程序
💻
📖 第 1 页 / 共 4 页
字号:
    } else {
        if (GucMapBlock[GmcMouse.cX][GmcMouse.cY] != ucMap) {
            zlg7289Download(1,4,0,GucMapBlock[GmcMouse.cX][GmcMouse.cY]);
            zlg7289Download(1,5,0,ucMap);
            //while(keyCheck() == false);
        }
    }
}


/*********************************************************************************************************
** Function name:       SensorDebug
** Descriptions:        用数码管显示出传感器状态,方便调试
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void sensorDebug (void)
{
    zlg7289Download(2, 0, 0, __GucDistance[__LEFT  ]);
    zlg7289Download(2, 1, 0, __GucDistance[__FRONTL]);
    zlg7289Download(2, 2, 0, __GucDistance[__FRONT ]);
    zlg7289Download(2, 3, 0, __GucDistance[__FRONTR]);    
    zlg7289Download(2, 4, 0, __GucDistance[__RIGHT ]);    
}


/*********************************************************************************************************
** Function name:       __mazeInfDebug
** Descriptions:        用数码管显示出当前电脑鼠前进方向和坐标
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __mazeInfDebug (void)
{
    /*
     *  显示方向
     */
    switch (GucMouseDir) {
        
    case 0:
        zlg7289Download(2, 3, 0, 0x47);                                /*  向前,用F表示               */
        break;
        
    case 1:
        zlg7289Download(2, 3, 0, 0x77);                                /*  向右,用R表示               */
        break;
        
    case 2:
        zlg7289Download(2, 3, 0, 0x1f);                                /*  向后,用b表示               */
        break;
        
    case 3:
        zlg7289Download(2, 3, 0, 0x0e);                                /*  向左,用L表示               */
        break;
        
    default :
        zlg7289Download(2, 3, 0, 0x4f);                                /*  错误,用E表示               */
        break;
    }
    /*
     *  显示坐标
     */
    zlg7289Download(1, 0, 0, GmcMouse.cX / 10);
    zlg7289Download(1, 1, 0, GmcMouse.cX % 10);
    zlg7289Download(1, 6, 0, GmcMouse.cY / 10);
    zlg7289Download(1, 7, 0, GmcMouse.cY % 10);
}


/*********************************************************************************************************
** Function name:       keyCheck
** Descriptions:        读取按键
** input parameters:    无
** output parameters:   无
** Returned value:      true:  按键已按下
**                      false: 按键未按下
*********************************************************************************************************/
uint8 keyCheck (void)
{
    if (GPIOPinRead(GPIO_PORTC_BASE, __KEY) == 0) {
        __delay(50);
        while(GPIOPinRead(GPIO_PORTC_BASE, __KEY) == 0);
        return(true);
    }else {
        return(false);
    }
}


/*********************************************************************************************************
** Function name:       voltageDetect
** Descriptions:        电压检测,检测结果在7289 EX BOARD 上显示出来
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void voltageDetect (void)
{
    unsigned long ulVoltage;
    
    ADCProcessorTrigger(ADC_BASE, 0);                                   /*  处理器触发一次A/D转换       */
    while (!ADCIntStatus(ADC_BASE, 0, false));                          /*  等待转换结束                */
    ADCIntClear(ADC_BASE, 0);                                           /*  清除中断标准位              */
    ADCSequenceDataGet(ADC_BASE, 0, &ulVoltage);                        /*  读取转换结果                */
    
    ulVoltage = ulVoltage * 3000 / 1023;                                /*  计算实际检测到的电压值(mV)  */
    ulVoltage = ulVoltage * 3 + 350;                                    /*  计算电池电压值(mV)          */
    
    zlg7289Download(0,6,1,(ulVoltage % 10000) / 1000);                  /*  显示电压值整数部分,单位V   */
    zlg7289Download(0,7,0,(ulVoltage % 1000 ) / 100 );                  /*  显示电压值小数部分,单位V   */
}


/*********************************************************************************************************
** Function name:       mouseInit
** Descriptions:        对LM3S615处理器进行初始化
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void mouseInit (void)
{
    SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                    SYSCTL_XTAL_6MHZ );                                 /*  使能PLL,50M                */

    SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB );                      /*  使能GPIO B口外设            */
    SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOC );                      /*  使能GPIO C口外设            */
    SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOD );                      /*  使能GPIO D口外设            */
    SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOE );                      /*  使能GPIO E口外设            */
    __keyInit();                                                        /*  按键初始化                  */
    __sensorInit();                                                     /*  传感器初始化                */
    __stepMotorIint();                                                  /*  步进电机控制初始化          */
    __sysTickInit();                                                    /*  系统时钟初始化              */
    __ADCInit();
    GucMapBlock[0][0] = 0x01;
}


/*********************************************************************************************************
** Function name:       __sensorInit
** Descriptions:        传感器控制初始化
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __sensorInit (void)
{
    /*
     *  设置连接到传感器信号输出脚的I/O口为输入模式
     */
    GPIODirModeSet(GPIO_PORTB_BASE,
                   __LEFTSIDE    |
                   __FRONTSIDE_L |
                   __FRONTSIDE   |
                   __FRONTSIDE_R |
                   __RIGHTSIDE,  
                   GPIO_DIR_MODE_IN);
    /*
     *  用PWM驱动红外线发射头产生调制的红外线信号
     */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);                          /*  使能PWM模块                 */
    SysCtlPWMClockSet(SYSCTL_PWMDIV_1);                                 /*  PWM时钟配置:不分频         */
    /*
     *  初始化PWM2,该PWM驱动斜角红外发射头
     */
    GPIOPinTypePWM(GPIO_PORTB_BASE, __IRSEND_BEVEL);                    /*  PB0配置为PWM功能            */
    PWMGenConfigure(PWM_BASE, PWM_GEN_1,                                /*  配置PWM发生器1              */
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);       /*  加计数,立即更新            */

    PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, true);                      /*  使能PWM2输出                */
    PWMGenDisable(PWM_BASE, PWM_GEN_1);                                 /*  禁止PWM发生器1              */
    /*
     *  初始化PWM4,该PWM驱动左前右正方向红外发射头
     */
    GPIOPinTypePWM(GPIO_PORTE_BASE, __IRSEND_SIDE);                     /*  PE0配置为PWM功能            */
    PWMGenConfigure(PWM_BASE, PWM_GEN_2,                                /*  配置PWM发生器2              */
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);       /*  加计数,立即更新            */

    PWMOutputState(PWM_BASE, PWM_OUT_4_BIT, true);                      /*  使能PWM4输出                */
    PWMGenDisable(PWM_BASE, PWM_GEN_2);                                 /*  禁止PWM发生器2              */
}


/*********************************************************************************************************
** Function name:       __stepMotorIint
** Descriptions:        步进电机控制初始化
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __stepMotorIint (void)
{
    uint16 n = 0;
    /*
     *  设置驱动步进电机的八个I/O口为输出模式
     */
    GPIODirModeSet(GPIO_PORTD_BASE,
                   __PHRA1 |
                   __PHRA2 |
                   __PHRB1 |
                   __PHRB2 |
                   __PHLA1 |
                   __PHLA2 |
                   __PHLB1 |
                   __PHLB2,
                   GPIO_DIR_MODE_OUT);
    /*
     *  对左右电机转动的位置初始化
     */
    GPIOPinWrite(GPIO_PORTD_BASE,
                 __PHRA1 | __PHRA2 | __PHRB1 | __PHRB2,
                 __PHRA1 | __PHRA2 | __PHRB1 | __PHRB2);
    
    GPIOPinWrite(GPIO_PORTD_BASE,
                 __PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
                 __PHLA1 | __PHLA2 | __PHLB1 | __PHLB2);
    /*
     *  初始化加速/减速时定时器加载值的数据表
     */
    __GuiAccelTable[0] = 2050000;
    __GuiAccelTable[1] = 849110;
    for(n = 2; n < 400; n++) {
        __GuiAccelTable[n] = __GuiAccelTable[n - 1] - (2 * __GuiAccelTable[n - 1] / (4 * n + 1));
    }
    /*
     *  初始化定时器0,用来控制右电机的转速
     */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                       /*  使能定时器0模块             */
    TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);                  /*  配置为32位周期计数模式      */
    TimerLoadSet(TIMER0_BASE, TIMER_A, __GuiAccelTable[0]);             /*  设置定时时间                */
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);                    /*  设置为溢出中断              */

    IntEnable(INT_TIMER0A);                                             /*  使能定时器0中断             */
    TimerEnable(TIMER0_BASE, TIMER_A);                                  /*  使能定时器0                 */
    
    /*
     *  初始化定时器1,用来控制电机的转速
     */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);                       /*  使能定时器1模块             */
    TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER);                  /*  配置为32位周期计数模式      */
    TimerLoadSet(TIMER1_BASE, TIMER_A, __GuiAccelTable[0]);             /*  设置定时时间                */
    TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);                    /*  设置为溢出中断              */

    IntEnable(INT_TIMER1A);                                             /*  使能定时器1中断             */
    TimerEnable(TIMER1_BASE, TIMER_A);                                  /*  使能定时器1                 */
}


/*********************************************************************************************************
** Function name:       __keyInit
** Descriptions:        对连接按键的GPIO口初始化
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __keyInit (void)
{
    GPIODirModeSet(GPIO_PORTC_BASE, __KEY, GPIO_DIR_MODE_IN);           /*  设置按键口为输入            */
}


/*********************************************************************************************************
** Function name:       __sysTickInit
** Descriptions:        系统节拍定时器初始化。
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __sysTickInit (void)
{
    SysTickPeriodSet(SysCtlClockGet() / 1600);                          /*  设置定时时钟为1ms           */
    SysTickEnable();                                                    /*  使能系统时钟                */
    SysTickIntEnable();                                                 /*  使能系统时钟中断            */
}


/*********************************************************************************************************
** Function name:       __ADCInit
** Descriptions:        对连接按键的GPIO口初始化
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void __ADCInit (void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);                          /*  使能ADC模块                 */
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);                         /*  125KSps采样率               */

    ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);        /*  序列0为处理器触发,优先级为0*/
    ADCSequenceStepConfigure(ADC_BASE, 0, 0,
                             ADC_CTL_CH0  | 
                             ADC_CTL_IE   | 
                             ADC_CTL_END);                              /*  配置采样序列发生器的步进    */
    
    ADCHardwareOversampleConfigure(ADC_BASE, 16);                       /*  设置ADC采样平均控制寄存器   */
    ADCSequenceEnable(ADC_BASE, 0);                                     /*  使能采样序列0               */
}


/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -