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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6313|回復(fù): 6
收起左側(cè)

超聲波避障(51單片機(jī)程序)

[復(fù)制鏈接]
ID:389243 發(fā)表于 2018-8-23 13:34 | 顯示全部樓層 |閱讀模式
超聲波避障程序,使用51單片機(jī)芯片

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

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

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

  29. uchar percent_l=0;                //(前進(jìn))左輪占空比。
  30. uchar percent_r=0;                //(前進(jìn))右輪占空比。
  31. uchar percent_hl=0;                //(后退)左輪占空比。
  32. uchar percent_hr=0;                //(后退)右輪占空比。
  33. uchar run_time=0;                //車輪運(yùn)行一步的時(shí)間。??
  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;                                        //開定時(shí)器0中斷。
  106.         TR0=1;                                        //啟動(dòng)定時(shí)器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. /**************前進(jìn)方向****/
  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. /**************中斷服務(wù)*******************/
  163. void timer_0 (void) interrupt 1 using 1
  164. {
  165.         static uchar temp=0;                                                //中斷次數(shù)計(jì)數(shù)
  166.         TR0=0;
  167.         if(temp<Sum)
  168.                 {                                                                                //關(guān)總中斷,屏蔽其他中斷。
  169.                         if(temp<percent_l)
  170.                         {
  171.                                 PWM_L=1;                                                //左電機(jī)高電平。
  172.                         }
  173.                         else
  174.                         {
  175.                                 PWM_L=0;                                                //左電機(jī)低電平。
  176.                         }
  177.                         if(temp<percent_r)
  178.                         {
  179.                                 PWM_R=1;                                                //右電機(jī)高電平。
  180.                         }
  181.                         else
  182.                         {
  183.                                 PWM_R=0;                                                //右電機(jī)低電平。
  184.                         }
  185.                 }
  186.         else
  187.         {
  188.                 temp=0;
  189.         }
  190.         temp++;
  191.         TH0=(65536-tim)/256;
  192.         TL0=(65536-tim)%256;                                                //實(shí)現(xiàn)計(jì)數(shù)。
  193.         TR0=1;                                                                                //開總中斷。
  194. }
  195. void timer1(void) interrupt 3 using 2
  196. {
  197.         static uchar temp1=0;
  198.         TR1=0;                                                                                //關(guān)總中斷,屏蔽其他中斷。
  199.         if(temp1<Sum)
  200.         {
  201.                 if(temp1<percent_hl)
  202.                 {
  203.                         PWM_HL=1;                                                        //左電機(jī)高電平。
  204.                 }
  205.                 else
  206.                 {
  207.                         PWM_HL=0;                                                        //左電機(jī)低電平。
  208.                 }
  209.                 if(temp1<percent_hr)
  210.                 {
  211.                         PWM_HR=1;                                                        //右電機(jī)高電平。
  212.                 }
  213.                 else
  214.                 {
  215.                         PWM_HR=0;                                                        //右電機(jī)低電平。
  216.                 }
  217.         }
  218.         else
  219.         {
  220.                 temp1=0;
  221.         }
  222.         temp1++;
  223.         TH1=(65536-tim)/256;
  224.         TL1=(65536-tim)%256;                                                //實(shí)現(xiàn)計(jì)數(shù)。
  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. }
復(fù)制代碼

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


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
嘖嘖嘖嘖嘖嘖嘖 + 5 絕世好帖!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:518433 發(fā)表于 2019-5-20 19:46 | 顯示全部樓層
首先感謝樓主的分享,小白想問一下 電機(jī)驅(qū)動(dòng)模塊是用的L298N嗎?P1口與電機(jī)接線是怎樣的 ?
回復(fù)

使用道具 舉報(bào)

ID:595011 發(fā)表于 2019-8-5 17:04 | 顯示全部樓層
謝謝樓主的分享 想問一下距離計(jì)算中0.45是什么?
回復(fù)

使用道具 舉報(bào)

ID:595011 發(fā)表于 2019-8-5 20:01 | 顯示全部樓層
這個(gè)程序是直接將超聲波探頭按到開發(fā)板上的嗎 不是用線連的對(duì)吧
回復(fù)

使用道具 舉報(bào)

ID:361216 發(fā)表于 2019-8-9 12:36 | 顯示全部樓層
不錯(cuò),學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:829883 發(fā)表于 2020-10-14 18:18 | 顯示全部樓層
我看了你的超聲波避障程序 下載了后小車不能驅(qū)動(dòng)是什么原因
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2020-10-14 21:45 | 顯示全部樓層
cxml 發(fā)表于 2020-10-14 18:18
我看了你的超聲波避障程序 下載了后小車不能驅(qū)動(dòng)是什么原因

你的電路和這個(gè)程序不配套吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美片网站免费 | 国产一区精品在线 | 欧美a级成人淫片免费看 | 国产精品久久在线观看 | 免费黄色大片 | 日日骚网 | 毛片在线免费 | 国内自拍偷拍一区 | 超碰97人人人人人蜜桃 | 91色视频在线观看 | 亚洲精品久久久久久首妖 | 欧美video| 久久久久亚洲精品 | 黄色一级毛片 | 欧美激情视频一区二区三区在线播放 | 日韩精品二区 | 国产四区 | 国产视频在线观看一区二区三区 | 国产精品久久久久久久久久三级 | 欧美成人在线网站 | 精品91 | a在线观看 | 91精品国产乱码久久蜜臀 | h视频在线免费 | 狠狠躁夜夜躁人人爽天天高潮 | 影音先锋成人资源 | 欧美在线观看一区 | 免费久久久 | 欧美日韩中文在线 | 国内在线视频 | 国产精品久久久久久久久久久新郎 | 浴室洗澡偷拍一区二区 | 综合五月| 欧美一区二区三区四区视频 | 九九热这里只有精品在线观看 | 亚洲视频在线播放 | 一区欧美| 亚洲人成在线观看 | 自拍视频一区二区三区 | 射欧美 | 久久福利网站 |