久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3375|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機紅外小車避障軟硬件分析(匯編語言程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:865999 發(fā)表于 2020-12-24 08:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
之前做過的紅外小車避障可以做個參考,是固定的障礙,要過障礙還是要通過算法,要自己算一下,

控制小車的運動一直是實驗室中的重點項目之一,這次我們進行的項目就是運用紅外檢測模塊對小車進行運動控制,從而讓小車達到自動前進避開障礙物的目的。此次實驗我們要用到AT89C51 單片機來控制,實現(xiàn)的目標(biāo)為讓小車自動走出迷宮以及記錄障礙物遇到的個數(shù)。

基本內(nèi)容
在一個有障礙物的區(qū)域內(nèi),小車可以自由前進,不碰撞到任何障礙物。
在行進的過程中,記錄下遇到障礙物的個數(shù)
2.?dāng)U展內(nèi)容
小車在光源的引導(dǎo)下,進入停車區(qū)到達車庫并停止

小車的行走電機由兩個H橋驅(qū)動,Q1到Q6是左邊電機的驅(qū)動電路,Q3,Q4,Q7,Q8,Q11,Q12是右邊電機的驅(qū)動電路,電路如圖所示,圖中的邏輯門電路U6A,U6B,U6C.U6D構(gòu)成了一個邏輯互鎖電路,避免H橋驅(qū)動電路中Q3與Q4同時導(dǎo)通,使得Q7,Q8,Q11,Q12全部導(dǎo)通,造成短路。其執(zhí)行時Q3的基極為高電平時,Q3導(dǎo)通Q8,Q11也導(dǎo)通,右電機反轉(zhuǎn)。當(dāng)Q4的基極為高電平時,Q4導(dǎo)通Q7,Q12也導(dǎo)通,右電機正轉(zhuǎn)。

第二節(jié)  紅外模塊介紹
要保證小車在前進運動中正確地避開障礙物,至少需要三組紅外傳感器來探測障礙物是在左面還是右面或者是在前方,并且三組傳感器還要能探測到小車正前方的障礙物。為達到此要求,傳感器的使用方案如下: 在小車的正中向前的方向安裝紅外接收模塊,在小車前面朝左右方向各安裝-一 個發(fā)射模塊。安裝時要注意調(diào)整安裝位置,要確保反射回來的紅外線能被接收到,所以要調(diào)整好方位。如果三個發(fā)射模塊同時發(fā)射,接受模塊將無法區(qū)分所接收到的信號來自何方。如果我們采用時分復(fù)用的方法就可以解決這個問題,讓他們交替工作,只要交替的速度快就可以保證檢測的正確性。
L為“1”表示接收模塊接收到左面的反射信號,為“0”表示沒有 接收到反射信號R為“1”表示接收模塊接收到右面的反射信號,為“0”表示沒有接收到反射信號。程序中除了要對判斷是否有障礙外,還要對障礙物的方位做出準(zhǔn)確的判斷才能使小車做出正確的避讓。先選擇三個標(biāo)志位,用于表示前,左,右
是否有障礙。有障礙置1,無障礙置0,最好是選擇相鄰的位,便于邏輯判斷。
左邊為紅外發(fā)射模塊電路圖,右為紅外接受電路圖。

第三章  軟件程序
第一節(jié)
流程圖編寫
本系統(tǒng)采用匯編語言編程。軟件程序由主程序,PWM調(diào)速程序,紅外模塊控制程序,判斷障礙物方位程序,障礙物個數(shù)顯示程序和延時子程序組成。小車開機,檢測先進行PWM調(diào)速,在對障礙物的方位進行檢測從而對小車的運動狀態(tài)進行調(diào)整,最后在對障礙物個數(shù)進行計數(shù)并且順利走出搭建迷宮以完成實驗。實驗流程圖如下:


第二節(jié) 程序編寫
PWM調(diào)速:
調(diào)用調(diào)速模塊,設(shè)置各項初值以及PWM調(diào)速的頻率,最后改變其占空比來實現(xiàn)對小車速度的控制。
控制障礙物方位;
設(shè)置一個寄存器20H,使其高五位清零,再把三個傳感器分別檢測到障礙物個數(shù)時的情況列舉出來,設(shè)置有障礙物為1沒有障礙物為0,并和20H相與,最后得到檢測障礙物方向的結(jié)論。
障礙物數(shù)目顯示:
在轉(zhuǎn)向時說明是檢測到了前方有障礙物,讓R7置1,轉(zhuǎn)向變?yōu)橹毙姓f明前方已經(jīng)沒有了障礙物,就檢測R7是否為1,如果為1,就說明有障礙物,那顯示就加一
紅外檢測:
先關(guān)閉所有發(fā)射端口,設(shè)定發(fā)送脈沖數(shù)目,然后接受寄存器清零,然后啟動第一個發(fā)射模塊,然后給延時,判斷是否接受到反射信號,接收到就脈沖數(shù)目加1,沒有就停止發(fā)射,延時,然后判斷是否發(fā)射10次,沒有就繼續(xù)啟動發(fā)射模塊重復(fù)直到10次發(fā)射完畢,然后判斷接受脈沖數(shù)目是否等于或者大于2(等于或者大于2是為了檢測更加靈敏),小于2就是沒有障礙物,等于或者大于2就是有障礙物,另外兩個模塊也是這樣。
附錄1   傳感器接口與其引腳功能

單片機源程序如下:
  1. CCON                DATA              0D8H
  2. CMOD                DATA              0D9H
  3. CCAPM0              DATA              0DAH
  4. CCAPM1              DATA              0DBH
  5. CCAPM2              DATA              0DCH
  6. CCAPM3              DATA              0DDH
  7. CCAPM4              DATA              0DEH
  8. CL                  DATA              0E9H
  9. CCAP0L              DATA              0EAH
  10. CCAP1L              DATA              0EBH
  11. CCAP2L              DATA              0ECH
  12. CCAP3L              DATA              0EDH
  13. CCAP4L              DATA              0EEH
  14. CH                  DATA              0F9H
  15. CCAP0H              DATA              0FAH
  16. CCAP1H              DATA              0FBH
  17. CCAP2H              DATA              0FCH
  18. CCAP3H              DATA              0FDH
  19. CCAP4H              DATA              0FEH

  20.               ORG                            0000H
  21.               LJMP              MAIN
  22.               ORG                            0030H

  23. MAIN:

  24.               MOV                                          20H,#00H
  25.               LCALL                            PWM                 // PWM初始化
  26. N1:            
  27.             
  28.               CLR                                          P3.2                            //關(guān)閉紅外發(fā)射端口P3.2
  29.               CLR                                          P3.4                            //關(guān)閉紅外發(fā)射端口P3.4
  30.               CLR                                          P3.7                            //關(guān)閉紅外發(fā)射端口P3.7
  31.               MOV                                          R0,#10                            //設(shè)定脈沖發(fā)射數(shù)目
  32.               MOV                                          R1,#00                            //接收寄存器清零
  33. LOOP0:
  34.               SETB                            P3.7                            //打開紅外發(fā)射端口P3.7
  35.               LCALL                            DE600U                            //延時
  36.               JB                                          P2.3,LOOP1//判斷接收端口P2.3是否為1,不是則跳轉(zhuǎn)到LOOP1
  37.               INC                                          R1                            //接收端口為1,R1加一
  38. LOOP1:
  39.               CLR                                          P3.7                            //關(guān)閉紅外發(fā)射端口P3.7
  40.               LCALL                            DE600U                            //延時
  41.               DJNZ                            R0,LOOP0              //判斷R0減一是否為0不為零則跳轉(zhuǎn)到LOOP0
  42.               CJNE                            R1,#2,LOOP2                            //判斷R1是否等于2,不等則跳轉(zhuǎn)
  43. LOOP2:            
  44.             
  45.               JC                                          N2                            //有進位、即CF=1,則跳轉(zhuǎn)N2            
  46.               SETB                            02H                            //02H置1
  47. N2:            
  48.             
  49.               CLR                                          P3.2                            //關(guān)閉紅外發(fā)射端口P3.2
  50.               CLR                                          P3.4                            //關(guān)閉紅外發(fā)射端口P3.4
  51.               CLR                                          P3.7                            //關(guān)閉紅外發(fā)射端口P3.7
  52.               MOV                                          R2,#10                            //設(shè)定脈沖發(fā)射數(shù)目
  53.               MOV                                          R3,#00              //接收寄存器清零
  54. LOOP3:
  55.               SETB                            P3.4                            //打開紅外發(fā)射端口P3.4
  56.               LCALL                            DE600U                            //延時
  57.               JB                                          P3.5,LOOP4//判斷接收端口P3.5是否為1,不是則跳轉(zhuǎn)到LOOP4
  58.               INC                                          R3                            //接收端口為1,R3加一
  59. LOOP4:
  60.               CLR                                          P3.4                            //關(guān)閉紅外發(fā)射端口P3.4
  61.               LCALL                            DE600U                            //延時
  62.               DJNZ                            R2,LOOP3              //判斷R2減一是否為0不為零則跳轉(zhuǎn)到LOOP3
  63.               CJNE                            R3,#2,LOOP5                            //判斷R3是否等于2,不等則跳轉(zhuǎn)到LOOP5
  64. LOOP5:
  65.             
  66.               JC                                          MAIN1              //有進位、即CF=1,則跳轉(zhuǎn)MAIN1
  67.               SETB                            01H                            //01H置1            
  68. MAIN1:            
  69.             
  70.               CLR                                          P3.2                            //關(guān)閉紅外發(fā)射端口P3.2
  71.               CLR                                          P3.4                            //關(guān)閉紅外發(fā)射端口P3.4
  72.               CLR                                          P3.7                            //關(guān)閉紅外發(fā)射端口P3.7
  73.               MOV                                          R4,#10                            //設(shè)定脈沖發(fā)射數(shù)目
  74.               MOV                                          R5,#00              //接收寄存器清零
  75. LOOP6:
  76.               SETB                            P3.2                            //打開紅外發(fā)射端口P3.2
  77.               LCALL                            DE600U                            //延時
  78.               JB                                          P3.3,LOOP7//判斷接收端口P3.3是否為1,不是則跳轉(zhuǎn)到LOOP7
  79.               INC                                          R5                            //接收端口為1,R5加一
  80. LOOP7:
  81.               CLR                                          P3.2                            //關(guān)閉紅外發(fā)射端口P3.2
  82.               LCALL                            DE600U                            //延時
  83.               DJNZ                            R4,LOOP6              //判斷R4減一是否為0不為零則跳轉(zhuǎn)到LOOP6
  84.               CJNE                            R5,#2,LOOP8                            //判斷R5是否等于2,不等則跳轉(zhuǎn)到LOOP8
  85. LOOP8:
  86.             
  87.               JC                                          PD//有進位、即CF=1,則跳轉(zhuǎn)PD
  88.               SETB                            00H                                          //00H置1               

  89. PD:            
  90.             
  91.               ANL                                          20H,#07H                            //把20H里的值和07H相與
  92.               MOV                                          A,20H                                          //把20H里的值給A
  93.               CJNE                            A,#00H, PD0                            //判斷A是否等于00H,不等則跳轉(zhuǎn)到PD0
  94.               LCALL                            mansu                            //進入直行慢速子程序
  95.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉(zhuǎn)到SL
  96.               LCALL                            JSXS                            //進入計數(shù)顯示子程序
  97.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  98. PD0:
  99.               CJNE                            A,#01H,PD1              //判斷A是否等于01H,不等則跳轉(zhuǎn)到PD1
  100.               LCALL                            mansu1                            //進入直行慢速1子程序
  101.               CJNE                            R7,#01H,SL              //判斷R7是否等于01H,不等則跳轉(zhuǎn)到SL
  102.               LCALL                            JSXS                            //進入計數(shù)顯示子程序
  103.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  104. PD1:
  105.               CJNE                            A,#02H,PD2              //判斷A是否等于02H,不等則跳轉(zhuǎn)到PD2
  106.               LCALL                            mansu2                            //進入直行慢速2子程序
  107.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉(zhuǎn)到SL
  108.               LCALL                            JSXS                            //進入計數(shù)顯示子程序
  109.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  110. PD2:
  111.               CJNE                            A,#03H,PD3              //判斷A是否等于03H,不等則跳轉(zhuǎn)到PD3
  112.               LCALL                            mansu                            //進入直行慢速子程序
  113.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉(zhuǎn)到SL
  114.               LCALL                            JSXS                            //進入計數(shù)顯示子程序
  115.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  116. PD3:
  117.               CJNE                            A,#04H,PD4              //判斷A是否等于04H,不等則跳轉(zhuǎn)到PD4
  118.               LCALL                            YZ                                          //進入右轉(zhuǎn)子程序
  119.               MOV                                          R7,#01H                            //給R7賦值01H
  120.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  121. PD4:
  122.               CJNE                            A,#05H,PD5              //判斷A是否等于05H,不等則跳轉(zhuǎn)到PD5
  123.               LCALL                            ZZ                            //進入左轉(zhuǎn)子程序
  124.               MOV                                          R7,#01H                            //給R7賦值01H
  125.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  126. PD5:
  127.               CJNE                            A,#06H,PD6              //判斷A是否等于06H,不等則跳轉(zhuǎn)到PD6
  128.               LCALL                            YZ                            //進入右轉(zhuǎn)子程序
  129.               MOV                                          R7,#01H                            //給R7賦值01H
  130.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  131. PD6:
  132.               CJNE                            A,#07H,SL              //判斷A是否等于07H,不等則跳轉(zhuǎn)到SL
  133.               LCALL                            YZ                            //進入右轉(zhuǎn)子程序
  134.               MOV                                          R7,#01H                                          //給R7賦值01H
  135. SL:            
  136.               LJMP                            MAIN                            //跳轉(zhuǎn)到MAIN
  137. DE600U:                                                        //延時子程序
  138.               MOV                            30H,#200
  139. K1:              NOP
  140.               DJNZ              30H,K1
  141.               RET
  142. DE:                                                                      //延時子程序
  143.               MOV              33H,#10
  144. K4:              MOV              31H,#123
  145. K2:              MOV              32H,#200
  146. K3:              DJNZ              32H,K3
  147.               DJNZ              31H,K2
  148.               DJNZ              33H,K4
  149.               RET            
  150. DEL3S:              MOV                            48H,#60
  151. DEL0:              MOV                            49H,#123
  152. DEL1:              MOV                            50H,#200
  153. DEL2:              DJNZ              50H,DEL2
  154.                             DJNZ              49H,DEL1
  155.                             DJNZ              48H,DEL0
  156.                             RET
  157. ST:                            SETB              P1.4                            //小車停止程序
  158.                             SETB              P1.5
  159.                             SETB              P1.6
  160.                             SETB              P1.7
  161.                             RET
  162. mansu:                                                                      //前進慢速子程序
  163.               MOV                            CCON,#00H
  164.               LCALL                            ST
  165.               MOV                            CCAPM1,#00H
  166.               MOV                            CCAPM3,#00H
  167.               MOV                            CCAP2H,#48
  168.               MOV                            CCAPM2,#42H
  169.               MOV                            CCAP4H,#30
  170.               MOV                            CCAPM4,#42H
  171.               MOV                            CCON,#40H
  172.               RET
  173. mansu1:
  174.               MOV                            CCON,#00H
  175.               LCALL                            ST
  176.               MOV                            CCAPM1,#00H
  177.               MOV                            CCAPM3,#00H
  178.               MOV                            CCAP2H,#35
  179.               MOV                            CCAPM2,#42H
  180.               MOV                            CCAP4H,#20
  181.               MOV                            CCAPM4,#42H
  182.               MOV                            CCON,#40H
  183.               RET
  184. mansu2:
  185.               MOV                            CCON,#00H
  186.               LCALL                            ST
  187.               MOV                            CCAPM1,#00H
  188.               MOV                            CCAPM3,#00H
  189.               MOV                            CCAP2H,#40
  190.               MOV                            CCAPM2,#42H
  191.               MOV                            CCAP4H,#30
  192.               MOV                            CCAPM4,#42H
  193.               MOV                            CCON,#40H
  194.               RET
  195. YZ:              //右轉(zhuǎn)子程序
  196.               MOV                            CCON,#00H
  197.               LCALL                            ST
  198.               MOV                            CCAPM2,#00H
  199.               MOV                            CCAPM3,#00H
  200.               MOV                            CCAPM1,#42H
  201.               MOV                            CCAP1H,#12
  202.               MOV                            CCAPM4,#42H
  203.               MOV                            CCAP4H,#30
  204.               MOV                            CCON,#40H
  205.               RET
  206. ZZ:                            //左轉(zhuǎn)子程序
  207.               MOV                            CCON,#00H
  208.               LCALL                            ST
  209.               MOV                            CCAPM1,#00H
  210.               MOV                            CCAPM4,#00H
  211. ……………………

  212. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

以上資料51hei提供下載:
紅外避障小車.docx (697.52 KB, 下載次數(shù): 20)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美一区 | 亚洲欧美激情国产综合久久久 | 久久88| 久久婷婷国产麻豆91 | 99久久精品一区二区成人 | 在线观看av中文字幕 | 日韩一二三区视频 | 欧美一级片 | 99精品国产一区二区青青牛奶 | 91观看| 精品国产乱码久久久久久蜜退臀 | 欧洲一区二区视频 | 欧美精品一区二区免费 | 九九国产 | 97免费在线视频 | 亚洲精品日韩一区二区电影 | 日韩成人在线一区 | 欧美日韩成人影院 | 国外成人在线视频网站 | 国内精品久久久久久 | 国产欧美日韩一区二区三区在线观看 | 欧美 日韩 视频 | 黄色av免费 | 亚洲成网 | 日韩伦理一区二区 | 久久国产精品一区二区三区 | 日韩在线91 | 国产中文字幕在线 | 国产日韩欧美一区二区 | 国产福利在线 | 国产精品一区二区久久 | 日韩在线观看中文字幕 | 中文字幕乱码一区二区三区 | 国产91黄色 | 午夜精品一区 | 亚洲三区在线观看 | 久久久综合精品 | 亚洲第一在线 | 人人看人人射 | 91精品国产自产精品男人的天堂 | 日韩最新网址 |