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

標題: 超聲波避障(51單片機程序) [打印本頁]

作者: 小小斑鳩    時間: 2018-8-23 13:34
標題: 超聲波避障(51單片機程序)
超聲波避障程序,使用51單片機芯片

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define MOTOR_C P2                //P1口作為電機的控制口。
  5. #define BACK 0xfa                 //后退,0b1111 1010
  6. #define FORWARD 0xf5    //前進,0b1111 0101
  7. #define Sum 100                  //總周期,為100倍的定時器時間大約27ms
  8. #define tim 200         //初值數 200約270us
  9. uint distance;
  10. sbit Trig=P2^6;
  11. sbit Echo=P2^7;

  12. sbit PWM_L=P2^0;                //左電機前進
  13. sbit PWM_R=P2^2;        //右電機前進
  14. sbit PWM_HL=P2^1;                //左電機后退
  15. sbit PWM_HR=P2^3;                //右電機后退
  16. void timer0_init(void); //定時器0初始化函數。
  17. void timer1_init(void); //定時器1初始化函數。
  18. void right(void);       //前進右轉彎函數。
  19. void left(void);                //前進左轉彎函數。
  20. void forward(void);                //前進函數。
  21. void hright(void);                //后退右轉函數。
  22. void hleft(void);                //后退左轉函數。
  23. void back(void);                //后退函數。
  24. void stop(void);                //停止
  25. void backright(void);        //右后倒車
  26. void Delayms();                  //延時1ms
  27. void Delay100ms(unsigned int d);//延時100ms??

  28. void bizhang();                        //避障;

  29. uchar percent_l=0;                //(前進)左輪占空比。
  30. uchar percent_r=0;                //(前進)右輪占空比。
  31. uchar percent_hl=0;                //(后退)左輪占空比。
  32. uchar percent_hr=0;                //(后退)右輪占空比。
  33. uchar run_time=0;                //車輪運行一步的時間。??
  34. int shu,i;

  35. void delay(uint z)
  36. {
  37.   uint x,y;
  38.   for(x=z;x>0;x--)
  39.    for(y=110;y>0;y--);
  40.    
  41. }

  42. void delay_us()
  43. {     
  44.         uchar t;
  45.         for(t=0;t<10001;t++)
  46.         {
  47.         if(Echo==1)
  48.                 shu=t;
  49.         else
  50.                 break;
  51.         }
  52. }
  53. void turn_on()
  54. {
  55.         Trig=Echo=0;
  56.         delay(1);
  57.         Trig=1;
  58.         delay(1);
  59.         Trig=0;
  60.         while(Echo!=1);
  61.         delay_us();
  62. }
  63. void bizhang()
  64. {
  65.                 timer0_init();
  66.                 timer1_init();
  67.                 MOTOR_C=0x00;
  68.         if(0<distance&&distance<20)
  69.         {
  70. //                timer0_init();
  71. //                timer1_init();
  72. //                MOTOR_C=0x00;
  73.                 backright();  
  74. //                Delay100ms(10);
  75.         }                                 
  76.         else
  77.         {
  78. //                timer0_init();
  79. //                timer1_init();
  80. //                MOTOR_C=0x00;
  81.                 forward();
  82. //                Delay100ms(10);                 
  83.         }
  84. }

  85. void main()
  86. {
  87.         while(1)
  88.         {
  89.                 turn_on();
  90.                 distance=shu*0.45/2.0;
  91.             delay(5);
  92.                 for(i=0;i<2;i++)
  93.                 {
  94.                         bizhang();
  95.                         delay(20);
  96.                 }
  97.         }
  98. }

  99. void timer0_init(void)
  100. {
  101.         TMOD=0X11;
  102.         TH0=(65536-tim)/256;
  103.         TL0=(65536-tim)%256;
  104.         EA=1;                                        //開總中斷。
  105.         ET0=1;                                        //開定時器0中斷。
  106.         TR0=1;                                        //啟動定時器0。
  107. }
  108. void timer1_init(void)
  109. {
  110.         TH1=(65536-tim)/256;
  111.         TL1=(65536-tim)%256;
  112.         ET1=1;
  113.         TR1=1;
  114.         }
  115. /**************前進方向****/
  116. void right(void)
  117. {
  118.         percent_l=50;                        //左輪速度快,最好去50以上
  119.         percent_r=0;                        //右輪速度慢。
  120.         percent_hl=0;
  121.         percent_hr=0;
  122. }
  123. void left(void)
  124. {
  125.         percent_l=0;            //左輪速度慢。
  126.         percent_r=50;                        //右輪速度快。
  127.         percent_hl=0;
  128.         percent_hr=0;
  129. }
  130. void back(void)
  131. {
  132.         percent_l=50;//左輪同速度。
  133.         percent_r=50;//右輪同速度。
  134.         percent_hl=0;
  135.         percent_hr=0;
  136. }
  137. /************后退方向*************///void?hright(void?)?//{?
  138. //?percent_hr?=?90;?//?percent_hl?=?0;?//?percent_r?=?0;?//?percent_l?=?0;?//}?//?
  139. //void?hleft(?void?)?//{?
  140. //?percent_hr?=?0;?//?percent_hl?=?90;?//?percent_r?=?0;?//?percent_l?=?0;?//}??
  141. void forward(void)
  142. {       
  143.         percent_hl=50;
  144.         percent_hr=50;
  145.         percent_l=0;
  146.         percent_r=0;
  147. }
  148. void stop(void)
  149. {
  150.         percent_l=0;                                                                //左輪零速度。
  151.         percent_r=0;                                                                //右輪零速度。
  152.         percent_hl=0;
  153.         percent_hr=0;
  154. }
  155. void backright(void)
  156. {
  157.         percent_hl=0;
  158.         percent_hr=0;
  159.         percent_l=50;
  160.         percent_r=0;       
  161. }
  162. /**************中斷服務*******************/
  163. void timer_0 (void) interrupt 1 using 1
  164. {
  165.         static uchar temp=0;                                                //中斷次數計數
  166.         TR0=0;
  167.         if(temp<Sum)
  168.                 {                                                                                //關總中斷,屏蔽其他中斷。
  169.                         if(temp<percent_l)
  170.                         {
  171.                                 PWM_L=1;                                                //左電機高電平。
  172.                         }
  173.                         else
  174.                         {
  175.                                 PWM_L=0;                                                //左電機低電平。
  176.                         }
  177.                         if(temp<percent_r)
  178.                         {
  179.                                 PWM_R=1;                                                //右電機高電平。
  180.                         }
  181.                         else
  182.                         {
  183.                                 PWM_R=0;                                                //右電機低電平。
  184.                         }
  185.                 }
  186.         else
  187.         {
  188.                 temp=0;
  189.         }
  190.         temp++;
  191.         TH0=(65536-tim)/256;
  192.         TL0=(65536-tim)%256;                                                //實現計數。
  193.         TR0=1;                                                                                //開總中斷。
  194. }
  195. void timer1(void) interrupt 3 using 2
  196. {
  197.         static uchar temp1=0;
  198.         TR1=0;                                                                                //關總中斷,屏蔽其他中斷。
  199.         if(temp1<Sum)
  200.         {
  201.                 if(temp1<percent_hl)
  202.                 {
  203.                         PWM_HL=1;                                                        //左電機高電平。
  204.                 }
  205.                 else
  206.                 {
  207.                         PWM_HL=0;                                                        //左電機低電平。
  208.                 }
  209.                 if(temp1<percent_hr)
  210.                 {
  211.                         PWM_HR=1;                                                        //右電機高電平。
  212.                 }
  213.                 else
  214.                 {
  215.                         PWM_HR=0;                                                        //右電機低電平。
  216.                 }
  217.         }
  218.         else
  219.         {
  220.                 temp1=0;
  221.         }
  222.         temp1++;
  223.         TH1=(65536-tim)/256;
  224.         TL1=(65536-tim)%256;                                                //實現計數。
  225.         TR1=1;                                                                                //開總中斷。
  226.         }
  227. /*void?Delayms(void)????{?
  228. ????unsigned?char?a,b,c;?????for(c=1;c>0;c--)?
  229. ????????for(b=23;b>0;b--)?
  230. ????????????for(a=13;a>0;a--);?}*/
  231. void Delay100ms(unsigned int d)
  232. {                                                                       
  233.         unsigned int a,b,c;
  234.         for(c=d;c>0;c--)
  235.                 for(b=60;b>0;b--)
  236.                         for(a=130;a>0;a--);
  237. }
復制代碼

所有資料51hei提供下載:
51.zip (28.35 KB, 下載次數: 43)



作者: 陳發光    時間: 2019-5-20 19:46
首先感謝樓主的分享,小白想問一下 電機驅動模塊是用的L298N嗎?P1口與電機接線是怎樣的 ?
作者: 開心就好girl    時間: 2019-8-5 17:04
謝謝樓主的分享 想問一下距離計算中0.45是什么?
作者: 開心就好girl    時間: 2019-8-5 20:01
這個程序是直接將超聲波探頭按到開發板上的嗎 不是用線連的對吧
作者: lhqsbz    時間: 2019-8-9 12:36
不錯,學習了
作者: cxml    時間: 2020-10-14 18:18
我看了你的超聲波避障程序 下載了后小車不能驅動是什么原因
作者: 51hei團團    時間: 2020-10-14 21:45
cxml 發表于 2020-10-14 18:18
我看了你的超聲波避障程序 下載了后小車不能驅動是什么原因

你的電路和這個程序不配套吧




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久高清 | 久久黄视频 | 成人午夜免费视频 | 91精品国产91 | 国产精品国产a级 | 免费三级网站 | 国产精品国产成人国产三级 | 成人天堂 | 91看片| 久久高潮| 亚洲综合在线一区 | 国产aa | 国产精品综合一区二区 | 欧美日韩在线一区二区 | 成人在线精品视频 | 日韩欧美二区 | 中文字幕免费在线 | 日本成人免费观看 | 国产精品日本一区二区不卡视频 | 亚洲视屏| 一区二区不卡 | 亚洲天堂一区二区 | av影音在线 | 99热激情 | 精品一区二区三区入口 | 久久久久久久久蜜桃 | 久久国产精品视频 | 免费一区在线 | 成人h视频在线 | 精品久久久久久中文字幕 | 请别相信他免费喜剧电影在线观看 | 亚洲精品电影 | 亚洲综合大片69999 | 99热在线观看精品 | 亚洲日本欧美日韩高观看 | 国产黄a一级 | 毛片片| 色www精品视频在线观看 | 成人国产精品久久 | 2019天天操| 婷婷中文在线 |