找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4340|回復: 1
打印 上一主題 下一主題
收起左側(cè)

8051單片機尋跡小車程序及其原理圖

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:744327 發(fā)表于 2020-5-22 14:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    分享:   
    8051單片機尋跡小車程序及其原理圖  
   隨著現(xiàn)代電子技術(shù)的飛速發(fā)展,通信技術(shù)也取得了長足的進步。在無線通信領(lǐng)域,越來越多的通信產(chǎn)品大量涌現(xiàn)出來。但設(shè)計無線數(shù)據(jù)傳輸產(chǎn)品往往需要相當?shù)臒o線電專業(yè)知識和價格高昂的專業(yè)設(shè)備,因而影響了用戶的使用和新產(chǎn)品的開發(fā)。
    卓越的專業(yè)51黑電子論壇,會讓我們?nèi)松雇尽?/font>

設(shè)計一種以89C51單片機為控制核心,具備避障、循跡和遙控功能的智能小車.使用光電開關(guān)檢測障礙,通過控制電機轉(zhuǎn)向來進行壁障;使用紅外傳感器尋找線路,控制智能小車自行循跡;使用紅外遙控器實現(xiàn)前進、后退、向右、向左、停止和發(fā)動功能.小車由底盤、傳感器和車載電路組成,車載電路包括電源、單片機最小系統(tǒng)和驅(qū)動.系統(tǒng)采用了模塊化設(shè)計方法,結(jié)構(gòu)簡單,可靠性高.

單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar  unsigned  char
  3. #define  uint  unsigned  int
  4. sbit R=P1^0;//左邊傳感器
  5. sbit M=P1^1;//中間傳感器
  6. sbit L=P1^2;//右邊傳感器
  7. sbit RM=P1^3;//右邊電機
  8. sbit LM=P1^4;//左邊電機

  9. void  turnLLL(void);//左轉(zhuǎn)45度
  10. void  turnLL(void);//左轉(zhuǎn)30度
  11. void  turnL(void);//左轉(zhuǎn)15度
  12. void  turn(void);//居中
  13. void  turnR(void);//右轉(zhuǎn)15度
  14. void  turnRR(void);//右轉(zhuǎn)30度
  15. void  turnRRR(void);//右轉(zhuǎn)45度
  16. void  delay(uint z);//延時0.1ms
  17. void main()
  18. {
  19.           uint i;
  20.          DDRA=0X00;
  21.         DDRB=0XFF;
  22.     DDRD|=0X30;
  23.         TCCR1A=0x91; //8位相位修正PWM 8000000/(64*2*256)=244.14hz
  24.         TCCR1B=0x03; //clk/64
  25.         OCR1A=250;        //初值占空比100%
  26.         while(1)
  27.         {
  28.                  PINA=i;
  29.                 for(i=0;i<8;i++)
  30.                 {
  31.                            if(PINA==0xf7)//加速前進4燈1111,0111
  32.                           {
  33.                                OCR1A=170;//占空比100%/202
  34.                              turn();//居中
  35.                      }
  36.                          if(PINA==0xef)//加速前5燈1110,1111
  37.                           {
  38.                                OCR1A=170;//占空比100%
  39.                              turn();//居中
  40.                      }
  41.                          if(PINA==0xe7)//加速前進4、5燈1110,0111
  42.                           {
  43.                                OCR1A=170;//占空比100%
  44.                              turn();//居中
  45.                      }
  46.                      if(PINA==0xcf)//速度稍減前進5、6燈1100,1111
  47.                      {
  48.                               OCR1A=170;//占空比90%/176
  49.                             turnL();//左轉(zhuǎn)-15度
  50.                      }
  51.                           if(PINA==0xdf)//速度稍減前進6燈1101,1111
  52.                      {
  53.                               OCR1A=120;//占空比90%/176
  54.                             turnL();//左轉(zhuǎn)-15度
  55.                      }
  56.                      if(PINA==0x9f)//速度再減前進6、7燈1001,1111
  57.                      {
  58.                               OCR1A=110;//占空比80%/150
  59.                             turnLL();//左轉(zhuǎn)-30度
  60.                      }
  61.                             if(PINA==0xbf)//速度再減前進7燈1011,1111
  62.                      {
  63.                               OCR1A=110;//占空比80%/150
  64.                             turnLL();//左轉(zhuǎn)-30度
  65.                      }
  66.                       if(PINA==0x3f)//速度減前進7、8燈0011,1111
  67.                       {
  68.                               OCR1A=90;//占空比70%/150
  69.                             turnLLL();//左轉(zhuǎn)-45度
  70.                       }
  71.                       if(PINA==0X7f)//速度稍減前進8燈0111,1111
  72.                       {
  73.                               OCR1A=90;//占空比70%/150
  74.                         turnLLL();//右轉(zhuǎn)45度
  75.                       }
  76.                      if(PINA==0xf3)//速度稍減前進3、4燈1111,0011
  77.                      {
  78.                               OCR1A=120;//占空比90%/176
  79.                             turnR();//右轉(zhuǎn)15度
  80.                      }
  81.                            if(PINA==0xfb)//速度稍減前進3燈1111,1011
  82.                      {
  83.                               OCR1A=120;//占空比90%/176
  84.                             turnR();//右轉(zhuǎn)15度
  85.                      }
  86.                      if(PINA==0Xf9)//速度再減前進2、3燈1111,1001
  87.                      {
  88.                               OCR1A=110;//占空比80%150
  89.                             turnRR();//右轉(zhuǎn)30度
  90.                     }
  91.                             if(PINA==0Xfd)//速度再減前進2燈1111,1101
  92.                      {
  93.                               OCR1A=110;//占空比80%/150
  94.                             turnRR();//右轉(zhuǎn)30度
  95.                     }
  96.                     if(PINA==0Xfc)//速度稍減前進1、2燈1111,1100
  97.                     {
  98.                             OCR1A=90;//占空比70%/150
  99.                           turnRRR();//右轉(zhuǎn)45度
  100.                     }
  101.                     if(PINA==0Xfe)//速度稍減前進1燈1111,1110
  102.                     {
  103.                               OCR1A=90;//占空比70%/150
  104.                            turnRRR();//右轉(zhuǎn)45度
  105.                     }
  106.                 }
  107.         }
  108. }

  109. /*-45度*/
  110. void  turnLLL()
  111. {
  112.          uchar i;
  113.         DDRB=0XFF;
  114.         PORTB=0XFF;
  115.         for(i=0;i<5;i++)
  116.         {
  117.                 PORTB&=~BIT(0);                                          
  118.                 delay(18);        
  119.                 PORTB|=BIT(0);
  120.                 delay(4);
  121.         }
  122. }
  123. /*-30度*/
  124. void  turnLL()
  125. {
  126.          uchar i;
  127.         DDRB=0XFF;
  128.         PORTB=0XFF;
  129.         for(i=0;i<5;i++)
  130.         {
  131.                 PORTB&=~BIT(0);                                          
  132.                 delay(18);        
  133.                 PORTB|=BIT(0);
  134.                 delay(6);
  135.         }
  136. }
  137. /*-15度*/
  138. void  turnL()
  139. {
  140.          uchar i;
  141.         DDRB=0XFF;
  142.         PORTB=0XFF;
  143.         for(i=0;i<5;i++)
  144.         {
  145.                 PORTB&=~BIT(0);                                          
  146.                 delay(18);        
  147.                 PORTB|=BIT(0);
  148.                 delay(8);
  149.         }
  150. }

  151. /*0度居中*/
  152. void  turn()//居中
  153. {
  154.          uchar i;
  155.         DDRB=0XFF;
  156.         PORTB=0XFF;
  157.         for(i=0;i<5;i++)
  158.         {
  159.                 PORTB&=~BIT(0);                                          
  160.                 delay(18);        
  161.                 PORTB|=BIT(0);
  162.                 delay(10);
  163.         }
  164. }

  165. /*15度*/
  166. void  turnR()
  167. {
  168.          uchar i;
  169.         DDRB=0XFF;
  170.         PORTB=0XFF;
  171.         for(i=0;i<5;i++)
  172.         {
  173.                 PORTB&=~BIT(0);                                          
  174.                 delay(18);        
  175.                 PORTB|=BIT(0);
  176.                 delay(12);
  177.         }
  178. }
  179. /*30度*/
  180. void  turnRR()
  181. {
  182.          uchar i;
  183.         DDRB=0XFF;
  184.         PORTB=0XFF;
  185.         for(i=0;i<5;i++)
  186.         {
  187.                 PORTB&=~BIT(0);                                          
  188.                 delay(18);        
  189.                 PORTB|=BIT(0);
  190.                 delay(14);
  191.         }
  192. }
  193. /*45度*/
  194. void  turnRRR()
  195. {
  196.          uchar i;
  197.         DDRB=0XFF;
  198.         PORTB=0XFF;
  199.         for(i=0;i<5;i++)
  200.         {
  201.                 PORTB&=~BIT(0);                                          
  202.                 delay(18);        
  203.                 PORTB|=BIT(0);
  204.                 delay(17);
  205.         }
  206. }

  207. /*定時0.1MS*/
  208. void  delay(uint z)
  209. {
  210.            uint i,j;
  211.           for(i=0;i<z;i++)
  212.                           for(j=0;j<90;j++);
  213. }
復制代碼

篇幅很長,請下載查閱。


51hei.png (4.36 KB, 下載次數(shù): 65)

51hei.png

8051單片機尋跡小車程序及其原理圖.rar

449.51 KB, 下載次數(shù): 91, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發(fā)
ID:508502 發(fā)表于 2020-9-14 16:01 | 只看該作者
先收藏,謝謝分享
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表