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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3447|回復: 0
打印 上一主題 下一主題
收起左側

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

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

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

基本內容
在一個有障礙物的區域內,小車可以自由前進,不碰撞到任何障礙物。
在行進的過程中,記錄下遇到障礙物的個數
2.擴展內容
小車在光源的引導下,進入停車區到達車庫并停止

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

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

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


第二節 程序編寫
PWM調速:
調用調速模塊,設置各項初值以及PWM調速的頻率,最后改變其占空比來實現對小車速度的控制。
控制障礙物方位;
設置一個寄存器20H,使其高五位清零,再把三個傳感器分別檢測到障礙物個數時的情況列舉出來,設置有障礙物為1沒有障礙物為0,并和20H相與,最后得到檢測障礙物方向的結論。
障礙物數目顯示:
在轉向時說明是檢測到了前方有障礙物,讓R7置1,轉向變為直行說明前方已經沒有了障礙物,就檢測R7是否為1,如果為1,就說明有障礙物,那顯示就加一
紅外檢測:
先關閉所有發射端口,設定發送脈沖數目,然后接受寄存器清零,然后啟動第一個發射模塊,然后給延時,判斷是否接受到反射信號,接收到就脈沖數目加1,沒有就停止發射,延時,然后判斷是否發射10次,沒有就繼續啟動發射模塊重復直到10次發射完畢,然后判斷接受脈沖數目是否等于或者大于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                            //關閉紅外發射端口P3.2
  29.               CLR                                          P3.4                            //關閉紅外發射端口P3.4
  30.               CLR                                          P3.7                            //關閉紅外發射端口P3.7
  31.               MOV                                          R0,#10                            //設定脈沖發射數目
  32.               MOV                                          R1,#00                            //接收寄存器清零
  33. LOOP0:
  34.               SETB                            P3.7                            //打開紅外發射端口P3.7
  35.               LCALL                            DE600U                            //延時
  36.               JB                                          P2.3,LOOP1//判斷接收端口P2.3是否為1,不是則跳轉到LOOP1
  37.               INC                                          R1                            //接收端口為1,R1加一
  38. LOOP1:
  39.               CLR                                          P3.7                            //關閉紅外發射端口P3.7
  40.               LCALL                            DE600U                            //延時
  41.               DJNZ                            R0,LOOP0              //判斷R0減一是否為0不為零則跳轉到LOOP0
  42.               CJNE                            R1,#2,LOOP2                            //判斷R1是否等于2,不等則跳轉
  43. LOOP2:            
  44.             
  45.               JC                                          N2                            //有進位、即CF=1,則跳轉N2            
  46.               SETB                            02H                            //02H置1
  47. N2:            
  48.             
  49.               CLR                                          P3.2                            //關閉紅外發射端口P3.2
  50.               CLR                                          P3.4                            //關閉紅外發射端口P3.4
  51.               CLR                                          P3.7                            //關閉紅外發射端口P3.7
  52.               MOV                                          R2,#10                            //設定脈沖發射數目
  53.               MOV                                          R3,#00              //接收寄存器清零
  54. LOOP3:
  55.               SETB                            P3.4                            //打開紅外發射端口P3.4
  56.               LCALL                            DE600U                            //延時
  57.               JB                                          P3.5,LOOP4//判斷接收端口P3.5是否為1,不是則跳轉到LOOP4
  58.               INC                                          R3                            //接收端口為1,R3加一
  59. LOOP4:
  60.               CLR                                          P3.4                            //關閉紅外發射端口P3.4
  61.               LCALL                            DE600U                            //延時
  62.               DJNZ                            R2,LOOP3              //判斷R2減一是否為0不為零則跳轉到LOOP3
  63.               CJNE                            R3,#2,LOOP5                            //判斷R3是否等于2,不等則跳轉到LOOP5
  64. LOOP5:
  65.             
  66.               JC                                          MAIN1              //有進位、即CF=1,則跳轉MAIN1
  67.               SETB                            01H                            //01H置1            
  68. MAIN1:            
  69.             
  70.               CLR                                          P3.2                            //關閉紅外發射端口P3.2
  71.               CLR                                          P3.4                            //關閉紅外發射端口P3.4
  72.               CLR                                          P3.7                            //關閉紅外發射端口P3.7
  73.               MOV                                          R4,#10                            //設定脈沖發射數目
  74.               MOV                                          R5,#00              //接收寄存器清零
  75. LOOP6:
  76.               SETB                            P3.2                            //打開紅外發射端口P3.2
  77.               LCALL                            DE600U                            //延時
  78.               JB                                          P3.3,LOOP7//判斷接收端口P3.3是否為1,不是則跳轉到LOOP7
  79.               INC                                          R5                            //接收端口為1,R5加一
  80. LOOP7:
  81.               CLR                                          P3.2                            //關閉紅外發射端口P3.2
  82.               LCALL                            DE600U                            //延時
  83.               DJNZ                            R4,LOOP6              //判斷R4減一是否為0不為零則跳轉到LOOP6
  84.               CJNE                            R5,#2,LOOP8                            //判斷R5是否等于2,不等則跳轉到LOOP8
  85. LOOP8:
  86.             
  87.               JC                                          PD//有進位、即CF=1,則跳轉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,不等則跳轉到PD0
  94.               LCALL                            mansu                            //進入直行慢速子程序
  95.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉到SL
  96.               LCALL                            JSXS                            //進入計數顯示子程序
  97.               LJMP                            MAIN                            //跳轉到MAIN
  98. PD0:
  99.               CJNE                            A,#01H,PD1              //判斷A是否等于01H,不等則跳轉到PD1
  100.               LCALL                            mansu1                            //進入直行慢速1子程序
  101.               CJNE                            R7,#01H,SL              //判斷R7是否等于01H,不等則跳轉到SL
  102.               LCALL                            JSXS                            //進入計數顯示子程序
  103.               LJMP                            MAIN                            //跳轉到MAIN
  104. PD1:
  105.               CJNE                            A,#02H,PD2              //判斷A是否等于02H,不等則跳轉到PD2
  106.               LCALL                            mansu2                            //進入直行慢速2子程序
  107.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉到SL
  108.               LCALL                            JSXS                            //進入計數顯示子程序
  109.               LJMP                            MAIN                            //跳轉到MAIN
  110. PD2:
  111.               CJNE                            A,#03H,PD3              //判斷A是否等于03H,不等則跳轉到PD3
  112.               LCALL                            mansu                            //進入直行慢速子程序
  113.               CJNE                            R7,#01H,SL                            //判斷R7是否等于01H,不等則跳轉到SL
  114.               LCALL                            JSXS                            //進入計數顯示子程序
  115.               LJMP                            MAIN                            //跳轉到MAIN
  116. PD3:
  117.               CJNE                            A,#04H,PD4              //判斷A是否等于04H,不等則跳轉到PD4
  118.               LCALL                            YZ                                          //進入右轉子程序
  119.               MOV                                          R7,#01H                            //給R7賦值01H
  120.               LJMP                            MAIN                            //跳轉到MAIN
  121. PD4:
  122.               CJNE                            A,#05H,PD5              //判斷A是否等于05H,不等則跳轉到PD5
  123.               LCALL                            ZZ                            //進入左轉子程序
  124.               MOV                                          R7,#01H                            //給R7賦值01H
  125.               LJMP                            MAIN                            //跳轉到MAIN
  126. PD5:
  127.               CJNE                            A,#06H,PD6              //判斷A是否等于06H,不等則跳轉到PD6
  128.               LCALL                            YZ                            //進入右轉子程序
  129.               MOV                                          R7,#01H                            //給R7賦值01H
  130.               LJMP                            MAIN                            //跳轉到MAIN
  131. PD6:
  132.               CJNE                            A,#07H,SL              //判斷A是否等于07H,不等則跳轉到SL
  133.               LCALL                            YZ                            //進入右轉子程序
  134.               MOV                                          R7,#01H                                          //給R7賦值01H
  135. SL:            
  136.               LJMP                            MAIN                            //跳轉到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:              //右轉子程序
  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:                            //左轉子程序
  207.               MOV                            CCON,#00H
  208.               LCALL                            ST
  209.               MOV                            CCAPM1,#00H
  210.               MOV                            CCAPM4,#00H
  211. ……………………

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

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

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线欧美小视频 | 亚洲一区电影 | 欧美激情一区二区 | 亚洲精品乱码久久久久久久久 | 久久99这里只有精品 | 高清黄色 | 荷兰欧美一级毛片 | 国产日韩欧美一区二区在线播放 | 精品国产一区二区在线 | 天天搞天天操 | 国产午夜在线观看 | 91国产视频在线观看 | 少妇一区二区三区 | 91久久精品国产91久久性色tv | 国产一区二区三区四区在线观看 | av免费看在线 | 日韩欧美网 | 成人福利电影 | 亚洲精品一级 | 中文字幕在线电影观看 | 韩国精品一区 | 亚洲精品一 | 日韩精品免费在线 | 中文字幕精品一区二区三区精品 | 久久精品日产第一区二区三区 | 黄色av免费网站 | 91在线网站 | 日韩视频免费在线 | 一级毛片免费 | 最新国产视频 | 欧美精品一区二区三区在线播放 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 国产精品久久久久久久久免费相片 | 精品久久久久国产免费第一页 | 一区二区三区欧美大片 | 亚洲一区二区三区四区五区午夜 | 国内精品久久精品 | 成人免费淫片aa视频免费 | 成年人的视频免费观看 | 一级毛片视频在线观看 | 日韩在线高清 |