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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4933|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

智能小車和手機藍牙連接 按鍵按超過幾次后,小車失控

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:163950 發(fā)表于 2017-4-20 10:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//描述本人制作此小車和手機藍牙連接后每次開始都能正常前后左右,但按超過幾次后,小車失控,再按就一直前進或后退! 請大家看看程序有問題嗎? 藍牙模塊沒有接錯線!!模塊用串口調(diào)試也是好的,每次都能正常接收,大家看看有什么問題,請指教

  1. /****************************************************************************
  2.          硬件連接
  3.          藍牙有4條線定義:
  4.           VCC
  5.       GND
  6.           TDX
  7.           RXD
  8.          把藍牙插入單片機J7接口中         --注意不要接錯線,否則燒壞藍牙模塊,不保修,不換貨。

  9. 端口模式配置

  10. PXM1     PXM0           模式

  11. 0                  0                  準(zhǔn)雙向口
  12. 0                  1                  強推挽輸出
  13. 1                  0                  高阻輸入
  14. 1                  1                  開漏輸出
  15. ******************************************************************/  


  16. /*************        功能說明        **************

  17. 串口1全雙工中斷方式收發(fā)通訊程序。本例程使用11.0592MHZ時鐘,如要改變,請修改下面的"定義主時鐘"的值并重新編譯。

  18. 串口設(shè)置為:9600,8,n,1.

  19. ******************************************/

  20. /*************        本地常量聲明        **************/
  21. #define MAIN_Fosc                11059200L        //定義主時鐘
  22. #define        RX1_Lenth                32                        //串口接收緩沖長度
  23. #define        BaudRate1                9600UL            //選擇波特率


  24. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應(yīng)300KHZ
  25. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重裝值, 對應(yīng)300KHZ


  26. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應(yīng)300KHZ
  27. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重裝值, 對應(yīng)300KHZ

  28. #include        "STC15Fxxxx.H"


  29. //char code str[] =  "收到指令,向前!\n";
  30. //char code str1[] = "收到指令,向后!\n";
  31. //char code str2[] = "收到指令,向左!\n";
  32. //char code str3[] = "收到指令,向右!\n";
  33. //char code str4[] = "收到指令,停止!\n";

  34. bit  flag_REC=0;   
  35. bit  flag    =0; //標(biāo)志位清零
  36.         
  37. #define left     'C'
  38. #define right    'D'
  39. #define up       'A'
  40. #define down     'B'
  41. #define stop     'F'

  42. unsigned char  i=0;
  43. unsigned char  dat=0;
  44. unsigned char  buff[5]=0; //接收緩沖字節(jié)

  45. sbit M1A=P1^0;                            //定義左側(cè)電機驅(qū)動A端
  46. sbit M1B=P1^1;                            //定義左側(cè)電機驅(qū)動B端

  47. sbit M2A=P1^2;                            //定義右側(cè)電機驅(qū)動A端
  48. sbit M2B=P1^3;                            //定義右側(cè)電機驅(qū)動B端

  49. /*************        本地變量聲明        **************/
  50. u8        idata RX1_Buffer[RX1_Lenth];        //接收緩沖
  51. u8        TX1_Cnt;        //發(fā)送計數(shù)
  52. u8        RX1_Cnt;        //接收計數(shù)
  53. bit        B_TX1_Busy;        //發(fā)送忙標(biāo)志


  54. void tingzhi()
  55. {
  56.    M1A=0;                                   //將M1電機A端初始化為0
  57.    M1B=0;                                   //將M1電機B端初始化為0
  58.    M2A=0;                                   //將M2電機A端初始化為0
  59.    M2B=0;

  60. }

  61. void qianjin()
  62. {
  63.    M1A=1;                                   
  64.    M1B=0;                                   
  65.    M2A=1;                                   
  66.    M2B=0;
  67. }

  68. void houtui()
  69. {
  70.    M1A=0;                                   
  71.    M1B=1;                                   
  72.    M2A=0;                                   
  73.    M2B=1;
  74. }

  75. void zuozhuan()
  76. {
  77.    M1A=0;                                   
  78.    M1B=1;                                   
  79.    M2A=1;                                   
  80.    M2B=0;
  81. }

  82. void youzhuan()
  83. {
  84.    M1A=1;                                   
  85.    M1B=0;                                   
  86.    M2A=0;                                   
  87.    M2B=1;
  88. }
  89. //字符串發(fā)送函數(shù)
  90. /*          void send_str( )
  91.                    // 傳送字串
  92.     {
  93.             unsigned char i = 0;
  94.             while(str[i] != '\0')
  95.            {
  96.                 SBUF = str[i];
  97.                 while(!TI);                                // 等特數(shù)據(jù)傳送
  98.                 TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
  99.                 i++;                                        // 下一個字符
  100.            }        
  101.     }
  102.         
  103.                   void send_str1( )
  104.                    // 傳送字串
  105.     {
  106.             unsigned char i = 0;
  107.             while(str1[i] != '\0')
  108.            {
  109.                 SBUF = str1[i];
  110.                 while(!TI);                                // 等特數(shù)據(jù)傳送
  111.                 TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
  112.                 i++;                                        // 下一個字符
  113.            }        
  114.     }        

  115.                           void send_str2( )
  116.                    // 傳送字串
  117.     {
  118.             unsigned char i = 0;
  119.             while(str2[i] != '\0')
  120.            {
  121.                 SBUF = str2[i];
  122.                 while(!TI);                                // 等特數(shù)據(jù)傳送
  123.                 TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
  124.                 i++;                                        // 下一個字符
  125.            }        
  126.     }        
  127.                     
  128.                           void send_str3()
  129.                    // 傳送字串
  130.     {
  131.             unsigned char i = 0;
  132.             while(str3[i] != '\0')
  133.            {
  134.                 SBUF = str3[i];
  135.                 while(!TI);                                // 等特數(shù)據(jù)傳送
  136.                 TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
  137.                 i++;                                        // 下一個字符
  138.            }        
  139.     }        

  140.               void send_str4()
  141.                    // 傳送字串
  142.     {
  143.             unsigned char i = 0;
  144.             while(str4[i] != '\0')
  145.            {
  146.                 SBUF = str4[i];
  147.                 while(!TI);                                // 等特數(shù)據(jù)傳送
  148.                 TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
  149.                 i++;                                        // 下一個字符
  150.            }        
  151.     }*/        
  152.          

  153. /**********************************************/
  154. void main(void)
  155. {
  156.         B_TX1_Busy = 0;
  157.         RX1_Cnt = 0;
  158.         TX1_Cnt = 0;

  159.         S1_8bit();                                //8位數(shù)據(jù)
  160.         S1_USE_P30P31();                //UART1 使用P30 P31口        默認


  161.         AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2產(chǎn)生
  162.         AUXR |= 0x01;                //S1 BRT Use Timer2;
  163.         AUXR |=  (1<<2);        //Timer2 set as 1T mode
  164.         TH2 = (u8)(Timer2_Reload >> 8);
  165.         TL2 = (u8)Timer2_Reload;
  166.         AUXR |=  (1<<4);        //Timer run enable

  167.         REN = 1;        //允許接收
  168.         ES  = 1;        //允許中斷

  169.         EA = 1;                //允許全局中斷
  170.         

  171.         while (1)
  172.         {

  173.           P1M1 = 0;
  174.           P1M0 = 0;
  175.          if(flag_REC==1)                                    //
  176.            {
  177.                 flag_REC=0;
  178.                 if(buff[0]=='O'&&buff[1]=='N')        //第一個字節(jié)為O,第二個字節(jié)為N,第三個字節(jié)為控制碼
  179.                 switch(buff[2])
  180.              {
  181.                       case up :                                                    // 前進
  182.                           //send_str( );
  183.                           qianjin();
  184.                           break;

  185.                       case down:                                                // 后退
  186.                           // send_str1( );
  187.                           houtui();
  188.                           break;

  189.                       case left:                                                // 左轉(zhuǎn)
  190.                            //send_str3( );
  191.                           zuozhuan();
  192.                           break;

  193.                       case right:                                                // 右轉(zhuǎn)
  194.                          // send_str2( );
  195.                           youzhuan();
  196.                           break;

  197.                       case stop:                                                // 停止
  198.                           //send_str4( );
  199.                           tingzhi();
  200.                           break;

  201.              }

  202.                                          
  203.          }
  204.         }
  205. }

  206. /********************* UART1中斷函數(shù)************************/
  207. void UART1_int (void) interrupt UART1_VECTOR
  208. {
  209.         if(RI)        //如果為1接收數(shù)據(jù)有效 為0未接收到數(shù)據(jù)
  210.   {
  211.        RI=0;
  212.        dat=SBUF;
  213.        if(dat=='O'&&(i==0)) //接收數(shù)據(jù)第一幀
  214.          {
  215.             buff[i]=dat;
  216.             flag=1;        //開始接收數(shù)據(jù)
  217.          }
  218.        else
  219.       if(flag==1)
  220.      {
  221.       i++;
  222.       buff[i]=dat;
  223.       if(i>=2)
  224.       {i=0;flag=0;flag_REC=1 ;}  // 停止接收
  225.      }
  226.          }

  227.         if(TI)
  228.         {
  229.                 TI = 0;
  230.                 B_TX1_Busy = 0;                //清除發(fā)送忙標(biāo)志
  231.         }
  232. }
  233.                            
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:195347 發(fā)表于 2017-5-2 22:58 來自手機 | 只看該作者
樓主解決了嗎?我也出現(xiàn)這樣的情況了
回復(fù)

使用道具 舉報

板凳
ID:163950 發(fā)表于 2017-5-3 08:12 | 只看該作者
現(xiàn)在我懷疑是電源共用了一個電源,電機瞬間停止啟動后造成的電壓不穩(wěn)定 ,我想買個帶光耦隔離的驅(qū)動,把電源分開試試!想了好多天了 ,再試試吧!
回復(fù)

使用道具 舉報

地板
ID:163950 發(fā)表于 2017-8-11 08:14 | 只看該作者
解決了,就是電源干擾,改用減速電機就可以了 ,或者電源分開獨立!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄色一级毛片 | 国产黄视频在线播放 | 一级毛片播放 | 久久精品久久久久久 | 国产一区二区电影 | 日韩看片 | 天天想天天干 | 日韩中文字幕网 | 毛片免费看 | 欧美国产日韩精品 | 国产精品视频久久 | 九九免费在线视频 | 色婷婷精品国产一区二区三区 | 在线观看国产视频 | 国产精品1| 国产精品不卡一区 | 亚洲精品久久久久中文字幕欢迎你 | 精久久 | 黑人精品欧美一区二区蜜桃 | 91精品中文字幕一区二区三区 | 国产欧美精品一区二区 | 色免费在线视频 | 国产精品99久久久久久久vr | 中文av在线播放 | 激情一区二区三区 | 毛片免费在线 | 欧美11一13sex性hd | 久久亚洲高清 | 国内精品视频在线观看 | 亚洲一区在线日韩在线深爱 | 欧美国产精品一区二区 | 国产成人黄色 | 国产jizz女人多喷水99 | 中文字幕一区二区三区精彩视频 | 久久99精品国产自在现线小黄鸭 | 日本一区二区不卡视频 | 国产日韩精品一区二区三区 | 精品国产免费人成在线观看 | 久久久久久国产免费视网址 | 黄色在线免费观看视频网站 | 超碰日本 |