版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
電腦鼠程序代碼電腦鼠程序代碼電腦鼠程序代碼電腦鼠程序代碼編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:/****************************************Copyright(c)******************************************************GuangzhouZHIYUANelectronicsCo.,LTD.****Info---------------------------------------------------------------------------------**FileName:**LastmodifiedDate:2008/02/14**LastVersion:**Description:MicroMouse615上的無記憶功能的走迷宮實(shí)驗(yàn)****--------------------------------------------------------------------------------------------------------**CreatedBy:廖茂剛**Createddate:**Version:**Descriptions:****--------------------------------------------------------------------------------------------------------**Modifiedby:**Modifieddate:**Version:**Description:***********************************************************************************************************//*********************************************************************************************************包含頭文件*********************************************************************************************************/#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""/*********************************************************************************************************PB端口定義紅外線傳感器*********************************************************************************************************/#defineIRSEND_BEVELGPIO_PIN_0/*驅(qū)動(dòng)斜角紅外的調(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端口定義步進(jìn)電機(jī)*********************************************************************************************************/#definePHRA1GPIO_PIN_0/*右側(cè)步進(jìn)電機(jī)的A1相*/#definePHRA2GPIO_PIN_1/*右側(cè)步進(jìn)電機(jī)的A2相*/#definePHRB1GPIO_PIN_2/*右側(cè)步進(jìn)電機(jī)的B1相*/#definePHRB2GPIO_PIN_3/*右側(cè)步進(jìn)電機(jī)的B2相*/#definePHLA1GPIO_PIN_4/*左側(cè)步進(jìn)電機(jī)的A1相*/#definePHLA2GPIO_PIN_5/*左側(cè)步進(jìn)電機(jī)的A2相*/#definePHLB1GPIO_PIN_6/*左側(cè)步進(jìn)電機(jī)的B1相*/#definePHLB2GPIO_PIN_7/*左側(cè)步進(jìn)電機(jī)的B2相*//*********************************************************************************************************PE端口定義傳感器紅外發(fā)射驅(qū)動(dòng)左前右正向*********************************************************************************************************/#defineIRSEND_SIDEGPIO_PIN_0/*驅(qū)動(dòng)左前右正向紅外發(fā)射*//*********************************************************************************************************常量宏定義--迷宮類型*********************************************************************************************************/#defineMAZETYPE8/*8:四分之一迷宮;16:全迷宮*//*********************************************************************************************************常量宏定義--前進(jìn)一個(gè)迷宮格步進(jìn)電機(jī)需要走的步數(shù)*********************************************************************************************************/#defineONEBLOCK125/*********************************************************************************************************常量宏定義--電腦鼠狀態(tài)*********************************************************************************************************/#defineSTOP0/*電腦鼠停止*/#defineGOAHEAD1/*電腦鼠前進(jìn)*/#defineTURNLEFT3/*電腦鼠向左轉(zhuǎn)*/#defineTURNRIGHT4/*電腦鼠向右轉(zhuǎn)*/#defineTURNBACK5/*電腦鼠向后轉(zhuǎn)*//*********************************************************************************************************常量宏定義--傳感器*********************************************************************************************************/#defineLEFT0/*左方傳感器*/#defineFRONTL1/*左前方傳感器*/#defineFRONT2/*前方傳感器*/#defineFRONTR3/*右前方傳感器*/#defineRIGHT4/*右方傳感器*//*********************************************************************************************************常量宏定義--電機(jī)狀態(tài)*********************************************************************************************************/#defineMOTORSTOP0/*電機(jī)停止*/#defineWAITONESTEP1/*電機(jī)暫停一步*/#defineMOTORRUN2/*電機(jī)運(yùn)行*//*********************************************************************************************************常量宏定義--電機(jī)運(yùn)行方向*********************************************************************************************************/#defineMOTORGOAHEAD0/*電機(jī)前進(jìn)*/#defineMOTORGOBACK1/*電機(jī)后退*//*********************************************************************************************************結(jié)構(gòu)體定義*********************************************************************************************************/structmotor{int8cState;/*電機(jī)運(yùn)行狀態(tài)*/int8cDir;/*電機(jī)運(yùn)行方向*/uint32uiPulse;/*電機(jī)需要轉(zhuǎn)動(dòng)的步數(shù)*/uint32uiPulseCtr;/*電機(jī)已轉(zhuǎn)動(dòng)的步數(shù)*/int32iSpeed;/*電機(jī)轉(zhuǎn)動(dòng)速度*/};typedefstructmotorMOTOR;/*********************************************************************************************************定義全局變量*********************************************************************************************************/staticMOTORGmRight={MOTORSTOP,MOTORGOAHEAD,0,0,0};/*定義并初始化右電機(jī)狀態(tài)*/staticMOTORGmLeft={MOTORSTOP,MOTORGOAHEAD,0,0,0};/*定義并初始化左電機(jī)狀態(tài)*/staticuint8GucMouseState=STOP;/*保存電腦鼠當(dāng)前運(yùn)行狀態(tài)*/staticuint32GuiAccelTable[300]={0};/*電機(jī)加減速各階段定時(shí)器值*/staticint32GiMaxSpeed=70;/*保存允許運(yùn)行的最大速度*/staticuint8GucDistance[5]={0};/*記錄傳感器狀態(tài)*//***********************************************************************************************************Functionname:delay**Descriptions:延時(shí)函數(shù)**inputparameters:uiD:延時(shí)參數(shù),值越大,延時(shí)越久**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voiddelay(uint32uiD){for(;uiD;uiD--);}/***********************************************************************************************************Functionname:rightMotorContr**Descriptions:右步進(jìn)電機(jī)驅(qū)動(dòng)時(shí)序**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidrightMotorContr(void){staticint8cStep=0;/*保存電機(jī)當(dāng)前位置*/switch{caseMOTORGOAHEAD:/*向前步進(jìn)*/cStep=(cStep+1)%8;break;caseMOTORGOBACK:/*向后步進(jìn)*/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:左步進(jìn)電機(jī)驅(qū)動(dòng)時(shí)序**inputparameters::電機(jī)運(yùn)行方向**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidleftMotorContr(void){staticint8cStep=0;/*保存電機(jī)當(dāng)前位置*/switch{caseMOTORGOAHEAD:/*向前步進(jìn)*/cStep=(cStep+1)%8;break;caseMOTORGOBACK:/*向后步進(jìn)*/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:右電機(jī)速度調(diào)節(jié)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidspeedContrR(void){int32iDPusle;iDPusle=-;/*統(tǒng)計(jì)電機(jī)還剩余的步數(shù)*/if(iDPusle<={;}else{/*非減速區(qū)間,則加速到最大值*/if<GiMaxSpeed){++;}else{;}}if<0){/*設(shè)置速度下限*/=0;}TimerLoadSet(TIMER0_BASE,TIMER_A,GuiAccelTable[]);/*設(shè)置定時(shí)時(shí)間*/}/***********************************************************************************************************Functionname:speedContrL**Descriptions:左電機(jī)速度調(diào)節(jié)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidspeedContrL(void){int32iDPusle;iDPusle=-;/*統(tǒng)計(jì)電機(jī)還剩余的步數(shù)*/if(iDPusle<={;}else{/*非減速區(qū)間,則加速到最大值*/if<GiMaxSpeed){++;}}if<0){/*設(shè)置速度下限*/=0;}TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[]);/*設(shè)置定時(shí)時(shí)間*/}/***********************************************************************************************************Functionname:Timer0A_ISR**Descriptions:Timer0中斷服務(wù)函數(shù)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidTimer0A_ISR(void){staticint8n=0,m=0;TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);/*清除定時(shí)器0中斷。*/switch{caseMOTORSTOP:/*停止,同時(shí)清零速度和脈沖值*/=0;=0;=0;break;caseWAITONESTEP:/*暫停一步*/=MOTORRUN;break;caseMOTORRUN:/*電機(jī)運(yùn)行*/if(GucMouseState==GOAHEAD){/*根據(jù)傳感器狀態(tài)微調(diào)電機(jī)位置*/if(GucDistance[FRONTL]&&(GucDistance[FRONTR]==0)){/*左前方有障礙,且前方無擋板*/if(n==1){=WAITONESTEP;/*下一次電機(jī)暫停*/}n++;n%=2;}else{n=0;}if((GucDistance[RIGHT]==1)&&(GucDistance[LEFT]==0)){/*離右擋板太遠(yuǎn),且左方無擋板*/if(m==3){=WAITONESTEP;/*下一次電機(jī)暫停*/}m++;m%=6;}else{m=0;}}rightMotorContr();/*推動(dòng)電機(jī)轉(zhuǎn)動(dòng)一步*/break;default:break;}/**是否完成任務(wù)判斷*/if!=MOTORSTOP){++;/*運(yùn)行脈沖計(jì)數(shù)*/speedContrR();/*速度調(diào)節(jié)*/if>={=MOTORSTOP;=0;=0;=0;}}}/***********************************************************************************************************Functionname:Timer1A_ISR**Descriptions:Timer1中斷服務(wù)函數(shù)**inputparameters::驅(qū)動(dòng)步進(jìn)電機(jī)的時(shí)序狀態(tài)**:步進(jìn)電機(jī)運(yùn)動(dòng)的方向**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidTimer1A_ISR(void){staticint8n=0,m=0;TimerIntClear(TIMER1_BASE,TIMER_TIMA_TIMEOUT);/*清除定時(shí)器1中斷。*/switch{caseMOTORSTOP:/*停止,同時(shí)清零速度和脈沖值*/=0;=0;=0;break;caseWAITONESTEP:/*暫停一步*/=MOTORRUN;break;caseMOTORRUN:/*電機(jī)運(yùn)行*/if(GucMouseState==GOAHEAD){/*根據(jù)傳感器狀態(tài)微調(diào)電機(jī)位置*/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();/*電機(jī)驅(qū)動(dòng)程序*/break;default:break;}/**是否完成任務(wù)判斷*/if!=MOTORSTOP){++;/*運(yùn)行脈沖計(jì)數(shù)*/speedContrL();/*速度調(diào)節(jié)*/if>={=MOTORSTOP;=0;=0;=0;}}}/***********************************************************************************************************Functionname:irSendFreq**Descriptions:發(fā)送紅外線。**inputparameters:uiFreq:紅外線調(diào)制頻率**cNumber:選擇需要設(shè)置的PWM模塊**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidirSendFreq(uint32uiFreq,int8cNumber){uiFreq=SysCtlClockGet()/uiFreq;switch(cNumber){case1:PWMGenPeriodSet(PWM_BASE,PWM_GEN_1,uiFreq);/*設(shè)置PWM發(fā)生器1的周期*/PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,uiFreq/2);/*設(shè)置PWM2輸出的脈沖寬度*/PWMGenEnable(PWM_BASE,PWM_GEN_1);/*使能PWM發(fā)生器1*/break;case2:PWMGenPeriodSet(PWM_BASE,PWM_GEN_2,uiFreq);/*設(shè)置PWM發(fā)生器2的周期*/PWMPulseWidthSet(PWM_BASE,PWM_OUT_4,uiFreq/2);/*設(shè)置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);/*探測左右兩側(cè)近距*/irSendFreq(35000,1);/*驅(qū)動(dòng)斜角上的傳感器檢測*/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);/*驅(qū)動(dòng)檢測左前右三個(gè)方向遠(yuǎn)距*/break;case3:ucIRCheck=GPIOPinRead(GPIO_PORTB_BASE,0x2a);/*讀取傳感器狀態(tài)*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/break;case4:irSendFreq(36000,2);/*重復(fù)檢測左前右三個(gè)方向遠(yuǎn)距*/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;/**設(shè)定運(yùn)行任務(wù)*/GucMouseState=GOAHEAD;=MOTORGOAHEAD;=MOTORGOAHEAD;=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;=MOTORRUN;=MOTORRUN;while!=MOTORSTOP){if(GucDistance[FRONT]){/*前方有墻*//**設(shè)置繼續(xù)前進(jìn)的步數(shù),以實(shí)現(xiàn)能停止在單元格中心的目的*/=+70;=+70;/**反復(fù)檢測前方傳感器的狀態(tài),以消除誤判*/while(GucDistance[FRONT]){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結(jié)束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設(shè)定電機(jī)運(yùn)行任務(wù)*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}if(cL){/*是否允許檢測左邊*/if((GucDistance[LEFT]&0x01)==0){/*左邊有支路*//**設(shè)置繼續(xù)前進(jìn)的步數(shù),以實(shí)現(xiàn)能停止在單元格中心的目的*/=+74;=+74;/**反復(fù)檢測前方傳感器的狀態(tài),以消除誤判*/while((GucDistance[LEFT]&0x01)==0){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結(jié)束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設(shè)定電機(jī)運(yùn)行任務(wù)*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}}else{/*左邊有墻時(shí)開始允許檢測左邊*/if(GucDistance[LEFT]&0x01){cL=1;}}if(cR){/*是否允許檢測右邊*/if((GucDistance[RIGHT]&0x01)==0){/*右邊有支路*//**設(shè)置繼續(xù)前進(jìn)的步數(shù),以實(shí)現(xiàn)能停止在單元格中心的目的*/=+74;=+74;/**反復(fù)檢測前方傳感器的狀態(tài),以消除誤判*/while((GucDistance[RIGHT]&0x01)==0){if(+50)>{gotoEnd;/*跳出循環(huán),跳到程序結(jié)束處*/}}/**程序執(zhí)行到此步表明出現(xiàn)誤判,則重新設(shè)定電機(jī)運(yùn)行任務(wù)*/=MAZETYPE*ONEBLOCK;=MAZETYPE*ONEBLOCK;}}else{if(GucDistance[RIGHT]&0x01){/*右邊有墻時(shí)開始允許檢測右邊*/cR=1;}}}End:;}/***********************************************************************************************************Functionname:mouseTurnright**Descriptions:右轉(zhuǎn)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnright(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNRIGHT;/*標(biāo)記電腦鼠的運(yùn)行狀態(tài)*//**開始右轉(zhuǎn)*/=MOTORGOBACK;/*控制右輪向后轉(zhuǎn)動(dòng)*/=41;/*設(shè)定右輪轉(zhuǎn)動(dòng)的步數(shù)*/=MOTORGOAHEAD;/*控制左輪向前轉(zhuǎn)動(dòng)*/=41;/*設(shè)定左輪轉(zhuǎn)動(dòng)的步數(shù)*/=MOTORRUN;/*使能右輪轉(zhuǎn)動(dòng)*/=MOTORRUN;/*使能左輪轉(zhuǎn)動(dòng)*//**等待右轉(zhuǎn)完成*/while!=MOTORSTOP);while!=MOTORSTOP);}/***********************************************************************************************************Functionname:mouseTurnleft**Descriptions:左轉(zhuǎn)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnleft(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNLEFT;/*標(biāo)記電腦鼠的運(yùn)行狀態(tài)*//**開始左轉(zhuǎn)*/=MOTORGOAHEAD;/*控制右輪向前轉(zhuǎn)動(dòng)*/=41;/*設(shè)定右輪轉(zhuǎn)動(dòng)的步數(shù)*/=MOTORGOBACK;/*控制左輪向后轉(zhuǎn)動(dòng)*/=41;/*設(shè)定左輪轉(zhuǎn)動(dòng)的步數(shù)*/=MOTORRUN;/*使能右輪轉(zhuǎn)動(dòng)*/=MOTORRUN;/*使能左輪轉(zhuǎn)動(dòng)*//**等待左轉(zhuǎn)完成*/while!=MOTORSTOP);while!=MOTORSTOP);}/***********************************************************************************************************Functionname:mouseTurnback**Descriptions:后轉(zhuǎn)**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidmouseTurnback(void){/**等待停止*/while!=MOTORSTOP);while!=MOTORSTOP);GucMouseState=TURNBACK;/**開始后轉(zhuǎn)*/=MOTORGOBACK;=81;=MOTORGOAHEAD;=81;=MOTORRUN;=MOTORRUN;/**等待后轉(zhuǎn)完成*/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:定時(shí)中斷掃描。**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidSysTick_ISR(void){staticint32iL=0,iR=0;/**如果左電機(jī)長時(shí)間停止,則斷電*/if==MOTORSTOP){iL++;}else{iL=0;}if(iL>=500){GPIOPinWrite(GPIO_PORTD_BASE,PHLA1|PHLA2|PHLB1|PHLB2,0x00);}/**如果右電機(jī)長時(shí)間停止,則斷電*/if==MOTORSTOP){iR++;}else{iR=0;}if(iR>=500){GPIOPinWrite(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2,0x00);}/**紅外線檢測*/irCheck();}/***********************************************************************************************************Functionname:wallCheck**Descriptions:根據(jù)傳感器檢測結(jié)果判斷是否存在墻壁**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){/**設(shè)置連接到傳感器信號輸出腳的I/O口為輸入模式*/GPIODirModeSet(GPIO_PORTB_BASE,LEFTSIDE|FRONTSIDE_L|FRONTSIDE|FRONTSIDE_R|RIGHTSIDE,GPIO_DIR_MODE_IN);/**用PWM驅(qū)動(dòng)紅外線發(fā)射頭產(chǎn)生調(diào)制的紅外線信號*/SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);/*使能PWM模塊*/SysCtlPWMClockSet(SYSCTL_PWMDIV_1);/*PWM時(shí)鐘配置:不分頻*//**初始化PWM2,該P(yáng)WM驅(qū)動(dòng)斜角紅外發(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);/*加計(jì)數(shù),立即更新*/PWMOutputState(PWM_BASE,PWM_OUT_2_BIT,true);/*使能PWM2輸出*/PWMGenDisable(PWM_BASE,PWM_GEN_1);/*禁止PWM發(fā)生器1*//**初始化PWM4,該P(yáng)WM驅(qū)動(dòng)左前右正方向紅外發(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);/*加計(jì)數(shù),立即更新*/PWMOutputState(PWM_BASE,PWM_OUT_4_BIT,true);/*使能PWM4輸出*/PWMGenDisable(PWM_BASE,PWM_GEN_2);/*禁止PWM發(fā)生器2*/}/***********************************************************************************************************Functionname:stepMotorIint**Descriptions:步進(jìn)電機(jī)控制初始化**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidstepMotorIint(void){uint16n=0;/**設(shè)置驅(qū)動(dòng)步進(jìn)電機(jī)的八個(gè)I/O口為輸出模式*/GPIODirModeSet(GPIO_PORTD_BASE,PHRA1|PHRA2|PHRB1|PHRB2|PHLA1|PHLA2|PHLB1|PHLB2,GPIO_DIR_MODE_OUT);/**對左右電機(jī)轉(zhuǎn)動(dòng)的位置初始化*/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í)定時(shí)器加載值的數(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));}/**初始化定時(shí)器0,用來控制右電機(jī)的轉(zhuǎn)速*/SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);/*使能定時(shí)器0模塊*/TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);/*配置為32位周期計(jì)數(shù)模式*/TimerLoadSet(TIMER0_BASE,TIMER_A,GuiAccelTable[0]);/*設(shè)置定時(shí)時(shí)間*/TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);/*設(shè)置為溢出中斷*/IntEnable(INT_TIMER0A);/*使能定時(shí)器0中斷*/TimerEnable(TIMER0_BASE,TIMER_A);/*使能定時(shí)器0*//**初始化定時(shí)器1,用來控制電機(jī)的轉(zhuǎn)速*/SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);/*使能定時(shí)器1模塊*/TimerConfigure(TIMER1_BASE,TIMER_CFG_32_BIT_PER);/*配置為32位周期計(jì)數(shù)模式*/TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[0]);/*設(shè)置定時(shí)時(shí)間*/TimerIntEnable(TIMER1_BASE,TIMER_TIMA_TIMEOUT);/*設(shè)置為溢出中斷*/IntEnable(INT_TIMER1A);/*使能定時(shí)器1中斷*/TimerEnable(TIMER1_BASE,TIMER_A);/*使能定時(shí)器1*/}/***********************************************************************************************************Functionname:keyInit**Descriptions:對連接按鍵的GPIO口初始化**inputparameters:無**outputparameters:無**Returnedvalue:無*********************************************************************************************************/voidkeyInit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上半年四川省古藺縣事業(yè)單位招聘435人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年度二零二五年度農(nóng)業(yè)機(jī)械設(shè)備租賃服務(wù)協(xié)議2篇
- 2025年度房地產(chǎn)教育地產(chǎn)合作協(xié)議書3篇
- 2025年度電力工程現(xiàn)場電力維修安全監(jiān)督合同
- 2025年度工傷私了賠償協(xié)議書簽訂與保險(xiǎn)理賠協(xié)調(diào)
- 2025年度北京市預(yù)售商品房合同房屋驗(yàn)收標(biāo)準(zhǔn)合同范本
- 2025年度廣告牌廣告投放與廣告效果監(jiān)測服務(wù)合同
- 2025年度辦公室裝修與員工健康舒適度提升合同樣本
- 2025年度公司與員工租車及費(fèi)用結(jié)算協(xié)議2篇
- 2025年度國家認(rèn)證電子合同平臺電子招投標(biāo)電子合同服務(wù)合同3篇
- 深信服adesk桌面云方案測試
- PDCA降低I類切口感染發(fā)生率
- 弘揚(yáng)兵團(tuán)精神做兵團(tuán)傳人課件
- 數(shù)控車床上下料機(jī)械手設(shè)計(jì)說明書
- 2022年高考全國甲卷語文試題評講課件55張
- 學(xué)校學(xué)生在校證明word模板
- 欠條(標(biāo)準(zhǔn)模版)
- 場內(nèi)叉車安全培訓(xùn)
- 不銹鋼項(xiàng)目立項(xiàng)申請報(bào)告
- 國家開放大學(xué)電大本科《西方社會學(xué)》2023-2024期末試題及答案(試卷代號:1296)
- 變式題教學(xué)設(shè)計(jì)
評論
0/150
提交評論