📄 34
字号:
} 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 + -