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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機小車測距避障并調速的源碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:321034 發表于 2018-5-22 21:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  簡單的編程  ,使用51單片機STC89C52進行編程,  期間用到1個超聲波HC-SR04, 1個電機驅動模塊L298N    實現了  簡單的避障和 調速的功能,

源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

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

  5. sbit ENA_pwm = P2^6;    //PWM信號端
  6. sbit ENB_pwm = P2^7;    //PWM信號端
  7.    
  8. sbit L298N_INA = P1^0;        
  9. sbit L298N_INB = P1^1;        
  10. sbit L298N_INC = P1^2;        
  11. sbit L298N_IND = P1^3;

  12. sbit Trlg1 = P2^0;
  13. sbit Echo1 = P2^1;


  14. unsigned char pwm_val_left  =0;    //變量定義
  15. unsigned char pwm_val_right =0;

  16. unsigned char push_val_left =0;// 左電機占空比N/10
  17. unsigned char push_val_right=0;// 右電機占空比N/10

  18. unsigned int  time = 0;        //傳輸時間
  19. unsigned long S = 0;           //距離
  20. bit flag = 0;                  //超出測量范圍標志位

  21. void delay(uint z)        //毫秒級延時
  22. {
  23.         uint x,y;
  24.         for(x = z; x > 0; x--)
  25.           {
  26.                 for(y = 114; y > 0 ; y--);
  27.           }
  28. }
  29. void Delay10us_CSB(uchar i)   //10us延時函數 超聲波模塊使用
  30. {
  31.         uchar j;
  32.         do
  33.           {
  34.              j = 10;
  35.              do
  36.                  {
  37.                 _nop_();
  38.                     _nop_();
  39.              }
  40.                     while(--j);
  41.         }
  42.                while(--i);
  43. }

  44. void Go_forward()
  45. {
  46.     push_val_left=4;
  47.     push_val_right=4;
  48.     L298N_INA = 0;
  49.     L298N_INB = 1;
  50.     L298N_INC = 1;
  51.     L298N_IND = 0;

  52. }

  53. void Go_back()
  54. {
  55.     push_val_left=4;
  56.     push_val_right=4;
  57.     L298N_INA = 1;
  58.     L298N_INB = 0;
  59.     L298N_INC = 0;
  60.     L298N_IND = 1;        
  61. }

  62. void Go_left()
  63. {
  64.     push_val_left=3;
  65.     push_val_right=3;
  66.     L298N_INA = 0;
  67.     L298N_INB = 1;
  68.     L298N_INC = 1;
  69.     L298N_IND = 1;
  70. }
  71. /*
  72. void Go_right()
  73. {
  74.     push_val_left=3;
  75.     push_val_right=3;
  76.     L298N_INA = 1;
  77.     L298N_INB = 0;
  78.     L298N_INC = 0;
  79.     L298N_IND = 0;
  80. }
  81. */
  82. void Stop()
  83. {
  84.     L298N_INA = 0;
  85.     L298N_INB = 0;
  86.     L298N_INC = 0;
  87.     L298N_IND = 0;
  88. }              
  89. void pwm_out_left_moto(void)
  90. {  
  91.                 if(pwm_val_left<=push_val_left)
  92.                         ENA_pwm=1;
  93.                 else
  94.                         ENA_pwm=0;
  95.                 if(pwm_val_left==10)            //  0~10  ,  0最小,10最大
  96.                         pwm_val_left=0;
  97. }
  98. void pwm_out_right_moto(void)
  99. {
  100.                 if(pwm_val_right<=push_val_right)                          
  101.                         ENB_pwm=1;
  102.                 else
  103.                         ENB_pwm=0;
  104.                 if(pwm_val_right==10)           //  0~10  ,  0最小,10最大
  105.                         pwm_val_right=0;
  106. }
  107.                             /*定時器1中斷輸出PWM信號*/
  108. void timer1() interrupt 3
  109. {
  110.           TH1=(65536-10)/256;
  111.         TL1=(65536-10)%256;
  112.         pwm_val_left++;
  113.         pwm_val_right++;

  114.          pwm_out_left_moto();
  115.          pwm_out_right_moto();                        
  116. }
  117.                                        
  118. void timer0() interrupt 1        //T0中斷用來計數器溢出,超過測距范圍
  119. {
  120.         flag=1;                 //中斷溢出標志                        
  121. }
  122. void  CSB_module()                          
  123. {
  124.         Trlg1=1;                                             
  125.         Delay10us_CSB(10);
  126.         Trlg1=0;
  127. }
  128.                              /*計算超聲波所測距離并顯示*/
  129. void Conut()
  130. {
  131.         time=TH0*256+TL0;
  132.         TH0=0;
  133.         TL0=0;
  134.         S=(float)(time*1.085)*0.17;     //算出來是MM
  135.         if((S>=7000)||flag==1)          //超出測量范圍
  136.         {         
  137.                 flag=0;
  138.         }
  139. }
  140.                                     
  141. void  bizhang()
  142. {
  143.         if(S > 100)//設置避障距離(單位毫米)
  144.         {
  145.                 Go_forward();
  146.                     
  147.         }
  148.         else
  149.         {   
  150.                         Stop();
  151.                      delay(20);           
  152.                      Go_back();
  153.                      delay(30);
  154.                      Go_left();                                                                                                  
  155.         }
  156. }

  157.         
  158. void main()
  159. {
  160.         Stop();     
  161.         delay(1000);//延時1秒

  162.         TMOD |= 0x20;//定時器1工作模式2,8位自動重裝。用于產生PWM
  163.         TMOD |= 0x01;//定時器0工作模塊1,16位定時模式。T0用測ECH0脈沖長度
  164.         TH1 = 220; //
  165.         TL1 = 220; //100HZ T1
  166.         TH0 = 0;
  167.         TL0 = 0;//T0,16位定時計數用于記錄ECHO高電平時間         
  168.         ET1 = 1;//允許T1中斷
  169.         ET0 = 1;//允許T0中斷
  170.         TR1 = 1;//啟動定時器1
  171.         EA  = 1;//啟動總中斷          
  172.         while(1)
  173.         {               
  174.                  CSB_module();        //啟動超聲波測距
  175.                  while(!Echo1);        //當(ECHO信號回響)為零時等待
  176.                  TR0=1;               //開啟計數
  177.                  while(Echo1);        
  178.                  TR0=0;               //關閉計數
  179.                  Conut();             //計算距離
  180.                  bizhang();           //避障
  181.                  delay(30);                             
  182.           }
  183. }
復制代碼


全部資料51hei下載地址:
pwm調速小車避障.rar (24.86 KB, 下載次數: 148)


評分

參與人數 3黑幣 +60 收起 理由
忘語 + 5 贊一個!
﹌信念。 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:358191 發表于 2018-6-25 15:50 | 只看該作者
能測速嗎
回復

使用道具 舉報

板凳
ID:501297 發表于 2019-4-13 12:32 | 只看該作者
終于靠譜了
回復

使用道具 舉報

地板
ID:547956 發表于 2019-5-26 23:16 | 只看該作者
有沒有使用51單片機STC89C51進行編程的
回復

使用道具 舉報

5#
ID:547956 發表于 2019-5-26 23:29 | 只看該作者
哥,能不能仔細解釋下,許多地方看不懂
回復

使用道具 舉報

6#
ID:541246 發表于 2019-7-16 11:26 | 只看該作者
這個可讀性不錯
回復

使用道具 舉報

7#
ID:580104 發表于 2019-7-17 13:46 | 只看該作者
備注很詳細,資料不錯,學習一下。
回復

使用道具 舉報

8#
ID:734122 發表于 2020-4-27 22:36 | 只看該作者
本帖最后由 質壁分離 于 2020-4-27 23:06 編輯

很詳細,對于學習很有幫助,謝謝。
回復

使用道具 舉報

9#
ID:825654 發表于 2021-1-30 16:12 | 只看該作者
這個資料不錯奧,謝謝樓主
回復

使用道具 舉報

10#
ID:825654 發表于 2021-1-30 16:13 | 只看該作者
Leslieyang 發表于 2019-5-26 23:16
有沒有使用51單片機STC89C51進行編程的

這個也可以用
回復

使用道具 舉報

11#
ID:871292 發表于 2021-2-9 11:28 | 只看該作者
收下研究了,謝謝!
回復

使用道具 舉報

12#
ID:973226 發表于 2021-10-20 10:50 | 只看該作者
有紅外的嗎樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文字幕 | 国内精品视频免费观看 | 精品国产91久久久久久 | 草草在线观看 | 日本一区不卡 | 在线观看黄色电影 | 综合二区| 夜夜操天天艹 | 午夜视频免费 | 欧美精品乱码久久久久久按摩 | 久久久久久看片 | 毛片a级| 精品久久久久久 | 国产精品大片在线观看 | 在线视频 亚洲 | www.亚洲免费 | 欧美99 | 九色网址 | 91成人在线视频 | 亚洲一区二区三区久久久 | 日韩成人av在线 | 久艹av| 一本色道精品久久一区二区三区 | 久久精品小视频 | 国产露脸国语对白在线 | 欧美一级久久 | 四虎在线视频 | 免费性视频 | 久久五月婷 | 国产高清视频一区二区 | 中文字幕 在线观看 | 喷潮网站 | 精品久久一区二区三区 | 午夜大片| 日韩在线免费 | 日韩欧美在线观看 | 国产美女黄色片 | 欧美九九九 | 日韩av在线免费 | 97精品超碰一区二区三区 | 免费久久视频 |