|
這是一個(gè)智能電動(dòng)車(chē)制作資料及源程序,
03年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽試題。很大參考價(jià)值
一只置于軌道中間,兩只置于軌道外側(cè),當(dāng)小車(chē)脫離軌道時(shí),即當(dāng)置于中間的一只光電開(kāi)關(guān)脫離軌道時(shí),等待外面任一只檢測(cè)到黑線后,做出相應(yīng)的轉(zhuǎn)向調(diào)整,直到中間的光電開(kāi)關(guān)重新檢測(cè)到黑線(即回到軌道)再恢復(fù)正向行駛。現(xiàn)場(chǎng)實(shí)測(cè)表明,雖然小車(chē)在尋跡過(guò)程中有一定的左右搖擺(因?yàn)樗?gòu)小車(chē)的內(nèi)部結(jié)構(gòu)決定了光電開(kāi)光之間的距離到達(dá)不了精確計(jì)算值1厘米),但只要控制好行駛速度就可保證車(chē)身基本上接近于沿靠軌道行駛。
方案三、采用一只紅外傳感器置于小車(chē)右側(cè)并與小車(chē)前進(jìn)方向呈一固定角度。
基于對(duì)C點(diǎn)后行車(chē)地圖中光源及障礙物尺寸、位置的分析,我們采用了從C點(diǎn)出發(fā)即獲得光源對(duì)行車(chē)方向的控制,在向光源行駛的過(guò)程之中檢查障礙物并做出相應(yīng)的反應(yīng),這樣不僅只使用一只紅外傳感器就實(shí)現(xiàn)了避障,而且避免因小車(chē)自然轉(zhuǎn)彎而導(dǎo)致的盲目方向控制,同時(shí)為后面以最簡(jiǎn)單直接的路線和在最短時(shí)間內(nèi)駛?cè)胲?chē)庫(kù)創(chuàng)造了機(jī)會(huì)。
智能小車(chē)應(yīng)以準(zhǔn)確、智能見(jiàn)優(yōu),采用方案三。
4.尋找光源方案分析與比較
方案三、利用多只光源定位器。
在方案二所得數(shù)據(jù)的基礎(chǔ)上,結(jié)合光敏電阻的敏感性,只用三到五只光敏電阻就可以達(dá)到目的,只是因其對(duì)光非常敏感,所以必需為每只光敏電阻加上黑色隔離板。雖然制作有一定難度,但其能見(jiàn)長(zhǎng)度和相對(duì)簡(jiǎn)明的控制措施顯示了很大的優(yōu)越性。
綜合考慮以上方案,方案三更具準(zhǔn)確性和獨(dú)創(chuàng)性,故我們采用方案三。
由于本次實(shí)驗(yàn)需要捍接的器件較多,各器件對(duì)于電源電流的需要極大,我們先以雙電源開(kāi)始調(diào)試,發(fā)現(xiàn)所有的開(kāi)關(guān)器件很難穩(wěn)定地給單片機(jī)送正確值,只有當(dāng)更換新電池或小車(chē)剛剛啟動(dòng)時(shí)才會(huì)很準(zhǔn)確,經(jīng)過(guò)思考,這都是開(kāi)關(guān)元件消耗電量很大的原因,一旦電池電量不足其工作將會(huì)萎靡不振,于是我們將所有開(kāi)關(guān)器件劃成一個(gè)部分,由一塊電池專(zhuān)門(mén)供電。
在前輪PWM驅(qū)動(dòng)轉(zhuǎn)向電路運(yùn)行中,我們發(fā)現(xiàn),電機(jī)只給一個(gè)轉(zhuǎn)向力,但保持長(zhǎng)期轉(zhuǎn)向時(shí),電機(jī)的轉(zhuǎn)動(dòng)由于受到強(qiáng)行制動(dòng)而處于一種相對(duì)靜止的狀態(tài),導(dǎo)致PWM驅(qū)動(dòng)電路產(chǎn)生大量的熱量,我們既利用軟件使其盡量減少長(zhǎng)期單向轉(zhuǎn)動(dòng)狀態(tài),又在硬件上,在PWM驅(qū)動(dòng)板上涂上了一層散熱膠,即使發(fā)熱,也不會(huì)燒壞PWM驅(qū)動(dòng)電路。
在安裝上避障用光電開(kāi)關(guān)之后,其與其它所有開(kāi)關(guān)元件共用同一電源,在運(yùn)行時(shí)發(fā)現(xiàn)三個(gè)用于尋跡用的開(kāi)關(guān)元件不能全部正常工作了,據(jù)分析,避障用光電開(kāi)關(guān)由于探測(cè)距離遠(yuǎn),功率大,很可能影響其他元件改用單一電源供電后,小車(chē)正常工作。
在所有電源開(kāi)啟后,系統(tǒng)即進(jìn)入6秒鐘倒計(jì)時(shí)狀態(tài),6秒鐘倒計(jì)時(shí)完畢之后,有時(shí)后輪電機(jī)不能正常啟動(dòng)。經(jīng)分析,這是屬于正常情況,因?yàn)槠鋯?dòng)需要克服很大的慣性,而其電源又不能在瞬間提供很大的電流,所以就沒(méi)有動(dòng)靜。此時(shí),關(guān)掉單片機(jī)電源,再重新打開(kāi)后即可進(jìn)入正常狀態(tài)去正常運(yùn)行。
單片機(jī)源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 0003H
- LJMP MINE_BOMB
- ORG 000BH
- LJMP TIMER
- ORG 0013H
- LJMP HUOER
- ORG 001BH
- LJMP SPEED
- ;**************************************************
- ORG 0030H
- ;**************************************************
- MINE_BOMB:
- PUSH A
- PUSH PSW
- INC 3AH
- MOV A,40H
- MOV 3BH,A
- MOV A,41H
- MOV 3CH,A
- CLR 20H.3
- SETB P3.4
- SETB P3.5
- POP PSW
- POP A
- RETI
- ;**************************************************
- TIMER:
- PUSH A
- PUSH PSW
- MOV TL0,#0F0H
- MOV TH0,#0D8H
- INC 37H
- MOV A,37H
- CJNE A,#100,TIMEREND
- ;is 1second
- IS_HUN:
- MOV 37H,#0
- ; IS C_MINE,STOP AND THAN XUAN
- JB 20H.0,QI_LAI ;THIS TIME,THE CAR IS WAITTING IN THE END,
- DEC 39H
- MOV A,39H
- CJNE A,#0H,TIMEREND
- SETB 20H.0
- LJMP TIMEREND
- QI_LAI:
- JB 20H.1,WAKE_UP
- DEC 38H
- CPL P3.4
- MOV A,38H
- CJNE A,#0H,WAKE_UP
- SETB 20H.1
- CLR P3.4
- SETB TR1
- MOV 5AH,#23
- WAKE_UP:
- INC 43H
- MOV A,43H
- CJNE A,#30,GOGOGO_DOWN
- MOV A,42H
- JZ GOGOGO_DOWN
- LJMP HOME
- GOGOGO_DOWN:
- MOV A,43H
- CJNE A,#60,TIMEREND
- MOV 43H,#0
- INC 42H
- MOV A,42H
- CJNE A,#60,TIMEREND
- MOV 42H,#0
- TIMEREND:
- POP PSW
- POP A
- RETI
- ;**************************************************
- HUOER:
- PUSH A
- PUSH PSW
- MOV A,3FH
- CLR C
- ADD A,#64 ;加上6.3毫米
- CJNE A,#100,CHECK_CM
- CHECK_CM:
- JC ADD_CM
- SUBB A,#100 ;大于10個(gè)毫米了,要作調(diào)整
- MOV 3FH,A
- INC 41H
- ADD_CM: ;厘米上要加2
- INC 41H
- INC 41H
- MOV A,41H
- CJNE A,#100,CHECK_M
- CHECK_M:
- JC HUOER_END
- SUBB A,#100 ;大于一米了,要調(diào)整一下
- MOV 41H,A
- INC 40H
- ;查看是否是兩米了,是的話就算到了B區(qū)
- MOV A,40H
- CJNE A,#2,HUOER_END
- MOV 36H,#0BH
- HUOER_END:
- POP PSW
- POP A
- RETI
- ;**************************************************
- SPEED:
- PUSH A
- PUSH PSW
- MOV TL1,#0B0H
- MOV TH1,#03CH
- INC 5BH
- MOV A,5BH
- CJNE A,5AH,SPEED_NO_EQUAL ; 5A中放了速度值,比5A大,剛置為停,小則行
- CLR P3.0 ; 等于5A了,置為停
- LJMP SP_END
- SPEED_NO_EQUAL: ; 不是5A
- JC IS_GOGOGO ; 小于5A,則向前走
- CJNE A,#40,SP_BIG_TOTAL ; 是不是比總脈沖值大
- SETB P3.0
- MOV 5BH,#0H
- LJMP SP_END
- IS_GOGOGO: ;是行,就置行
- SETB P3.0
- LJMP SP_END
- SP_BIG_TOTAL: ; 大于5A,不是40
- CLR P3.0
- JC SP_END ;比40小則是停,就不管
- MOV 5AH,#0H
- SP_END:
- POP PSW
- POP A
- RETI
- ;**************************************************
- ;**************************************************
- MAIN:
- MOV SP,#5FH
- LCALL INIT
- ; LJMP HOME;\\\\\\\\\
- SIX_SECOND:
- JB 20H.0,GO_MINE_ZEON
- MOV R1,#39H
- LCALL SETCODEALL
- LCALL OUT
- LJMP SIX_SECOND
- GO_MINE_ZEON:
- SETB TR1
- LJMP MINE_WAY
- RET
- ;**************************************************
- ;**************************************************
- INIT:
- MOV R1,#36H
- MOV R2,#34
- INIT_LOOP:
- MOV @R1,#0
- INC R1
- DJNZ R2,INIT_LOOP
- MOV 20H,#0H
- SETB 20H.1
- SETB 20H.3
- MOV 39H,#6H ;倒計(jì)時(shí)654321
- MOV 38H,#5H ;倒計(jì)時(shí)54321
- MOV 5AH,#24 ;用于車(chē)速控制
- MOV 36H,#0AH
- MOV P3,#0CH
- MOV P2,#0H
- INT_ZONE:
- LCALL SET_INT
- RET
- ;**************************************************
- SET_INT:
- MOV TMOD,#01H
- MOV TL0,#0F0H
- MOV TH0,#0D8H
- MOV TL1,#0B0H
- MOV TH1,#03CH
- SETB TR0
- CLR TR1
- SETB EA
- SETB ET0
- SETB ET1
- SETB EX0
- SETB IT0
- SETB EX1
- SETB IT1
- RET
- ;**************************************************
- SETCODEALL:;6543210
- MOV R0,#30H
- MOV R2,#6
- SETCODEALL_LOOP:
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV @R0,A
- INC R0
- DJNZ R2,SETCODEALL_LOOP
- RET
- ;**************************************************
- ;**************************************************
- MINE_WAY:
- LCALL TRACK
- JB 20H.3,MINE_WAY
- MOV C,P3.2 ;下面有雷,就是低
- JC MINE_WAY
- ;下面是關(guān)小燈和蜂鳴器
- CLR P3.4
- CLR P3.5
- ;看看長(zhǎng)度是否超過(guò)4米
- MOV A,40H
- CJNE A,#4H,PASS_C
- LJMP C_POINT
- PASS_C:
- JNC C_POINT
- ;下面調(diào)用一般雷的處理方法,再返回主程序
- LCALL NORMAL_MINE
- LJMP MINE_WAY
- ;下面是到達(dá)C點(diǎn)了
- C_POINT:
- CLR 20H.1
- LCALL FIVE_SECOND
- SETB 20H.3
- SETB TR1
- MOV 5AH,#23
- LJMP BOLK
- RET
- ;****************************************************
- TRACK:
- MOV A,P0
- ANL A,#07H
- CJNE A,#7H,SET_TURN
- LJMP LIGHT_END
- SET_TURN:
- CJNE A,#3H,LIGHT_NEXT
- RIGHT_LIGHT: ; 看右邊的光敏元件
- CLR P2.7 ;這時(shí)就要向右轉(zhuǎn)彎了
- SETB P2.6
- LCALL TURN_DELAY
- CLR P2.6
- RET
- LIGHT_NEXT: ; 左轉(zhuǎn)了
- CJNE A,#06H,LIGHT_END
- SETB P2.7
- SETB P2.6
- LCALL TURN_DELAY
- CLR P2.6
- RET
- LIGHT_END:
- CLR P2.6
- RET
- ;****************************************************
- TURN_DELAY:
- MOV 5AH,#26
- MOV C, P0.1
- JC TURN_DELAY
- MOV A,36H
-
- CJNE A,#0AH,IS_ZONE_B
- MOV 5AH,#24
- LJMP TURN_DELAY_END
- IS_ZONE_B:
- MOV 5AH,#20
- TURN_DELAY_END:
- RET
- ;****************************************************
- NORMAL_MINE:
- CLR TR1
- CLR P2.6
- ;以下是保存雷長(zhǎng)度
- MOV A,3CH
- ADD A,#53H
- MOV R0,A
- CLR C
- MOV A,41H
- ADD A,#100
- SUBB A,3CH
- CJNE A,#100,NORMAL_MINE_LENGTH
- NORMAL_MINE_LENGTH:
- JC NO_CHANGE
- SUBB A,#100
- NO_CHANGE:
- MOV @R0,A
- ;以下是計(jì)算中點(diǎn)距起點(diǎn)的距離
- MOV B,#2H
- DIV AB
- ADD A,3CH
- CJNE A,#100,SET_CENTER
- SET_CENTER:
- JC NO_P_WAY
- SUBB A,#100
- INC 3BH
- NO_P_WAY:
- MOV 3CH,A
- ;保存中點(diǎn)距離
- MOV A,3AH
- DEC A
- MOV B,#2H
- MUL AB
- MOV R0,48H
- ADD A,R0
- MOV R0,A
- MOV A,3BH
- MOV @R0,A
- INC R0
- MOV A,3CH
- MOV @R0,A
- CLR P3.0
- CLR P3.1
- CLR P2.6
- CLR TR1
- ;以下是延時(shí)顯示程序
- LCALL DELAY_MINE2
- CLR P3.1
- SETB P3.0
- SETB TR1
- SETB 20H.3
- RET
- ;****************************************************
- DELAY_MINE1:
- MOV R6,#2H
- DELAY_LOOP_MINE1:
- LCALL DELAY
- DJNZ R6,DELAY_LOOP_MINE1
- RET
- ;****************************************************
- ;****************************************************
- DELAY_MINE2:
- LCALL SET_CODE_MINE
- MOV R5,#03H
- DELAY_LOOP_MINE_F:
- MOV R6,#08FH
- DELAY_LOOP_MINE2:
- LCALL OUT
- DJNZ R6,DELAY_LOOP_MINE2
- DJNZ R5,DELAY_LOOP_MINE_F
- RET
- ;****************************************************
- SET_CODE_MINE:
- MOV A,3BH
- MOV B,#0AH
- DIV AB
- MOV 44H,A
- MOV 45H,B
- MOV A,3CH
- MOV B,#0AH
- DIV AB
- MOV 46H,A
- MOV 47H,B
- LCALL SET_CODE
- RET
- ;****************************************************
- FIVE_SECOND:
- CLR TR1
- CLR P2.6
- SETB P3.1
- SETB P3.0
- LCALL DELAY_MINE1
- CLR P3.0
- CLR P3.1
- CLR P2.6
- SETB P3.5
- SETB P3.4
- CLR TR1
- STOP_AT_C:
- MOV R1,#38H
- LCALL SETCODEALL
- JB 20H.1,C_WAKE_LE
- LCALL OUT
- LJMP STOP_AT_C
- C_WAKE_LE:
- SETB TR1
- RET
- ;****************************************************
- ;****************************************************
- BOLK:
- SETB TR1
- MOV 5AH,#20
-
- MOV R5,#05H
- FIRST_TURN_RIGHT1:
- MOV R6,#0FFH
- FIRST_TURN_RIGHT2:
- LCALL DELAY
- DJNZ R6,FIRST_TURN_RIGHT2
- DJNZ R5,FIRST_TURN_RIGHT1
-
-
- SEEK_LAMP:
- LCALL TURN_TO_LAMP
- MOV C,P0.1
- JNC HOME
- JB 20H.6,SEEK_LAMP
- MOV C,P0.6
- JC SEEK_LAMP
- AV: LCALL AVOID_WHITE_BOLK
- MOV C,P0.6
- JNC AV
- SETB 20H.6
- LJMP SEEK_LAMP
- RET
- ;******************************************************
- TURN_TO_LAMP:
- MOV C,P0.3
- JNC LOOK_RIGHT
- LCALL TURN_LEFT_MIDDLE
- RET
- LOOK_RIGHT:
- MOV C,P0.5
- MOV R6,#4FH
- FORWARDLIGHT:
- LCALL DELAY
- DJNZ R6,FORWARDLIGHT
- JNC TURN_TO_LAMP_END
- LCALL TURN_RIGHT_MIDDLE
- RET
- TURN_TO_LAMP_END:
- RET
- ;******************************************************
- ;******************************************************
- AVOID_WHITE_BOLK:
- SETB P2.7
- SETB P2.6
- MOV 5AH,#30
- MOV R6,#3FH
- AVOID_LOOP:
- LCALL DELAY
- DJNZ R6,AVOID_LOOP
- MOV C,P0.6
- JNC AVOID_WHITE_BOLK
- MOV 5AH,#23
- CLR P2.6
- RET
- ;******************************************************
- TURN_RIGHT_MIDDLE:
- MOV 5AH,#30
- TURN_RIGHT_MIDDLE_START:
- CLR P2.7
- SETB P2.6
- MOV C,P0.3
- JNC TURN_RIGHT_MIDDLE_START
- CLR P2.6
- MOV 5AH,#23
- RET
- ;******************************************************
- TURN_LEFT_MIDDLE:
- MOV 5AH,#30
- TURN_LEFT_MIDDLE_START:
- SETB P2.7
- SETB P2.6
- MOV C,P0.5
- JNC TURN_RIGHT_MIDDLE_START
- CLR P2.6
- MOV 5AH,#23H
- RET
- ;******************************************************
- DELAY:
- MOV R7,#0FFH
- DELAY_LOOP:
- DJNZ R7,DELAY_LOOP
- RET
- ;******************************************************
- ;****************************************************
- HOME:
- MOV IE,#0H
- MOV IE,#0H
- CLR P2.6
- CLR P3.0
- HOME_WAIT:
- CLR P2.6
- CLR P3.0
- SETB P3.4
- LCALL KEY_QUERY ; 查詢(xún)鍵盤(pán)
- LCALL TIP_SET_CODE ; 設(shè)置顯示值
- MOV R1,#44H
- LCALL SET_CODE
- LCALL OUT ; LED 輸出
- LJMP HOME_WAIT
- RET
- ;******************************************************
- KEY_QUERY:
- LCALL KEY
- JNC KEY_QUERY_END
- LCALL KEY
- JNC KEY_QUERY_END
- LCALL DEAL_KEY
- KEY_WA:
- LCALL KEY
- JC KEY_WA
- KEY_QUERY_END:
- RET
- RET
- ;******************************************************
- TIP_SET_CODE:
- MOV A,59H
- JZ SET_TIME
- MOV R0,#46H
- MOV B,#02H
- MUL AB
- ADD A,R0
- MOV R0,A
- SET_NUM:
- MOV A,@R0
- MOV B,#0AH
- DIV AB
- MOV 44H,A
- MOV 45H,B
- INC R0
- MOV B,#0AH
- MOV A,@R0
- DIV AB
- MOV 46H,A
- MOV 47H,B
- RET
- SET_TIME:
- MOV R0,#42H
- LJMP SET_NUM
- RET
- ;*****************************************************
- OUT:
- MOV R0,#30H
- MOV R2,#6H
- MOV R4,#0H
- LOOP:
- MOV A,@R0
- LCALL OUTPUT
- INC R0
- INC R4
- DJNZ R2,LOOP
- RET
- ;*******************************************************
- OUTPUT: ;在A中是要顯示的數(shù)據(jù),R4中是要顯示的位
- MOV R3,#8H
- CLR P1.3
- OUT_LOOP:
- RLC A
- MOV P1.2,C
- CLR P1.4
- NOP
- NOP
- NOP
- SETB P1.4
- NOP
- NOP
- NOP
- DJNZ R3,OUT_LOOP
- OUT_LOOP_END:
- MOV P1,R4
- SETB P1.3
- LCALL DELAY
- CLR P1.3
- RET
- ;******************************************************
- SET_CODE:
- MOV R0,#44H
- MOV R1,#30H
- MOV R2,#4H
- SET_CODE_LOOP:
- MOV A,@R0
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV @R1,A
- INC R0
- INC R1
- DJNZ R2,SET_CODE_LOOP
- ;以下是顯示是第幾個(gè)雷
- MOV A,3AH
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV 35H,A
- ;以下是使一個(gè)LED為暗
- MOV 34H,#0H
- RET
- ;******************************************************
- TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
- ;*****************************************************
- KEY:
- MOV 58H,#0FEH;
- MOV R1,#4H
- KEY_LOOP:
- MOV P1,58H
- MOV A,P1
- CJNE A,58H,KEY_NEXT1
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
大賽用智能電動(dòng)車(chē)制作源程序.rar
(124.43 KB, 下載次數(shù): 14)
2019-1-17 21:48 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|