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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)藍(lán)牙控制小車前后左右+尋跡,到底哪里出了問題 ,小車通電之后完全不動(dòng)

[復(fù)制鏈接]
ID:703117 發(fā)表于 2020-5-6 09:06 | 顯示全部樓層 |閱讀模式
  1. #include "reg52.h"
  2. #include <intrins.h>
  3. sbit IN1=P1^0;  //定義驅(qū)動(dòng)模塊IN1為P1.0                  左上電機(jī) M2                OUT1 OUT2
  4. sbit IN2=P1^1;        //定義驅(qū)動(dòng)模塊IN2為P1.1
  5. sbit IN3=P1^2;        //定義驅(qū)動(dòng)模塊IN3為P1.2                  左下電機(jī) M3                OUT3 OUT4
  6. sbit IN4=P1^3;        //定義驅(qū)動(dòng)模塊IN4為P1.3
  7. sbit IN5=P1^4;        //定義驅(qū)動(dòng)模塊IN5為P1.4                  右上電機(jī) M1                OUT5 OUT6
  8. sbit IN6=P1^5;        //定義驅(qū)動(dòng)模塊IN6為P1.5
  9. sbit IN7=P1^6;        //定義驅(qū)動(dòng)模塊IN7為P1.6                  右下電機(jī) M4                OUT7 OUT8
  10. sbit IN8=P1^7;        //定義驅(qū)動(dòng)模塊IN8為P1.7
  11. //尋跡探頭
  12. sbit left_led=P2^5;           //定義左路尋跡為P2.5
  13. sbit middle_led=P2^6;  //定義中路尋跡為P2.6
  14. sbit right_led=P2^7;   //定義右路尋跡為P2.7

  15. #define Left_moto_go      {IN1=1,IN2=0,IN3=1,IN4=0;}    //左邊兩個(gè)電機(jī)向前走
  16. #define Left_moto_back    {IN1=0,IN2=1,IN3=0,IN4=1;}         //左邊兩個(gè)電機(jī)向后轉(zhuǎn)
  17. #define Left_moto_Stop    {IN1=0,IN2=0,IN3=0,IN4=0;}    //左邊兩個(gè)電機(jī)停轉(zhuǎn)                             
  18. #define Right_moto_go     {IN5=1,IN6=0,IN7=1,IN8=0;}        //右邊兩個(gè)電機(jī)向前走
  19. #define Right_moto_back   {IN5=0,IN6=1,IN7=0,IN8=1;}        //右邊兩個(gè)電機(jī)向后轉(zhuǎn)
  20. #define Right_moto_Stop   {IN5=0,IN6=0,IN7=0,IN8=0;}        //右邊兩個(gè)電機(jī)停轉(zhuǎn)

  21. #define M2_moto_pwm          IN2         //PWM信號(hào)端        左上電機(jī)M2
  22. #define M3_moto_pwm          IN4         //                                左下電機(jī)M3
  23. #define M1_moto_pwm          IN6         //                                右上電機(jī)M1
  24. #define M4_moto_pwm          IN8         //                                右下電機(jī)M4
  25. //PWM 尋跡中調(diào)速  
  26. unsigned char pwm_val_left  =0;//變量定義
  27. unsigned char push_val_left =0;//左電機(jī)占空比N/10
  28. unsigned char pwm_val_right =0;//變量定義
  29. unsigned char push_val_right=0;//右電機(jī)占空比N/10

  30. bit Right_moto_stop=1;                  //在右電機(jī)調(diào)速時(shí),如果右電機(jī)停止,PWM小于PUSH,PWM置1,否則為0;若PWM≥10,PWM關(guān)斷
  31. bit Left_moto_stop =1;                  //在左電機(jī)調(diào)速時(shí),如果右電機(jī)停止,PWM小于PUSH,PWM置1,否則為0;若PWM≥10,PWM關(guān)斷

  32. unsigned  int  timer1=0;

  33. //        sfr T2CON   = 0xC8;
  34.     sfr T2MOD   = 0xC9;
  35. // sfr RCAP2L  = 0xCA;
  36. // sfr RCAP2H  = 0xCB;
  37. // sfr TL2     = 0xCC;
  38. // sfr TH2     = 0xCD;

  39. //藍(lán)牙數(shù)據(jù)發(fā)送
  40.         #define left     'C'         //左轉(zhuǎn)發(fā)送數(shù)據(jù)C
  41.     #define right    'D'         //右轉(zhuǎn)發(fā)送數(shù)據(jù)D
  42.         #define up       'A'         //前進(jìn)發(fā)送數(shù)據(jù)A
  43.     #define down     'B'         //后退發(fā)送數(shù)據(jù)B
  44.         #define stop     'F'         //停止發(fā)送數(shù)據(jù)F
  45.         #define Car      '1'         //手機(jī)軟件1號(hào)鍵        表示尋跡按鈕

  46.         char code str[] =  "收到指令,向前!\n";
  47.         char code str1[] = "收到指令,向后!\n";
  48.         char code str2[] = "收到指令,向左!\n";
  49.         char code str3[] = "收到指令,向右!\n";
  50.         char code str4[] = "收到指令,停止!\n";

  51.         unsigned char  i=0;
  52.         unsigned char  dat=0;
  53.     unsigned char  buff[5]=0; //接收緩沖字節(jié)        

  54. //        程序功能
  55.         bit  flag_REC=0;                                 //串行接收標(biāo)去位
  56.         bit  flag    =0;                                  //
  57.         bit  flag_xj =0;                                //尋跡標(biāo)志
  58. //延時(shí)函數(shù)         
  59. void delay(unsigned int k)
  60. {   
  61.      unsigned int x,y;
  62.          for(x=0;x<k;x++)
  63.          for(y=0;y<2000;y++);
  64. }
  65. //前進(jìn)函數(shù)         加入PWM
  66. void  run_pwm(void)
  67. {
  68.          push_val_left=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  69.          push_val_right=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  70.          Left_moto_go ;    //左電機(jī)往前走
  71.          Right_moto_go ;   //右電機(jī)往前走
  72. }
  73. //后退函數(shù)         加入PWM
  74. void  backrun_pwm(void)
  75. {
  76.     push_val_left=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  77.         push_val_right=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  78.         Left_moto_back ;   //左電機(jī)往后走
  79.         Right_moto_back ;  //右電機(jī)往后走
  80. }
  81. //左轉(zhuǎn)函數(shù)          加入PWM
  82. void  leftrun_pwm(void)
  83. {
  84.      push_val_left=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  85.          push_val_right=9;        //速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  86.          Left_moto_Stop ;   //左電機(jī)往前走
  87.          Right_moto_go ;    //右電機(jī)往后走
  88. }
  89. //右轉(zhuǎn)函數(shù)          加入PWM
  90. void  rightrun_pwm(void)
  91. {
  92.      push_val_left=9;        //減低一半速度         速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  93.          push_val_right=9;        //減低一半速度         速度調(diào)節(jié)變量 0-9。。。9最小,0最大
  94.          Left_moto_go ;     //左電機(jī)往前走
  95.          Right_moto_Stop ;  //右電機(jī)往后走
  96. }
  97. //小車停止
  98. void  keepstop(void)
  99. {
  100.          Left_moto_Stop ;   //左電機(jī)往前走
  101.          Right_moto_Stop ;  //右電機(jī)往前走
  102. }
  103. //小車前進(jìn)          全速
  104. void  run(void)
  105. {
  106.          Left_moto_go ;    //左電機(jī)往前走
  107.          Right_moto_go ;   //右電機(jī)往前走
  108. }
  109. //小車后退    全速
  110. void  backrun(void)
  111. {
  112.         Left_moto_back ;   //左電機(jī)往后走
  113.         Right_moto_back ;  //右電機(jī)往后走
  114. }
  115. //左轉(zhuǎn)函數(shù)          全速
  116. void  leftrun(void)
  117. {
  118.          Left_moto_Stop ;   //左電機(jī)往前走
  119.          Right_moto_go ;    //右電機(jī)往后走
  120. }
  121. //右轉(zhuǎn)函數(shù)          全速
  122. void  rightrun(void)
  123. {
  124.          Left_moto_go ;     //左電機(jī)往前走
  125.          Right_moto_Stop ;  //右電機(jī)往后走
  126. }

  127. //左電機(jī)調(diào)速
  128. void pwm_out_left_moto(void)
  129. {  
  130.    if(Left_moto_stop)
  131.    {
  132.     if(pwm_val_left<=push_val_left)
  133.                {
  134.                      M2_moto_pwm=1;          //M2的PWM
  135.                      M3_moto_pwm=1;          //M3的PWM
  136.                    }
  137.           else
  138.                {
  139.                  M2_moto_pwm=0;
  140.                      M3_moto_pwm=0;
  141.                    }
  142.         if(pwm_val_left>=10)
  143.                pwm_val_left=0;
  144.    }
  145.     else   
  146.           {
  147.            M2_moto_pwm=0;
  148.            M3_moto_pwm=0;
  149.                   }
  150. }
  151. //右電機(jī)調(diào)速
  152. void pwm_out_right_moto(void)
  153. {
  154.   if(Right_moto_stop)
  155.    {
  156.     if(pwm_val_right<=push_val_right)
  157.               {
  158.                M1_moto_pwm=1;            //M1
  159.                    M4_moto_pwm=1;            //M4
  160.                    }
  161.         else
  162.               {
  163.                    M1_moto_pwm=0;
  164.                    M4_moto_pwm=0;
  165.                   }
  166.         if(pwm_val_right>=10)
  167.                pwm_val_right=0;
  168.    }
  169.    else   
  170.           {
  171.            M1_moto_pwm=0;
  172.            M4_moto_pwm=0;
  173.               }
  174. }
  175. void Time1(void) interrupt 3    //3 為定時(shí)器1的中斷號(hào)  1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2  4 串口中斷

  176. {
  177.     TH1 = 0xFF;
  178.         TL1 = 0x9C;
  179.     timer1++;  
  180.         pwm_val_left++;
  181.         pwm_val_right++;
  182.         pwm_out_left_moto();
  183.         pwm_out_right_moto();
  184. }
  185. //中斷號(hào)為4 串口中斷
  186. void sint() interrupt 4          //中斷接收3個(gè)字節(jié)
  187. {

  188.     if(RI)                         //是否接收中斷
  189.     {
  190.        RI=0;
  191.        dat=SBUF;
  192.        if(dat=='O'&&(i==0)) //接收數(shù)據(jù)第一幀
  193.          {
  194.             buff[i]=dat;
  195.             flag=1;        //開始接收數(shù)據(jù)
  196.          }
  197.        else
  198.       if(flag==1)
  199.      {
  200.       i++;
  201.       buff[i]=dat;
  202.       if(i>=2)
  203.       {i=0;flag=0;flag_REC=1 ;}  // 停止接收
  204.      }
  205.          }
  206. }
  207. //主函數(shù)
  208. void mian(void)
  209. {                         //         T1          T0
  210.   TMOD=0x11; //        0001 0001 工作方式3        兩個(gè)獨(dú)立8位計(jì)數(shù)器
  211.   TH1=0xFF;  //100uS定時(shí)          高8位
  212.   TL1=0x9c;         //                                  低8位
  213.   TH0=0;
  214.   TL0=0;

  215.     T2CON=0x34;                  //8位寄存器0011 0100           串行發(fā)送時(shí)鐘 TCLK=1, T2工作于波特率發(fā)生器方式
  216.         T2MOD=0x00;                  //                                           串行接收時(shí)鐘 RCLK=1,T2工作于波特率發(fā)生器方式
  217.         RCAP2H=0xFF;          //                                           為1時(shí)外部事件計(jì)數(shù),為0時(shí)T2為定時(shí)器         
  218.         RCAP2L=0xDC ;          //波特率位4800  12/[32*(65536-x)]
  219.     SCON=0x50;  
  220.     PCON=0x00;
  221.     PS=1;
  222.         TR1=1;                          // 定時(shí)器1工作
  223.         ET1=1;                          // 打開定時(shí)器1中斷
  224.         ES=1;                           // 串行口中斷
  225.     EA=1;                            // 總中斷允許
  226.         while(flag_xj)                           //循線標(biāo)志位
  227.                   {
  228.                                if(flag_REC==1)
  229.                                  {
  230.                                   break;
  231.                                  }
  232.                     
  233.                             //有信號(hào)為0  沒有信號(hào)為1
  234.               if(right_led==1&&middle_led==1&&left_led==1) //三路檢測(cè)到黑線
  235.                           {
  236.                              Left_moto_stop=1;
  237.                              Right_moto_stop=1;
  238.                              run_pwm();
  239.                           }

  240.                           else
  241.                          {                           
  242.                             if(right_led==1&&middle_led==0&&left_led==0)                //右邊檢測(cè)到黑線
  243.                                   {         
  244.                                       Left_moto_stop=1;
  245.                                           Right_moto_stop=1;
  246.                                       rightrun_pwm();
  247.                                   }
  248.                                 if(right_led==0&&middle_led==0&&left_led==1)            //左邊檢測(cè)到黑線
  249.                                    {
  250.                                       Right_moto_stop=1;
  251.                                           Left_moto_stop=1;
  252.                                           leftrun_pwm();
  253.                               }
  254.                           }
  255.                   }
  256.          if(flag_REC==1)                                    //
  257.            {
  258.                 flag_REC=0;
  259.                 if(buff[0]=='O'&&buff[1]=='N')        //第一個(gè)字節(jié)為O,第二個(gè)字節(jié)為N,第三個(gè)字節(jié)為控制碼
  260.                 switch(buff[2])
  261.              {
  262.                       case up :                                                    // 前進(jìn)
  263.                 //          send_str( );
  264.                           flag_xj=0; //尋跡置0
  265.                           Left_moto_stop=0;
  266.                           Right_moto_stop=0;
  267.                           run();
  268.                           break;

  269.                       case down:                                                // 后退
  270.                         //  send_str1( );
  271.                            flag_xj=0;
  272.                           Left_moto_stop=0;
  273.                           Right_moto_stop=0;
  274.                           backrun();
  275.                           break;

  276.                       case left:                                                // 左轉(zhuǎn)
  277.                 //          send_str2( );
  278.                           flag_xj=0;
  279.                           leftrun();
  280.                           break;

  281.                       case right:                                                // 右轉(zhuǎn)
  282.                 //          send_str3( );
  283.                           flag_xj=0;
  284.                           Left_moto_stop=0;
  285.                           Right_moto_stop=0;
  286.                           rightrun();
  287.                           break;

  288.                       case stop:                                                // 停止
  289.                 //          send_str4( );
  290.                           flag_xj=0;
  291.                           Left_moto_stop=0;
  292.                           Right_moto_stop=0;
  293.                           keepstop();
  294.                           break;

  295.                           case Car :                                                //                 
  296.                           flag_xj=1;
  297.                           break;
  298.              }                                 
  299.          }
  300. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:282850 發(fā)表于 2020-5-6 11:27 | 顯示全部樓層
程序是copy別人的嗎?如果是自己寫的,檢查硬件、程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎永久免费地址 | 黄色日本视频 | 夜夜爽99久久国产综合精品女不卡 | 麻豆天堂| 男女免费视频网站 | 久久国产区 | jav成人av免费播放 | 欧美国产免费 | 91在线免费观看 | 毛片网站免费观看 | 久色网 | 成人性生交大免费 | 一区二区三区四区不卡视频 | 国产91 在线播放 | 欧美日日 | 亚洲一区二区三区四区五区中文 | 日韩欧美在线精品 | 日韩高清中文字幕 | www.国产 | 中文字幕在线观看一区 | 免费成人高清在线视频 | 91久久精品视频 | 一二区成人影院电影网 | 国内精品一区二区三区 | 国产视频1区 | 爱爱综合网| 中文字幕二区 | 一级毛片免费完整视频 | 日韩精品一区二 | 最新国产精品视频 | 91视频在线| 久久99深爱久久99精品 | 99精品视频在线观看 | 免费电影av| 91视频在线网站 | 亚洲一区亚洲二区 | 国产欧美日韩一区二区三区在线 | 成人午夜激情 | 国产一级片| 97日日碰人人模人人澡分享吧 | 国产偷录叫床高潮录音 |