電腦鼠程序代碼_第1頁
電腦鼠程序代碼_第2頁
電腦鼠程序代碼_第3頁
電腦鼠程序代碼_第4頁
電腦鼠程序代碼_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

電腦鼠程序代碼電腦鼠程序代碼電腦鼠程序代碼電腦鼠程序代碼編制僅供參考審核批準生效日期地址:電話:傳真:郵編:/****************************************Copyright(c)******************************************************GuangzhouZHIYUANelectronicsCo.,LTD.****Info---------------------------------------------------------------------------------**FileName:**LastmodifiedDate:2008/02/14**LastVersion:**Description:MicroMouse615上的無記憶功能的走迷宮實驗****--------------------------------------------------------------------------------------------------------**CreatedBy:廖茂剛**Createddate:**Version:**Descriptions:****--------------------------------------------------------------------------------------------------------**Modifiedby:**Modifieddate:**Version:**Description:***********************************************************************************************************//*********************************************************************************************************包含頭文件*********************************************************************************************************/#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""/*********************************************************************************************************PB端口定義紅外線傳感器*********************************************************************************************************/#defineIRSEND_BEVELGPIO_PIN_0/*驅動斜角紅外的調(diào)制信號*/#defineLEFTSIDEGPIO_PIN_1/*左方傳感器輸出的信號*/#defineFRONTSIDE_LGPIO_PIN_2/*左前方傳感器輸出的信號*/#defineFRONTSIDEGPIO_PIN_3/*前方傳感器輸出的信號*/#defineFRONTSIDE_RGPIO_PIN_4/*右前方傳感器輸出的信號*/#defineRIGHTSIDEGPIO_PIN_5/*右方傳感器輸出的信號*//*********************************************************************************************************PC端口定義KEY鍵*********************************************************************************************************/#defineKEYGPIO_PIN_4/*按鍵連接的端口*//*********************************************************************************************************PD端口定義步進電機*********************************************************************************************************/#definePHRA1GPIO_PIN_0/*右側步進電機的A1相*/#definePHRA2GPIO_PIN_1/*右側步進電機的A2相*/#definePHRB1GPIO_PIN_2/*右側步進電機的B1相*/#definePHRB2GPIO_PIN_3/*右側步進電機的B2相*/#definePHLA1GPIO_PIN_4/*左側步進電機的A1相*/#definePHLA2GPIO_PIN_5/*左側步進電機的A2相*/#definePHLB1GPIO_PIN_6/*左側步進電機的B1相*/#definePHLB2GPIO_PIN_7/*左側步進電機的B2相*//*********************************************************************************************************PE端口定義傳感器紅外發(fā)射驅動左前右正向*********************************************************************************************************/#defineIRSEND_SIDEGPIO_PIN_0/*驅動左前右正向紅外發(fā)射*//*********************************************************************************************************常量宏定義--迷宮類型*********************************************************************************************************/#defineMAZETYPE8/*8:四分之一迷宮;16:全迷宮*//*********************************************************************************************************常量宏定義--前進一個迷宮格步進電機需要走的步數(shù)*********************************************************************************************************/#defineONEBLOCK125/*********************************************************************************************************常量宏定義--電腦鼠狀態(tài)*********************************************************************************************************/#defineSTOP0/*電腦鼠停止*/#defineGOAHEAD1/*電腦鼠前進*/#defineTURNLEFT3/*電腦鼠向左轉*/#defineTURNRIGHT4/*電腦鼠向右轉*/#defineTURNBACK5/*電腦鼠向后轉*//*********************************************************************************************************常量宏定義--傳感器*********************************************************************************************************/#defineLEFT0/*左方傳感器*/#defineFRONTL1/*左前方傳感器*/#defineFRONT2/*前方傳感器*/#defineFRONTR3/*右前方傳感器*/#defineRIGHT4/*右方傳感器*//*********************************************************************************************************常量宏定義--電機狀態(tài)*********************************************************************************************************/#defineMOTORSTOP0/*電機停止*/#defineWAITONESTEP1/*電機暫停一步*/#defineMOTORRUN2/*電機運行*//*********************************************************************************************************常量宏定義--電機運行方向*********************************************************************************************************/#defineMOTORGOAHEAD0/*電機前進*/#defineMOTORGOBACK1/*電機后退*//*********************************************************************************************************結構體定義*********************************************************************************************************/structmotor{int8cState;/*電機運行狀態(tài)*/int8cDir;/*電機運行方向*/uint32uiPulse;/*電機需要轉動的步數(shù)*/uint32uiPulseCtr;/*電機已轉動的步數(shù)*/int32iSpeed;/*電機轉動速度*/};typedefstructmotorMOTOR;/*********************************************************************************************************定義全局變量*********************************************************************************************************/staticMOTORGmRight={MOTORSTOP,MOTORGOAHEAD,0,0,0};/*定義并初始化右電機狀態(tài)*/staticMOTORGmLeft={MOTORSTOP,MOTORGOAHEAD,0,0,0};/*定義并初始化左電機狀態(tài)*/staticuint8GucMouseState=STOP;/*保存電腦鼠當前運行狀態(tài)*/staticuint32GuiAccelTable[300]={0};/*電機加減速各階段定時器值*/staticint32GiMaxSpeed=70;/*保存允許運行的最大速度*/staticuint8GucDistance[5]={0};/*記錄傳感器狀態(tài)*//***********************************************************************************************************Functionname:delay**Descriptions:延時函數(shù)**inputparameters:uiD:延時參數(shù),值越大,延時越久**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voiddelay(uint32uiD){for(;uiD;uiD--);}/***********************************************************************************************************Functionname:rightMotorContr**Descriptions:右步進電機驅動時序**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidrightMotorContr(void){staticint8cStep=0;/*保存電機當前位置*/switch{caseMOTORGOAHEAD:/*向前步進*/cStep=(cStep+1)%8;break;caseMOTORGOBACK:/*向后步進*/cStep=(cStep+7)%8;break;default:break;}switch(cStep){case0:/*A2B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA1|PHRA2|PHRB1|PHRB2);break;case1:/*A2*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA1|PHRA2);break;case2:/*A2B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA1|PHRA2|PHRB2);break;case3:/*B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRB2);break;case4:/*A1B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA2|PHRB2);break;case5:/*A1*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA2);break;case6:/*A1B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRA2|PHRB1|PHRB2);break;case7:/*B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,PHRB1|PHRB2);break;default:break;}}/***********************************************************************************************************Functionname:leftMotorContr**Descriptions:左步進電機驅動時序**inputparameters::電機運行方向**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidleftMotorContr(void){staticint8cStep=0;/*保存電機當前位置*/switch{caseMOTORGOAHEAD:/*向前步進*/cStep=(cStep+1)%8;break;caseMOTORGOBACK:/*向后步進*/cStep=(cStep+7)%8;break;default:break;}switch(cStep){case0:/*A2B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA1|PHLA2|PHLB1|PHLB2);break;case1:/*B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLB1|PHLB2);break;case2:/*A1B2*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA2|PHLB1|PHLB2);break;case3:/*A1*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA2);break;case4:/*A1B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA2|PHLB2);break;case5:/*B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLB2);break;case6:/*A2B1*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA1|PHLA2|PHLB2);break;case7:/*A2*/GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,PHLA1|PHLA2);break;default:break;}}/***********************************************************************************************************Functionname:speedContrR**Descriptions:右電機速度調(diào)節(jié)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidspeedContrR(void){int32iDPusle;iDPusle=-;/*統(tǒng)計電機還剩余的步數(shù)*/if(iDPusle<={;}else{/*非減速區(qū)間,則加速到最大值*/if<GiMaxSpeed){++;}else{;}}if<0){/*設置速度下限*/=0;}TimerLoadSet(TIMER0_BASE,TIMER_A,GuiAccelTable[]);/*設置定時時間*/}/***********************************************************************************************************Functionname:speedContrL**Descriptions:左電機速度調(diào)節(jié)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidspeedContrL(void){int32iDPusle;iDPusle=-;/*統(tǒng)計電機還剩余的步數(shù)*/if(iDPusle<={;}else{/*非減速區(qū)間,則加速到最大值*/if<GiMaxSpeed){++;}}if<0){/*設置速度下限*/=0;}TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[]);/*設置定時時間*/}/***********************************************************************************************************Functionname:Timer0A_ISR**Descriptions:Timer0中斷服務函數(shù)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidTimer0A_ISR(void){staticint8n=0,m=0;TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);/*清除定時器0中斷。*/switch{caseMOTORSTOP:/*停止,同時清零速度和脈沖值*/=0;=0;=0;break;caseWAITONESTEP:/*暫停一步*/=MOTORRUN;break;caseMOTORRUN:/*電機運行*/if(GucMouseState==GOAHEAD){/*根據(jù)傳感器狀態(tài)微調(diào)電機位置*/if(GucDistance[FRONTL]&&(GucDistance[FRONTR]==0)){/*左前方有障礙,且前方無擋板*/if(n==1){=WAITONESTEP;/*下一次電機暫停*/}n++;n%=2;}else{n=0;}if((GucDistance[RIGHT]==1)&&(GucDistance[LEFT]==0)){/*離右擋板太遠,且左方無擋板*/if(m==3){=WAITONESTEP;/*下一次電機暫停*/}m++;m%=6;}else{m=0;}}rightMotorContr();/*推動電機轉動一步*/break;default:break;}/**是否完成任務判斷*/if!=MOTORSTOP){++;/*運行脈沖計數(shù)*/speedContrR();/*速度調(diào)節(jié)*/if>={=MOTORSTOP;=0;=0;=0;}}}/***********************************************************************************************************Functionname:Timer1A_ISR**Descriptions:Timer1中斷服務函數(shù)**inputparameters::驅動步進電機的時序狀態(tài)**:步進電機運動的方向**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidTimer1A_ISR(void){staticint8n=0,m=0;TimerIntClear(TIMER1_BASE,TIMER_TIMA_TIMEOUT);/*清除定時器1中斷。*/switch{caseMOTORSTOP:/*停止,同時清零速度和脈沖值*/=0;=0;=0;break;caseWAITONESTEP:/*暫停一步*/=MOTORRUN;break;caseMOTORRUN:/*電機運行*/if(GucMouseState==GOAHEAD){/*根據(jù)傳感器狀態(tài)微調(diào)電機位置*/if(GucDistance[FRONTR]&&(GucDistance[FRONTL]==0)){if(n==1){=WAITONESTEP;}n++;n%=2;}else{n=0;}if((GucDistance[LEFT]==1)&&(GucDistance[RIGHT]==0)){if(m==3){=WAITONESTEP;}m++;m%=6;}else{m=0;}}leftMotorContr();/*電機驅動程序*/break;default:break;}/**是否完成任務判斷*/if!=MOTORSTOP){++;/*運行脈沖計數(shù)*/speedContrL();/*速度調(diào)節(jié)*/if>={=MOTORSTOP;=0;=0;=0;}}}/***********************************************************************************************************Functionname:irSendFreq**Descriptions:發(fā)送紅外線。**inputparameters:uiFreq:紅外線調(diào)制頻率**cNumber:選擇需要設置的PWM模塊**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidirSendFreq(uint32uiFreq,int8cNumber){uiFreq=SysCtlClockGet()/uiFreq;switch(cNumber){case1:PWMGenPeriodSet(PWM_BASE,PWM_GEN_1,uiFreq);/*設置PWM發(fā)生器1的周期*/PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,uiFreq/2);/*設置PWM2輸出的脈沖寬度*/PWMGenEnable(PWM_BASE,PWM_GEN_1);/*使能PWM發(fā)生器1*/break;case2:PWMGenPeriodSet(PWM_BASE,PWM_GEN_2,uiFreq);/*設置PWM發(fā)生器2的周期*/PWMPulseWidthSet(PWM_BASE,PWM_OUT_4,uiFreq/2);/*設置PWM4輸出的脈沖寬度*/PWMGenEnable(PWM_BASE,PWM_GEN_2);/*使能PWM發(fā)生器2*/break;default:break;}}/***********************************************************************************************************Functionname:irCheck**Descriptions:紅外線傳感器檢測。**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidirCheck(void){staticuint8ucState=0;staticuint8ucIRCheck;switch(ucState){case0:irSendFreq(32200,2);/*探測左右兩側近距*/irSendFreq(35000,1);/*驅動斜角上的傳感器檢測*/break;case1:ucIRCheck=GPIOPinRead(GPIO_PORTB_BASE,0x3e);/*讀取傳感器狀態(tài)*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/PWMGenDisable(PWM_BASE,PWM_GEN_1);/*禁止PWM發(fā)生器1*/if(ucIRCheck&RIGHTSIDE){GucDistance[RIGHT]&=0xfd;}else{GucDistance[RIGHT]|=0x02;}if(ucIRCheck&LEFTSIDE){GucDistance[LEFT]&=0xfd;}else{GucDistance[LEFT]|=0x02;}if(ucIRCheck&FRONTSIDE_R){GucDistance[FRONTR]=0x00;}else{GucDistance[FRONTR]=0x01;}if(ucIRCheck&FRONTSIDE_L){GucDistance[FRONTL]=0x00;}else{GucDistance[FRONTL]=0x01;}break;case2:irSendFreq(36000,2);/*驅動檢測左前右三個方向遠距*/break;case3:ucIRCheck=GPIOPinRead(GPIO_PORTB_BASE,0x2a);/*讀取傳感器狀態(tài)*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/break;case4:irSendFreq(36000,2);/*重復檢測左前右三個方向遠距*/break;case5:ucIRCheck&=GPIOPinRead(GPIO_PORTB_BASE,0x2a);/*讀取傳感器狀態(tài)*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/if(ucIRCheck&RIGHTSIDE){GucDistance[RIGHT]&=0xfe;}else{GucDistance[RIGHT]|=0x01;}if(ucIRCheck&LEFTSIDE){GucDistance[LEFT]&=0xfe;}else{GucDistance[LEFT]|=0x01;}if(ucIRCheck&FRONTSIDE){GucDistance[FRONT]&=0xfe;}else{GucDistance[FRONT]|=0x01;}break;default:break;}ucState=(ucState+1)%6;/*循環(huán)檢測*/}/***********************************************************************************************************Functionname:mazeSearch**Descriptions:迷宮搜索,若發(fā)現(xiàn)分支路或者前方有擋板則退出**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmazeSearch(void){int8cL=0,cR=0;/**設定運行任務*/GucMouseState=GOAHEAD;=MOTORGOAHEAD;=MOTORGOAHEAD;=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;=MOTORRUN;=MOTORRUN;while!=MOTORSTOP){if(GucDistance[FRONT]){/*前方有墻*//**設置繼續(xù)前進的步數(shù),以實現(xiàn)能停止在單元格中心的目的*/=+70;=+70;/**反復檢測前方傳感器的狀態(tài),以消除誤判*/while(GucDistance[FRONT]){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設定電機運行任務*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}if(cL){/*是否允許檢測左邊*/if((GucDistance[LEFT]&0x01)==0){/*左邊有支路*//**設置繼續(xù)前進的步數(shù),以實現(xiàn)能停止在單元格中心的目的*/=+74;=+74;/**反復檢測前方傳感器的狀態(tài),以消除誤判*/while((GucDistance[LEFT]&0x01)==0){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設定電機運行任務*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}}else{/*左邊有墻時開始允許檢測左邊*/if(GucDistance[LEFT]&0x01){cL=1;}}if(cR){/*是否允許檢測右邊*/if((GucDistance[RIGHT]&0x01)==0){/*右邊有支路*//**設置繼續(xù)前進的步數(shù),以實現(xiàn)能停止在單元格中心的目的*/=+74;=+74;/**反復檢測前方傳感器的狀態(tài),以消除誤判*/while((GucDistance[RIGHT]&0x01)==0){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設定電機運行任務*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}}else{if(GucDistance[RIGHT]&0x01){/*右邊有墻時開始允許檢測右邊*/cR=1;}}}End:;}/***********************************************************************************************************Functionname:mouseTurnright**Descriptions:右轉**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnright(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNRIGHT;/*標記電腦鼠的運行狀態(tài)*//**開始右轉*/=MOTORGOBACK;/*控制右輪向后轉動*/=41;/*設定右輪轉動的步數(shù)*/=MOTORGOAHEAD;/*控制左輪向前轉動*/=41;/*設定左輪轉動的步數(shù)*/=MOTORRUN;/*使能右輪轉動*/=MOTORRUN;/*使能左輪轉動*//**等待右轉完成*/while!=MOTORSTOP);while!=MOTORSTOP);}/***********************************************************************************************************Functionname:mouseTurnleft**Descriptions:左轉**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnleft(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNLEFT;/*標記電腦鼠的運行狀態(tài)*//**開始左轉*/=MOTORGOAHEAD;/*控制右輪向前轉動*/=41;/*設定右輪轉動的步數(shù)*/=MOTORGOBACK;/*控制左輪向后轉動*/=41;/*設定左輪轉動的步數(shù)*/=MOTORRUN;/*使能右輪轉動*/=MOTORRUN;/*使能左輪轉動*//**等待左轉完成*/while!=MOTORSTOP);while!=MOTORSTOP);}/***********************************************************************************************************Functionname:mouseTurnback**Descriptions:后轉**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnback(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNBACK;/**開始后轉*/=MOTORGOBACK;=81;=MOTORGOAHEAD;=81;=MOTORRUN;=MOTORRUN;/**等待后轉完成*/while!=MOTORSTOP);while!=MOTORSTOP);}/***********************************************************************************************************Functionname:keyCheck**Descriptions:讀取按鍵**inputparameters:無**outputparameters:無**Returnedvalue:true:按鍵已按下**false:按鍵未按下*********************************************************************************************************/uint8keyCheck(void){if(GPIOPinRead(GPIO_PORTC_BASE,KEY)==0){delay(50);while(GPIOPinRead(GPIO_PORTC_BASE,KEY)==0);return(true);}else{return(false);}}/***********************************************************************************************************Functionname:SysTick_ISR**Descriptions:定時中斷掃描。**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidSysTick_ISR(void){staticint32iL=0,iR=0;/**如果左電機長時間停止,則斷電*/if==MOTORSTOP){iL++;}else{iL=0;}if(iL>=500){GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,0x00);}/**如果右電機長時間停止,則斷電*/if==MOTORSTOP){iR++;}else{iR=0;}if(iR>=500){GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,0x00);}/**紅外線檢測*/irCheck();}/***********************************************************************************************************Functionname:wallCheck**Descriptions:根據(jù)傳感器檢測結果判斷是否存在墻壁**inputparameters:無**outputparameters:無**Returnedvalue:ucWall:低三位從左到右一次代表左前右。1為有墻,0為沒墻。*********************************************************************************************************/uint8wallCheck(void){uint8ucWall=0;if(GucDistance[LEFT]&0x01){ucWall|=0x04;}else{ucWall&=~0x04;}if(GucDistance[FRONT]&0x01){ucWall|=0x02;}else{ucWall&=~0x02;}if(GucDistance[RIGHT]&0x01){ucWall|=0x01;}else{ucWall&=~0x01;}return(ucWall);}/***********************************************************************************************************Functionname:sensorInit**Descriptions:傳感器控制初始化**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidsensorInit(void){/**設置連接到傳感器信號輸出腳的I/O口為輸入模式*/GPIODirModeSet(GPIO_PORTB_BASE,LEFTSIDE|FRONTSIDE_L|FRONTSIDE|FRONTSIDE_R|RIGHTSIDE,GPIO_DIR_MODE_IN);/**用PWM驅動紅外線發(fā)射頭產(chǎn)生調(diào)制的紅外線信號*/SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);/*使能PWM模塊*/SysCtlPWMClockSet(SYSCTL_PWMDIV_1);/*PWM時鐘配置:不分頻*//**初始化PWM2,該PWM驅動斜角紅外發(fā)射頭*/GPIOPinTypePWM(GPIO_PORTB_BASE,IRSEND_BEVEL);/*PB0配置為PWM功能*/PWMGenConfigure(PWM_BASE,PWM_GEN_1,/*配置PWM發(fā)生器1*/PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);/*加計數(shù),立即更新*/PWMOutputState(PWM_BASE,PWM_OUT_2_BIT,true);/*使能PWM2輸出*/PWMGenDisable(PWM_BASE,PWM_GEN_1);/*禁止PWM發(fā)生器1*//**初始化PWM4,該PWM驅動左前右正方向紅外發(fā)射頭*/GPIOPinTypePWM(GPIO_PORTE_BASE,IRSEND_SIDE);/*PE0配置為PWM功能*/PWMGenConfigure(PWM_BASE,PWM_GEN_2,/*配置PWM發(fā)生器2*/PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);/*加計數(shù),立即更新*/PWMOutputState(PWM_BASE,PWM_OUT_4_BIT,true);/*使能PWM4輸出*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/}/***********************************************************************************************************Functionname:stepMotorIint**Descriptions:步進電機控制初始化**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidstepMotorIint(void){uint16n=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);/**初始化加速/減速時定時器加載值的數(shù)據(jù)表*/GuiAccelTable[0]=2236068;GuiAccelTable[1]=926179;for(n=2;n<300;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位周期計數(shù)模式*/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位周期計數(shù)模式*/TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[0]);/*設置定時時間*/TimerIntEnable(TIMER1_BASE,TIMER_TIMA_TIMEOUT);/*設置為溢出中斷*/IntEnable(INT_TIMER1A);/*使能定時器1中斷*/TimerEnable(TIMER1_BASE,TIMER_A);/*使能定時器1*/}/***********************************************************************************************************Functionname:keyInit**Descriptions:對連接按鍵的GPIO口初始化**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidkeyInit

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論