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

標題: 二路超聲波測距的單片機源碼 [打印本頁]

作者: 51dasttwbd    時間: 2018-5-28 11:08
標題: 二路超聲波測距的單片機源碼
用2哥超聲波 進行 避障 功能
源程序 如下:
  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. sbit L298N_INA = P1^0;        
  8. sbit L298N_INB = P1^1;        
  9. sbit L298N_INC = P1^2;        
  10. sbit L298N_IND = P1^3;

  11. sbit Trlg1 = P3^1;
  12. sbit Echo1 = P3^2;

  13. sbit Trlg2 = P2^0;
  14. sbit Echo2 = P2^1;


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

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

  19. unsigned int  time = 0;         //測距時間
  20. unsigned int  timer = 0;       //調速時間


  21. unsigned long S1 = 0;           //距離
  22. unsigned long S2 = 0;           //距離


  23. void delay(uint z)        //毫秒級延時
  24. {
  25.         uint x,y;
  26.         for(x = z; x > 0; x--)
  27.           {
  28.                 for(y = 114; y > 0 ; y--);
  29.           }
  30. }

  31. void Delay10us_CSB(uchar i)   //10us延時函數 超聲波模塊使用
  32. {
  33.         uchar j;
  34.         do
  35.           {
  36.              j = 10;
  37.              do
  38.                  {
  39.                 _nop_();
  40.                     _nop_();
  41.              }
  42.                     while(--j);
  43.         }
  44.                while(--i);
  45. }
  46. void pwm_out_left_moto(void)
  47. {  
  48.                 if(pwm_val_left<=push_val_left)
  49.                         ENA_pwm=1;
  50.                 else
  51.                         ENA_pwm=0;
  52.                 if(pwm_val_left==10)            //  0~10  ,  0最小,10最大
  53.                         pwm_val_left=0;
  54. }
  55. void pwm_out_right_moto(void)
  56. {
  57.                 if(pwm_val_right<=push_val_right)                          
  58.                         ENB_pwm=1;
  59.                 else
  60.                         ENB_pwm=0;
  61.                 if(pwm_val_right==10)           //  0~10  ,  0最小,10最大
  62.                         pwm_val_right=0;
  63. }
  64.                             /*定時器1中斷輸出PWM信號*/
  65. void time1() interrupt 3
  66. {
  67.           TH1=(65536-10)/256;
  68.         TL1=(65536-10)%256;
  69.           timer++;
  70.         pwm_val_left++;
  71.         pwm_val_right++;

  72.          pwm_out_left_moto();
  73.          pwm_out_right_moto();                        
  74. }
  75. void Go_forward()
  76. {
  77.     push_val_left=6;
  78.     push_val_right=6;
  79.     L298N_INA = 0;
  80.     L298N_INB = 1;
  81.     L298N_INC = 1;
  82.     L298N_IND = 0;

  83. }

  84. void Go_back()
  85. {
  86.     push_val_left=6;
  87.     push_val_right=6;
  88.     L298N_INA = 1;
  89.     L298N_INB = 0;
  90.     L298N_INC = 0;
  91.     L298N_IND = 1;        
  92. }

  93. void Go_left()
  94. {
  95.     push_val_left=5;
  96.     push_val_right=5;
  97.     L298N_INA = 0;
  98.     L298N_INB = 1;
  99.     L298N_INC = 1;
  100.     L298N_IND = 1;
  101. }

  102. void Go_right()
  103. {
  104.     push_val_left=5;
  105.     push_val_right=5;
  106.     L298N_INA = 1;
  107.     L298N_INB = 0;
  108.     L298N_INC = 0;
  109.     L298N_IND = 0;
  110. }

  111. void Stop()
  112. {
  113.     L298N_INA = 0;
  114.     L298N_INB = 0;
  115.     L298N_INC = 0;
  116.     L298N_IND = 0;
  117. }              

  118. void  CSB1_module()                          
  119. {
  120.         Trlg1=1;                                             
  121.         Delay10us_CSB(10);
  122.         Trlg1=0;
  123. }
  124. void  CSB2_module()                          
  125. {
  126.         Trlg2=1;                                             
  127.         Delay10us_CSB(10);
  128.         Trlg2=0;
  129. }
  130.                              /*計算超聲波所測距離并顯示*/
  131. void Conut1()
  132. {
  133.                  while(!Echo1);        //當(ECHO信號回響)為零時等待
  134.                  TR0=1;               //開啟計數
  135.                  while(Echo1);        
  136.                  TR0=0;               //關閉計數               

  137.         time=TH0*256+TL0;
  138.         TH0=0;
  139.         TL0=0;
  140.         S1=(float)(time*1.085)*0.17;     //算出來是MM      
  141. }
  142. void Conut2()
  143. {                              
  144.                  while(!Echo2);        //當(ECHO信號回響)為零時等待
  145.                  TR0=1;               //開啟計數
  146.                  while(Echo2);        
  147.                  TR0=0;               //關閉計數

  148.         time=TH0*256+TL0;
  149.         TH0=0;
  150.         TL0=0;
  151.         S2=(float)(time*1.085)*0.17;     //算出來是MM
  152. }

  153. void  bizhang()
  154. {
  155.           CSB1_module();
  156.           Conut1();         
  157.           CSB2_module();
  158.           Conut2();

  159.         if(S1<150 )//設置避障距離(單位毫米)
  160.         {
  161.            Stop();
  162.              delay(30);
  163.              Go_back();
  164.              delay(50);
  165.              if(S2<150)
  166.              {               
  167.                   Stop();
  168.                   delay(30);
  169.                   Go_right();
  170.              }
  171.              else
  172.              {
  173.                 Go_back();
  174.                   delay(50);
  175.                   Go_left();
  176.              }               
  177.         }
  178.           else if(S1>150)
  179.           {
  180.              if(S2>150)
  181.              {
  182.                 Go_forward();  
  183.              }
  184.              else
  185.              {
  186.                 Stop();
  187.                   delay(30);
  188.                   Go_right();
  189.              }
  190.           }     
  191. }


  192. void main()
  193. {
  194.         Stop();     
  195.         delay(1000);//延時1秒

  196.         TMOD |= 0x11;//定時器1工作模式2,8位自動重裝。用于產生PWM
  197.           TMOD |= 0x01;//定時器0
  198.         TH1=(65536-10)/256;          //100US定時
  199.         TL1=(65536-10)%256;
  200.         TH0 = 0;
  201.         TL0 = 0;//T0,16位定時計數用于記錄ECHO高電平時間         
  202.         ET1 = 1;
  203.         ET0 = 1;//允許T0中斷
  204.         TR1 = 1;//啟動定時器1
  205.          
  206.         EA  = 1;//啟動總中斷         
  207.         while(1)
  208.         {               

  209.                  bizhang();           //避障
  210.                  delay(30);                             
  211.           }
  212. }
復制代碼






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久精品日产第一区二区三区 | 在线一级片 | 国精品一区| 偷拍自拍网 | 日本一区二区三区精品视频 | 国产精品自产拍 | 久久精品久久久久久 | 亚洲激情自拍偷拍 | 国产精品久久久久久影院8一贰佰 | www.4虎影院 国产999精品久久久影片官网 | 日韩欧美在线一区二区 | 男女午夜免费视频 | 国产精品一区二区福利视频 | 91成人免费观看 | 成人av网站在线观看 | 久久久久久国产精品免费免费狐狸 | 一本一道久久a久久精品蜜桃 | 操久久 | 久久久久亚洲 | 一二三区av| 久久精品国产清自在天天线 | 999视频在线播放 | 成人免费影院 | 国产精品国产三级国产aⅴ原创 | 黄色国产大片 | 午夜网站视频 | 91av入口| 色伊人久久 | 黄色免费网站在线看 | 日韩超碰 | 欧美v片| 日韩视频在线一区 | 久久综合狠狠综合久久综合88 | 精品日韩 | 日本网站免费在线观看 | 成人午夜网 | 久久精品欧美视频 | 一区二区三区久久 | 国产一区二区三区免费观看在线 | 欧美亚洲日本 | 在线2区 |