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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2734|回復: 2
打印 上一主題 下一主題
收起左側

42步進電機藍牙控制模塊化編程

[復制鏈接]
跳轉到指定樓層
樓主
ID:247810 發(fā)表于 2019-8-1 16:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  感謝51黑論壇給予我的幫助,我自己總結了前輩們的代碼,寫了一個42步進電機藍牙控制的代碼,能實現(xiàn)前后左右控制;尋跡,避障lcd1602顯示功能還不齊全。



單片機源程序如下:
  1. #include "42moto.h"
  2. #include "lcd1602.h"
  3. /**********************************************
  4. *              IO設置
  5. *
  6. *
  7. *************************************************/
  8. /**************紅外引腳定義*******************/

  9. sbit HY_R = P1^4;   //右邊紅外傳感器定義
  10. sbit HY_Z = P1^5;   //中間紅外傳感器定義
  11. sbit HY_L = P1^6;   //左邊紅外傳感器定義
  12. /*************尋跡引腳定義*******************/
  13. sbit XJ_R = P1^0;   //右邊尋跡傳感器定義
  14. sbit XJ_Z = P1^1;   //中間尋跡傳感器定義
  15. sbit XJ_L = P1^2;   //左邊尋跡傳感器定義
  16. /************電機控制引腳定義*****************/
  17. //sbit ENA_R   = P1^2;   // 右電機使能
  18. sbit PUL_L   = P2^0;     // 左電機脈沖
  19. sbit DIR_L   = P2^2;     // 左電機方向
  20. sbit PUL_R   = P2^3;     // 右電機脈沖
  21. sbit DIR_R   = P2^4;     // 右電機方向
  22. //sbit ENA_L = P2^2;     // 左電機使能
  23. #define MotorTabNum 5
  24. unsigned char T0_NUM;
  25. signed char g_MotorNum = 0;
  26. unsigned char MotorTab[6] = {6, 5, 4, 3, 2, 1};
  27. void T0_Init();//中斷定義
  28. void delay(xms);
  29. void hongwai(void);
  30. void xunji(void);

  31. /********************************延時函數(shù)***********************************************************/
  32. void delay(xms)
  33. {
  34.          unsigned int x,y;
  35.          for(x=xms;x>0;x--)
  36.                  for(y=110;y>0;y--);
  37. }
  38. /*************定時器初始化***********************************************************/
  39. void T0_Init()
  40. {
  41.         TMOD = 0x01;
  42.         TH0 = (65535-100)/256;  // 1ms
  43.         TL0 = (65535-100)%256;
  44.         EA = 1;
  45.         ET0 = 1;

  46. }
  47. ////延時n毫秒
  48. //void delay_ms(unsigned int n)
  49. //{
  50. //    unsigned int i=0,j=0;
  51. //    for(i=0;i<n;i++)
  52. //        for(j=0;j<123;j++);
  53. //}

  54. /*************定時器中斷************************/
  55. void T0_time() interrupt 1
  56. {
  57. //       TR0 = 0;
  58.         TH0 = (65535-100)/256;   
  59.         TL0 = (65535-100)%256;
  60.                 T0_NUM++;
  61.         if(T0_NUM >= MotorTab[g_MotorNum])        // 增加按鍵g_MotorNum++   減小按鍵g_MotorNum--
  62.         {
  63.                 T0_NUM = 0;
  64. //          PUL_R =PUL_R^0x01;          //   輸出脈沖
  65. //      PUL_L =PUL_L^0x01;          //   輸出脈沖
  66.         }

  67.         
  68. }   
  69. /******42步進電機運動函數(shù)*******************************
  70. DIR_R  ^= 1;   //=1后退
  71. DIR_R  ^= 1;   
  72. DIR_L  ^= 0;   //=0前進
  73. DIR_L  ^= 0;
  74. 因為兩邊電機的安裝是一樣的,所以DIR的方向有所不同
  75. 可以根據(jù)該電機接線的方式改變電機的方向
  76. ***********************************************/
  77. void RUN(void)   //前進
  78. {

  79.         DIR_R ^= 0;     //右前進
  80.     DIR_L ^= 0;     //左后退就是前進
  81.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  82.     PUL_L =PUL_L^0x01;          //   輸出脈沖
  83.        
  84. }
  85. void RIGHT(void)//右轉
  86. {
  87.   
  88.     DIR_L ^= 1;    //右轉,就讓左邊的電機前進,右邊后退
  89.     DIR_R ^= 0;     //右前進       
  90.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  91.     PUL_L =PUL_L^0x01;          //   輸出脈沖
  92.   
  93. }
  94. void LEFT(void)  //左轉
  95. {
  96.   DIR_L ^= 0;     //左后退就是前進  
  97.    DIR_R ^= 1;  //左轉,就讓右邊前進,左邊后退
  98.    PUL_R =PUL_R^0x01;          //   輸出脈沖
  99.    PUL_L =PUL_L^0x01;          //   輸出脈沖
  100. }

  101. void BACK(void) //后退
  102. {
  103.        
  104.         DIR_R ^= 1;    //這里就和前進相反就可以了
  105.     DIR_L ^= 1;
  106.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  107.     PUL_L =PUL_L^0x01;          //   輸出脈沖
  108. }
  109. void STOP(void) //停止
  110. {
  111.   EA=0;  //讓所有中斷都關閉,
  112.   PUL_R =PUL_R^0x00;          //   輸出脈沖
  113.   PUL_L =PUL_L^0x00;          //   輸出脈沖       
  114. }
  115. /********************按鍵控制*********************/
  116. //void anjian()
  117. //{
  118. //       
  119. //}

  120. /********************尋跡傳感控制*********************/

  121. void hongwai(void)
  122. {       
  123.          //有信號為0  沒有信號為1
  124.         //if(HY_R==1&&HY_Z==1&&HY_L==1)//都沒有信號就前進
  125.                 if(HY_R==1&&HY_Z==1&&HY_L==1)//都沒有信號就前進
  126.            {
  127.                 EA=1;
  128.                 //lcd_init1(); //顯示RUN運行
  129.      DIR_R ^= 0;     //右前進
  130.     DIR_L ^= 0;     //左后退就是前進
  131.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  132.     PUL_L =PUL_L^0x01;          //   輸出脈沖       
  133.                 TR0 = 1;
  134.         }
  135.        
  136.         else
  137.                   {
  138. //有信號為0  沒有信號為1
  139.         if(HY_R==0&&HY_Z==1&&HY_L==1)//右邊有信號說明右障礙物,所以電機停止1S,然后后退1S,左電機后退,右電機轉動
  140.      {         
  141.          // lcd_init2();
  142.           DIR_L ^= 1;    //右轉,就讓左邊的電機前進,右邊后退
  143.     DIR_R ^= 0;     //右前進       
  144.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  145.     PUL_L =PUL_L^0x01;          //   輸出脈沖         
  146.      }
  147. //有信號為0  沒有信號為1
  148.         if(HY_R==1&&HY_Z==1&&HY_L==0)//左邊有信號說明左障礙物,所以電機停止1S,然后后退1S,右電機后退,左電機轉動
  149.      {
  150.                  
  151.                 // lcd_init3();                        
  152.         DIR_L ^= 0;    //右轉,就讓左邊的電機前進,右邊后退
  153.        DIR_R ^= 1;     //右前進       
  154.        PUL_R =PUL_R^0x01;          //   輸出脈沖
  155.        PUL_L =PUL_L^0x01;          //   輸出脈沖
  156.                  
  157.      }
  158.           //有信號為0  沒有信號為1
  159.         if(HY_R==1&&HY_Z==0&&HY_L==1)//中間有信號就后退
  160.      {         
  161.                 // lcd_init4();       
  162.                DIR_R ^= 1;    //這里就和前進相反就可以了
  163.     DIR_L ^= 1;
  164.     PUL_R =PUL_R^0x01;          //   輸出脈沖
  165.     PUL_L =PUL_L^0x01;          //   輸出脈沖
  166.        
  167.      }
  168. //有信號為0  沒有信號為1
  169.         if(HY_R==0&&HY_Z==0&&HY_L==0)//當然全部有信號就停止
  170.      {
  171.                  //lcd_init5();          
  172.                  EA=0;                         
  173.      }
  174.    }  
  175. }

  176. /*************************尋跡傳感控制**********************/

  177. void xunji(void)
  178. {       
  179.          //有信號為0  沒有信號為1
  180.         //if(HY_R==1&&HY_Z==1&&HY_L==1)//都沒有信號就前進
  181.                 if(XJ_R==1&&XJ_Z==1&&XJ_L==1)//都沒有信號就前進
  182.            {
  183.                 EA=1;
  184.                 lcd_init1(); //顯示RUN運行
  185.         delay(10);   // 軟件延時消抖
  186.                 RUN();       
  187.                 TR0 = 1;
  188.         }
  189.        
  190.         else
  191.          {
  192. //有信號為0  沒有信號為1
  193.         if(XJ_R==0&&XJ_Z==1&&XJ_L==1)//右邊有信號說明右障礙物,所以電機停止1S,然后后退1S,左電機后退,右電機轉動
  194.      {   
  195.           lcd_init2();
  196.         delay(10);   // 軟件延時消抖                 
  197.                  RIGHT();
  198.                  
  199.      }
  200. ……………………

  201. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
42步進電機模塊化2LY.rar (55.16 KB, 下載次數(shù): 22)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:247810 發(fā)表于 2019-8-1 17:00 | 只看該作者
小車的 照片
回復

使用道具 舉報

板凳
ID:282021 發(fā)表于 2019-8-2 00:09 來自手機 | 只看該作者
好用,學習藍牙的好方法。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲最大av | www国产成人免费观看视频,深夜成人网 | 国产福利在线播放 | 一道本视频| 丁香综合 | 国产玖玖| 久久久久久成人网 | 亚洲一区视频在线 | 一区免费观看 | 欧美一级在线免费观看 | 色视频在线观看 | 日韩中文字幕在线观看 | 欧美一级欧美一级在线播放 | 国产精品一区在线观看 | 色婷婷综合久久久久中文一区二区 | 欧美精品一区二区三区在线 | 日韩av在线一区二区 | 一区二区三区视频在线 | 在线视频一区二区三区 | 2021狠狠天天天 | 欧美二级 | 99热这里| 欧美黄色免费网站 | 久久久久久亚洲精品 | 免费国产视频 | 午夜影视网 | 91九色porny首页最多播放 | 国产精品2区 | 国产精选一区 | 五月激情久久 | av先锋资源 | 91九色视频| 精品精品 | 国产91 在线播放 | 午夜欧美一区二区三区在线播放 | 中文字幕亚洲一区 | 亚洲欧美日韩久久久 | 一级日批片 | 精品无码久久久久久国产 | 影音先锋中文字幕在线观看 | 亚洲精品一区二区网址 |