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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

小車直線行駛單片機編程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:583531 發(fā)表于 2019-7-13 16:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
小車直線行駛編程部分

單片機源程序如下:
  1. #include "REG52.H"
  2. #include <intrins.h>   //包含nop等系統(tǒng)函數(shù)
  3. #include <stdio.h>

  4. #define uint unsigned int
  5. #define uchar unsigned char



  6. //按鍵引腳定義
  7. sbit key = P2^0;

  8. //定義電機引腳
  9. sbit Left_motor_go=P2^4;           //左電機前進(jìn)AIN2
  10. sbit Left_motor_back=P2^3;           //左電機后退AIN1
  11. sbit Right_motor_go=P2^1;           //右電機前進(jìn)BIN2
  12. sbit Right_motor_back=P2^2;           //右電機后退BIN1

  13. sbit TrackSensorLeftPin2  =  P1^1;   
  14. sbit TrackSensorLeftPin1  =  P1^0;   
  15. sbit TrackSensorRightPin1 =  P1^2;   
  16. sbit TrackSensorRightPin2 =  P1^3;  

  17. //紅外傳感器采集的數(shù)據(jù)變量
  18. uchar SensorValue1;
  19. uchar SensorValue2;
  20. uchar SensorValue3;
  21. uchar SensorValue4;

  22. //定義角度值
  23. int myangle = 0;//舵機角度定義
  24. int servo_p = 0;

  25. //定義舵機引腳
  26. sbit ServoPin=P0^6;

  27. uchar pwm_val_left  =0;//變量定義
  28. uchar pwm_val_right =0;
  29. uchar set_pwm_val_left = 0;
  30. uchar set_pwm_val_right = 0;

  31. sbit LED1 = P2^5;
  32. sbit LED2 = P2^6;

  33. /*
  34. *   毫秒級延時
  35. */
  36. void delay(uint xms)                               
  37. {
  38.         uint i,j;
  39.         for(i=xms;i>0;i--)                     
  40.                 for(j=120;j>0;j--);
  41. }



  42. /*
  43. *   舵機函數(shù)
  44. */
  45. void set_angle(int angle)
  46. {
  47.     if(angle > 18)
  48.         angle = 18;
  49.     if(angle < 8)
  50.         angle = 8;
  51.     myangle = angle;
  52. }

  53. /*
  54. *   電機運行程序,僅支持電機正轉(zhuǎn)
  55. */
  56. void run(uchar left_speed,uchar right_speed)
  57. {
  58.     if(left_speed >100)
  59.         left_speed = 100;
  60.     if(right_speed >100)
  61.         right_speed = 100;
  62.         set_pwm_val_left = left_speed;
  63.         set_pwm_val_right = right_speed;
  64.           return;
  65. }

  66. /*
  67. *   傳感器值獲取函數(shù),將引腳值賦值給變量以防止誤寫引腳狀態(tài)。
  68. */
  69. void get_sensor(void)
  70. {
  71.     SensorValue1 = TrackSensorLeftPin1;
  72.     SensorValue2 = TrackSensorLeftPin2;
  73.     SensorValue3 = TrackSensorRightPin1;
  74.     SensorValue4 = TrackSensorRightPin2;   
  75. }

  76. /*
  77. *   發(fā)車按鍵,調(diào)用此函數(shù),若按鍵未按下,則程序一直死在此函數(shù)
  78. */
  79. void key_scan(void)
  80. {
  81.         while (key!=0);       //當(dāng)按鍵沒有被按下一直循環(huán)
  82.           while (key==0)        //當(dāng)按鍵被按下時
  83.           {
  84.             delay(10);                //延時10ms
  85.             if (key==0)         //第二次判斷按鍵是否被按下
  86.             {   
  87.                       delay(100);   
  88.                       while (key==0);   //判斷按鍵是否被松開   
  89.             }   
  90.           }
  91. }

  92. /*
  93. *   初始化函數(shù)
  94. */
  95. void init(void)
  96. {
  97.     //定時器0控制車速
  98.     TMOD|=0X01;  //定時器0工作方式1
  99.     TH0=0XFF;    //100us定時,裝入初值
  100.     TL0=0XA3;
  101.     TR0=1;                 //啟動T0工作
  102.     ET0=1;                 //允許T0中斷
  103.     EA =1;             //開總中斷
  104.    
  105.     //舵機引腳初始化為高電平
  106.     Left_motor_back = 0;    //關(guān)反向電橋
  107.     Right_motor_back = 0;   
  108.    
  109.     ServoPin=1; //舵機電平拉高

  110.     set_angle(13);  //舵機初始狀態(tài)對正
  111. }

  112. /*
  113. *   方波生成邏輯
  114. */
  115. void timer0() interrupt 1  
  116. {
  117.         TH0=0XFF;                         //100Us定時
  118.         TL0=0XA3;
  119.         servo_p++;
  120.         //舵機處理部分
  121.         if(servo_p <= myangle)
  122.         {
  123.                 ServoPin=1;
  124.         }               
  125.         else if(servo_p < 200)
  126.         {
  127.                 ServoPin=0;
  128.         }
  129.         else
  130.         {
  131.                 servo_p = 0;
  132.         }
  133.         pwm_val_left++;
  134.         if(pwm_val_left<set_pwm_val_left)
  135.         {
  136.                 Left_motor_go = 1;
  137.         }
  138.         else if(pwm_val_left<100)
  139.         {
  140.                 Left_motor_go = 0;
  141.         }
  142.         else
  143.         {
  144.                 pwm_val_left = 0;
  145.         }

  146.         pwm_val_right++;
  147.         if(pwm_val_right<set_pwm_val_right)
  148.         {
  149.                 Right_motor_go = 1;
  150.         }
  151.         else if(pwm_val_right<100)
  152.         {
  153.                 Right_motor_go = 0;
  154.         }
  155.         else
  156.         {
  157.                 pwm_val_right = 0;
  158.         }
  159. }





  160. //簡單實現(xiàn)循跡樣例
  161. void sensor_adjust(void)
  162. {
  163.     //更新傳感器狀態(tài),必須有
  164.     get_sensor();

  165.     if((SensorValue2 == 1)&&(SensorValue3 == 1))
  166.     {
  167.         set_angle(13);
  168.     }
  169.             if((SensorValue2 == 1)&&(SensorValue3 == 1)&&(SensorValue1 == 1)&&(SensorValue4 == 1))
  170.     {
  171.         set_angle(13);
  172.                 run(0,0);
  173.     }

  174.     if(SensorValue1 == 1)
  175.     {
  176.         if(SensorValue2 == 1)
  177.             set_angle(12);
  178.         else
  179.             set_angle(11);
  180.     }
  181.     else if(SensorValue2 == 1)
  182.     {
  183.         set_angle(12);
  184.     }
  185.     else if(SensorValue3 == 1)
  186.     {
  187.         set_angle(14);
  188.     }
  189.     else if(SensorValue4 == 1)
  190.     {
  191.         if(SensorValue3 == 1)
  192.             set_angle(13);
  193.         else
  194.             set_angle(14);
  195.     }
  196. }


  197. void main()
  198. {
  199.     init();
  200.     key_scan();
  201.         run(35,35);
  202.         //調(diào)用按鍵掃描函數(shù)
  203.     while(1)
  204.     {               
  205.                 sensor_adjust();
  206.         }
  207. }
復(fù)制代碼

程序51hei提供下載:
第三.zip (31.16 KB, 下載次數(shù): 6)


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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-7-13 23:40 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

板凳
ID:363259 發(fā)表于 2019-10-9 09:34 | 只看該作者
學(xué)習(xí)參考一下
回復(fù)

使用道具 舉報

地板
ID:622547 發(fā)表于 2019-10-11 20:52 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久婷婷香蕉热狠狠综合 | 在线观看中文字幕 | 国产精品一二三区 | 国产一区二区在线播放 | 日韩一二三区视频 | 午夜电影网站 | 97国产一区二区 | 欧美一级在线 | 国产免费av网 | 成人av在线播放 | 免费一二区| 少妇久久久久 | 国产精品资源在线 | 国产激情片在线观看 | 一区二区三区中文字幕 | 国产黄色网址在线观看 | 午夜视频免费网站 | 国产精品日韩欧美一区二区三区 | 精品国产乱码久久久久久闺蜜 | 草草视频在线观看 | 色偷偷人人澡人人爽人人模 | 97精品视频在线 | 成人在线观看网站 | 69av在线视频 | 日韩欧美精品 | 欧美日韩电影一区 | 水蜜桃久久夜色精品一区 | 日本激情视频在线播放 | 国产一区二区三区四区 | 欧美伊人影院 | 免费在线视频精品 | 亚洲欧洲成人 | 中文字幕日韩在线 | 91在线网站 | 国产一二三区电影 | 日韩av一二三区 | 亚洲天堂精品一区 | 国产精品伦一区二区三级视频 | 亚洲成年人免费网站 | 午夜在线影院 | 国产片侵犯亲女视频播放 |