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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的藍(lán)牙避障小車代碼

[復(fù)制鏈接]
ID:888864 發(fā)表于 2021-12-16 00:01 | 顯示全部樓層 |閱讀模式
學(xué)習(xí)時(shí)候自己寫的,兩驅(qū)四驅(qū)皆可用

單片機(jī)源程序如下:
  1. /******************************************************************************
  2. 2021.9.27
  3. 單片機(jī)實(shí)踐二 孟瑞淞
  4. 超聲波舵機(jī)避障程序
  5. ******************************************************************************/
  6. #include <AT89x52.H>
  7. #include <intrins.h>
  8. #define led1 {P0_6=1,P0_6=0;}
  9. #define led2 {P0_7=0,P0_7=1;}
  10.        
  11. #define Right_moto_go     {P1_2=1,P1_3=0;}        //右邊電機(jī)向前走
  12. #define Right_moto_back   {P1_2=0,P1_3=1;}        //右邊電機(jī)向后走
  13. #define Right_moto_Stop   {P1_2=0,P1_3=0;}        //右邊電機(jī)停轉(zhuǎn)   

  14. #define Left_moto_go      {P1_6=1,P1_7=0;}  //左邊電機(jī)向前走
  15. #define Left_moto_back    {P1_6=1,P1_7=0;}         //左邊電機(jī)向后轉(zhuǎn)
  16. #define Left_moto_Stop    {P1_6=0,P1_7=0;}  //左邊電機(jī)停轉(zhuǎn)                     
  17.        
  18. #define Sevro_moto_pwm  P2_2      //接舵機(jī)信號端輸入PWM信號調(diào)節(jié)速度
  19. #define  ECHO  P2_0                                        //超聲波接口定義
  20. #define  TRIG  P2_1                                //超聲波接口定義
  21.        

  22. unsigned char const positon[3]={ 0xfe,0xfd,0xfb};
  23. unsigned char disbuff[4]={ 0,0,0,0,};
  24. unsigned char posit=0;

  25. unsigned char pwm_val_left  = 0;//變量定義
  26. unsigned char push_val_left =14;//舵機(jī)歸中,產(chǎn)生約,1.5MS 信號
  27. unsigned long S=0;
  28. unsigned long S1=0;
  29. unsigned long S2=0;
  30. unsigned long S3=0;
  31. unsigned long S4=0;
  32. unsigned int  time=0;                    //時(shí)間變量
  33. unsigned int  timer=0;                        //延時(shí)基準(zhǔn)變量
  34. unsigned char timer1=0;                        //掃描時(shí)間變量                                       
  35.    
  36. /************************************************************************/       
  37. //延時(shí)函數(shù)       
  38. void delay(unsigned int k)
  39. {                               
  40.                    unsigned int x,y;
  41.                    for(x=0;x<k;x++)
  42.                    for(y=0;y<2000;y++);
  43. }
  44. /************************************************************************/       
  45. //前速前進(jìn)
  46. void run(void)
  47. {
  48.    
  49.             Left_moto_go;    //左電機(jī)往前走
  50.             Right_moto_go ;  //右電機(jī)往前走
  51. }

  52. //前速后退
  53. void backrun(void)
  54. {
  55.    
  56.                  Left_moto_back ;   //左電機(jī)往前走
  57.                  Right_moto_back ;  //右電機(jī)往前走
  58. }

  59. //左轉(zhuǎn)
  60. void  leftrun(void)
  61. {
  62.    
  63.                   Right_moto_go ;  //右電機(jī)往前走 ;
  64.                   Left_moto_Stop ;   //左電機(jī)停止
  65. }

  66. //右轉(zhuǎn)
  67. void  rightrun(void)
  68. {
  69.    
  70.                    Left_moto_go ;   //左電機(jī)往前走
  71.                    Right_moto_Stop ;  //右電機(jī)停止
  72. }
  73. //停
  74. void  stoprun(void)
  75. {
  76.    
  77.                   Left_moto_Stop ;   //左電機(jī)往前走
  78.                   Right_moto_Stop ;  //右電機(jī)往前走
  79. }

  80. void  StartModule()                       //啟動測距信號
  81. {
  82.           TRIG=1;                                        
  83.           _nop_();
  84.           _nop_();
  85.           _nop_();
  86.           _nop_();
  87.           _nop_();
  88.           _nop_();
  89.           _nop_();
  90.           _nop_();
  91.           _nop_();
  92.           _nop_();
  93.           _nop_();
  94.           _nop_();
  95.           _nop_();
  96.           _nop_();
  97.           _nop_();
  98.           _nop_();
  99.           _nop_();
  100.           _nop_();
  101.           _nop_();
  102.           _nop_();
  103.           _nop_();
  104.           TRIG=0;
  105. }

  106. void Conut(void)                   //計(jì)算距離
  107. {
  108.           while(!ECHO);                       //當(dāng)RX為零時(shí)等待
  109.           TR0=1;                               //開啟計(jì)數(shù)
  110.           while(ECHO);                           //當(dāng)RX為1計(jì)數(shù)并等待
  111.           TR0=0;                                   //關(guān)閉計(jì)數(shù)
  112.           time=TH0*256+TL0;                   //讀取脈寬長度
  113.           TH0=0;
  114.           TL0=0;
  115.           S=(time*1.7)/100;        //算出來是CM
  116.           disbuff[0]=S%1000/100;   //更新顯示
  117.           disbuff[1]=S%1000%100/10;
  118.           disbuff[2]=S%1000%10 %10;
  119. }

  120. void  COMM( void )                      
  121. {
  122.                   push_val_left=5;          //舵機(jī)向左轉(zhuǎn)90度
  123.                   timer=0;
  124.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置
  125.                   StartModule();          //啟動超聲波測距
  126.           Conut();                           //計(jì)算距離
  127.                   S2=S;  
  128.   
  129.                   push_val_left=23;          //舵機(jī)向右轉(zhuǎn)90度
  130.                   timer=0;
  131.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置
  132.                   StartModule();          //啟動超聲波測距
  133.           Conut();                          //計(jì)算距離
  134.                   S4=S;        
  135.        
  136.                   push_val_left=14;          //舵機(jī)歸中
  137.                   timer=0;
  138.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置
  139.                   StartModule();          //啟動超聲波測距
  140.           Conut();                          //計(jì)算距離
  141.                   S1=S;        

  142.           if((S2<20)||(S4<20)) //只要左右各有距離小于,20CM小車后退
  143.                   {
  144.                   backrun();                   //后退
  145.                   timer=0;
  146.                   while(timer<=4000);
  147.                   }
  148.                   
  149.                   if(S2>S4)       
  150.                            
  151.                      {
  152.                                     rightrun();          //車的左邊比車的右邊距離小        右轉(zhuǎn)       
  153.                         timer=0;
  154.                         while(timer<=3500);//原4000
  155.                      }                                     
  156.                        else
  157.                      {
  158.                        leftrun();                //車的左邊比車的右邊距離大        左轉(zhuǎn)
  159.                        timer=0;
  160.                        while(timer<=3500);//原4000
  161.                      }
  162. }

  163. /*定時(shí)器產(chǎn)生100US定時(shí)信號*/
  164. void pwm_Servomoto(void)
  165. {  

  166.                    if(pwm_val_left<=push_val_left)
  167.                        Sevro_moto_pwm=1;
  168.                        else
  169.                        Sevro_moto_pwm=0;
  170.                        if(pwm_val_left>=200)
  171.                           pwm_val_left=0;
  172. }

  173. /*TIMER1中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
  174. void time1()interrupt 3   using 2
  175. {       
  176.             TH1=(65536-100)/256;          //100US定時(shí)
  177.                 TL1=(65536-100)%256;
  178.                 timer++;                                  //定時(shí)器100US為準(zhǔn)。在這個(gè)基礎(chǔ)上延時(shí)
  179.                 pwm_val_left++;
  180.                 pwm_Servomoto();
  181. }

  182. void delay1()
  183. {
  184.                 unsigned char i,j,k;
  185.                 for(i=1;i>0;i--)
  186.                    for(j=100;j>0;j--)
  187.                 for(k=250;k>0;k--);
  188. }

  189. void shansuo()
  190. {
  191.                      led1;
  192.                      delay1();
  193.                      led2;
  194.                      delay1();                 
  195. }
  196.          
  197. /*--主函數(shù)--*/
  198. void main(void)
  199. {
  200.           stoprun();
  201.               TMOD=0X11;
  202.               TH1=(65536-100)/256;          //100US定時(shí)
  203.               TL1=(65536-100)%256;
  204.               TH0=0;
  205.                TL0=0;  
  206.               TR1= 1;
  207.               ET1= 1;
  208.               ET0= 1;
  209.               EA = 1;
  210.               delay(100);
  211.           push_val_left=14;          //舵機(jī)歸中
  212.               while(1)                     
  213.               {
  214.                    shansuo();        //閃爍燈函數(shù)
  215.                    if(timer>=200)          //100MS檢測啟動檢測一次 原來500
  216.                    {
  217.                       timer=0;
  218.                           StartModule(); //啟動檢測
  219.                   Conut();                  //計(jì)算距離
  220.                   if(S<35)                  //距離小于20CM
  221.                           {
  222.                              stoprun();          //小車停止
  223.                              COMM();                                  //方向函數(shù)
  224.                           }
  225.                           else
  226.                           if(S>40)                  //距離大于,35CM往前走
  227.                           run();
  228.                    }
  229.                }
  230. }
  231.        
復(fù)制代碼
屏幕截圖 2021-12-15 235951.png
Keil代碼下載:
單片機(jī)實(shí)踐二.rar (364.02 KB, 下載次數(shù): 17)

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美综合在线 | 欧美精品一区二区三区蜜臀 | 日韩精品福利 | 高清久久 | 一区二区三区成人 | 久久九精品| 国产精品成av人在线视午夜片 | 日韩成人精品 | 亚洲精品成人av久久 | 欧洲一级视频 | 五十女人一级毛片 | 草久久久 | 国产欧美日韩一区二区三区 | 国产999在线观看 | 天堂一区二区三区四区 | av片免费| 国产免费播放视频 | 欧美精品一区二区在线观看 | 91文字幕巨乱亚洲香蕉 | 天天躁天天操 | 91成人小视频| 久久国产精品一区二区三区 | 黄色网毛片 | 激情91 | 一级大片 | 操久久 | 久久这里只有精品首页 | 亚洲男人天堂av | 国产精品一区二区在线 | 无码国模国产在线观看 | 免费观看毛片 | 久久久久资源 | 欧美亚洲国产日韩 | 久久综合av | 日本精品久久久久 | 97伦理电影网 | 国产精品色 | 成人在线视频一区二区三区 | 波多野吉衣在线播放 | 999观看免费高清www | 欧美日韩三区 |