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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機舵機循黑線小車程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:442141 發表于 2018-12-8 15:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1.    #include <reg52.h>
  2. sbit pwm = P2^0;    //定義舵機p20

  3. sbit ENA = P3^6;   //定義驅動模塊
  4. sbit ENB = P3^7;   //
  5. sbit IN1 = P3^0;
  6. sbit IN2 = P3^1;
  7. sbit IN3 = P3^2;
  8. sbit IN4 = P3^3;   //定義驅動模       

  9. /*定義光電管,光電管檢測到黑線輸出高電平,否則輸出低電平*/                  
  10. sbit zuoz = P2^7;  //定義最左邊 光電
  11. sbit zuo = P2^6;        //定義中左邊 光電
  12. sbit you = P2^5;        //定義中右邊 光電
  13. sbit youy = P2^4;  //定義最右邊光電模塊  


  14. unsigned int         sum1 = 0; //定義幾個光電管的和1
  15. unsigned int         sum2= 0;  //定義幾個光電管的和2
  16. unsigned int         i ;

  17. void zhengzhuan();            //前進
  18. void tingzhi();            //停止
  19. void youzhuan();
  20. void zuozhuan();
  21. void quansu();
  22. void InitTimer();   
  23. typedef unsigned int uint;
  24. typedef unsigned char uchar;
  25. void delay_ms(uint x)
  26. {
  27.         uint i;
  28.         while(x--)
  29.         for(i=0;i<125;i++);
  30. }
  31. void delay(int z)//延時函數,調節電機轉速
  32. {
  33.     int i,j;
  34.         for(i=2;i>0;i--)
  35.         for(j=z;j>0;j--);       
  36. }


  37. void InitTimer(void)
  38. {
  39.         TMOD=0x11;//開定時器0,1
  40.         TH0=-18432/256;//定時20MS,20MS為一個周期
  41.         TL0=-18432%256;
  42.         TH1=-1382/256;//定時1.5MS,這時舵機處于0度
  43.         TL1=-1382%256;
  44.         EA=1;//開總斷
  45.         TR0=1;//開定時器0
  46.         ET0=1;
  47.         TR1=1;//開定時器1
  48.         ET1=1;
  49. }

  50.                            //輸出PWM信號
  51. uint pwm_value=1382;                     //初值為1.5ms
  52. uint value[]={1150,1290,1382,1474,1580,};//定義1.2ms,1.4ms,1.5ms,1.6ms,1.75ms;

  53. void main()
  54. {

  55.          while(1)
  56.    {
  57.          uint j;
  58.         InitTimer();
  59.         pwm_value=1382;
  60.     sum1=zuoz&zuo&you&youy;
  61.         sum2=zuoz|zuo|you|youy;

  62.    if(zuoz==1&&zuo==0)
  63.                  j=0;
  64.    else if(zuo==1&&you==0&&zuoz==0)
  65.          j=1;
  66.    else if(you==1&&zuo==0&&youy==0)
  67.          j=2;
  68.    else if(youy==1&&you==0)
  69.          j=3 ;
  70.    else if(sum1==1) //所有光電管輸出高電平,停止
  71.                  j=4;
  72.    else if(sum2==0)  //所有光電管輸出低電平,前進
  73.          j=5;
  74.    else  j= 6 ;
  75.                  switch(j)
  76.                  {

  77.                     case 0: pwm_value=value[4]; delay_ms(100);break;    //舵機輸出小偏轉角度 。高電平1.3ms
  78.                           case 1: pwm_value=value[3]; delay_ms(50);break;
  79.                         case 2: pwm_value=value[1]; delay_ms(50);break;
  80.                          case 3: pwm_value=value[0]; delay_ms(100);break;
  81.                         case 4: pwm_value=value[2]; delay_ms(50);break;
  82.                         case 5: pwm_value=value[2]; delay_ms(50);break;
  83.                          default : break;
  84.                  
  85.                  }
  86.    
  87.                    while((zuoz==1)&&(zuo==0))//判斷當左邊光電管遇到黑線,
  88.                 {                                                        //右邊和前邊的光電管遇到白線時左轉
  89.                         zuozhuan();//調用左轉函數
  90.                 }
  91.                 while((zuoz==0)&&(zuo==1)&&(you==0))//判斷當右邊光電管遇到黑線,
  92.                 {                                                        //左邊和前邊的光電管遇到白線時右轉       
  93.                     zhengzhuan();//
  94.                 }
  95.                 while((zuo==0)&&(you==1)&&(youy==0))//判斷當左邊光電管遇到黑線,右邊光電管也遇到黑線
  96.                 {                                                        //前邊的光電管遇到白線時停止
  97.                      zhengzhuan();//調用停止函數
  98.                 }
  99.             while((you==0)&&(youy==1))

  100.                 {       
  101.                       youzhuan();
  102.             }

  103.             while((zuo==0)&&(zuoz==0)&&(you==0)&&(youy==0))       

  104.                 {       
  105.                      zhengzhuan();
  106.                 }
  107.                 while((zuo==1)&&(zuoz=1)&&(you==1)&&(youy==1))
  108.                 {
  109.                     tingzhi();

  110.                
  111.                 }
  112. }

  113. }
  114.   /*以下調用函數*/




  115. void timer0(void) interrupt 1//定時器0中斷函數
  116. {
  117.         pwm=1;
  118.         TH0=-18432/256;
  119.         TL0=-18432%256;
  120.         TR1=1;
  121. }

  122. void timer1(void) interrupt 3//定時器1中斷函數
  123. {
  124.         pwm=0;
  125.         TH1=-pwm_value/256;
  126.         TL1=-pwm_value%256;
  127.         TR1=0;
  128. }


  129. void tingzhi()
  130. {

  131.    ENA=1;
  132.    ENB=1;
  133.    IN1=0;
  134.    IN2=0;
  135.    IN3=0;
  136.    IN4=0;
  137.   }

  138. void zhengzhuan()//左右輪協同前進子函數
  139. {        ENA=1;
  140.     ENB=1;
  141.         IN1=1;
  142.         IN2=0;
  143.         IN3=1;
  144.         IN4=0;
  145.         delay(10-1);//pwm調速
  146.         IN1=0;
  147.     IN2=0;
  148.         IN3=0;
  149.         IN4=0;
  150.         delay(1);
  151. }
  152. void zuozhuan()//左右輪協同左轉子函數
  153. {        ENA=1;
  154.     ENB=1;
  155.         IN1=0;
  156.         IN2=0;
  157.         IN3=1;
  158.         IN4=0;
  159.         delay(10-1);//pwm調速
  160.         IN1=0;
  161.     IN2=0;
  162.         IN3=0;
  163.         IN4=0;
  164.         delay(1);
  165. }
  166. void youzhuan()//左右輪協同右轉子函數
  167. {        ENA=1;
  168.     ENB=1;
  169.         IN1=1;
  170.         IN2=0;
  171.         IN3=0;
  172.         IN4=0;
  173.         delay(10-1);//pwm調速
  174.         IN1=0;
  175.     IN2=0;
  176.         IN3=0;
  177.         IN4=0;
  178.         delay(1);
  179. }
  180. void quansu()
  181. {
  182.   ENA=1;
  183.   ENB=1;
  184.   IN1=1;
  185.   IN2=0;
  186.   IN3=1;
  187.   IN4=0;


  188. }
復制代碼

所有資料51hei提供下載:
sad.zip (1.54 KB, 下載次數: 20)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本在线一区二区 | 黄色大片网站 | 久久精品日 | 亚洲精品99 | 亚洲成人福利视频 | 欧美精品福利 | 91国在线观看 | 99久久99| 特a毛片| 中文字幕av网 | 理伦毛片 | 狠狠天天| 国产精品一区二区欧美黑人喷潮水 | 天天躁日日躁狠狠躁2018小说 | 成人高清视频在线观看 | 高清国产一区二区 | 欧美影院| 男女视频在线观看网站 | 亚洲免费在线观看视频 | 色橹橹欧美在线观看视频高清 | 久在线 | 亚洲精品成人 | 欧美午夜影院 | 成人欧美一区二区三区黑人孕妇 | 精品国产18久久久久久二百 | 精品久久久久久久久久久久 | 精品国产欧美 | 午夜激情国产 | 美女视频黄的 | 国产精品久久久久久久久久免费 | 免费亚洲婷婷 | 欧美精品在线播放 | 中文字幕二区三区 | 91精品久久久久久久久中文字幕 | 国产三级精品三级在线观看四季网 | 国产成人亚洲精品自产在线 | 中文字幕视频免费 | 亚洲精品一区二区 | 久久亚洲高清 | 91欧美精品 | 国产福利在线 |