?? 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 + -