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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15F2K60S2+esp8266+步進電機,app控制步進電機正反轉及加減速

[復制鏈接]
跳轉到指定樓層
樓主
ID:355489 發(fā)表于 2018-7-22 18:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在前一篇貼子在基礎上,進一步學習控制步進電機。

準備材料:
步進電機:28byj48+ULN2003驅動板

接線圖:

調試過程中主要有以下問題:
1、步進電機的連接  2 、步進電機的速度控制,如何調整角速度。

步驟:
1、按前一篇,貼子連接好app wifi 控制單片機
2、按上圖連接好步進電機
3、拷貝如下C++代碼, 燒錄到單片機中
4、利用app手機控制步進電機前進,倒退,停止,加速,減速。


代碼如下:

  1. #include <reg52.h>                       //包含頭文件
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define RELOAD_COUNT 0xFA         //宏定義波特率發(fā)生器的載入值
  5. #define MAIN_Fosc                22118400L        //定義主時鐘        
  6. #define        BaudRate1                115200UL        //選擇波特率
  7. #define receive_max 20          //串口接收緩沖長度   
  8. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  9. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))        //Timer 2 重裝值, 對應300KHZ
  10. typedef  unsigned char u8;

  11. /*****************LED燈對應P0口的1個端口*************/
  12. sbit LED0=P3^7;
  13. /************波特率發(fā)生器相關功能寄存器的定義****************/
  14. sfr AUXR=0x8E;
  15. sfr BRT=0x9C;
  16. sfr AUXR1=0xA2;
  17. sfr P_SW1 = 0xA2;
  18. /*****************相關變量**************/
  19. uchar Recive_table[receive_max];        //用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
  20. u8 receive_count=0; //接受數(shù)據(jù)的個數(shù)
  21. /*******************************************************************
  22. 名稱:延時函數(shù)
  23. 作用:毫秒級延時,微妙級延時函數(shù),為數(shù)據(jù)收發(fā)完成作等待.......
  24. ********************************************************************/
  25. void ms_delay(uint t)
  26. {
  27.     uint i,j;
  28.     for(i=t; i>0; i--)
  29.         for(j=112; j>0; j--);
  30. }


  31. /********************************************************************
  32. 名稱:波特率發(fā)生器函數(shù)
  33. 作用:波特率發(fā)生器可以是T1定時器實現(xiàn),也可以是MCU內部獨立的波特率發(fā)生器,
  34. 各自不同的載入值計算式,具體根據(jù)寄存器相關設置來參考計算,以實現(xiàn)
  35. 異步串行通訊。(經(jīng)測試,兩種設置方式均可用,可任選一種。)
  36. ********************************************************************/
  37. void Uart_Init()//使用定時器1作為波特率發(fā)生器
  38. {
  39.     SCON |= 0x40;               //8位數(shù)據(jù)
  40.     P_SW1 &=  ~0xc0;       //UART1 使用P30 P31口  默認
  41.     TR1 = 0;                    //關閉定時器
  42.     TR1 = 0;                        //波特率使用Timer1產(chǎn)生
  43.     AUXR &= ~0x01;                //S1 BRT Use Timer1;
  44.     TMOD &= ~(1<<6);   //Timer1 set As Timer
  45.     TMOD &= ~0x30;     //Timer1_16bitAutoReload;2
  46.     AUXR |=  (1<<6);        //Timer1 set as 1T mode
  47.     TH1 = (u8)(Timer1_Reload >> 8);
  48.     TL1 = (u8)Timer1_Reload;
  49.     TR1  = 1;

  50.     PS = 1; //高優(yōu)先級中斷
  51.     REN = 1;        //允許接收
  52.     ES  = 1;        //允許中斷
  53.     EA = 1;                //允許全局中斷


  54. }

  55. //發(fā)送一字節(jié)
  56. void sendByte(uchar b)
  57. {   ES=0;
  58.     SBUF = b;
  59.     while(!TI);
  60.     TI=0;
  61.     ES=1;
  62. }

  63. //發(fā)送字符串
  64. void sendString(uchar *s)
  65. {
  66.     while(*s != '\0') //字符串默認結尾'\0',以此來判斷字符串的結束
  67.     {
  68.         sendByte(*s++);
  69.     }
  70. }

  71. /********************************************************************
  72. 名稱:WIFI模塊設置函數(shù)
  73. 作用: 啟動模塊,以便可以實現(xiàn)無線接入和控制
  74. ********************************************************************/
  75. void ESP8266_Set(uchar *puf) // 數(shù)組指針*puf指向字符串數(shù)組
  76. {
  77.     sendString(puf);
  78.     ms_delay(10);
  79.     sendString("\r\n");//回車
  80. }
  81. /****************************************************
  82. 名稱:ESP8266發(fā)送數(shù)據(jù)函數(shù)
  83. 功能:用于與wifi模塊相連的終端發(fā)送數(shù)據(jù)
  84. *****************************************************/
  85. void ESP8266_Sent(uchar *puf)      // 數(shù)組指針*puf指向字符串數(shù)組
  86. {
  87.     ESP8266_Set("AT+CIPSEND=0,50");
  88.     sendString(puf);
  89.     ms_delay(10);
  90.     sendString("\r\n");   //回車
  91. }


  92. /***


  93. 步進電機

  94. **/
  95. #define MotorData P0
  96. unsigned char curKeyval;
  97. //步進電機控制接口定義
  98. uchar phasecw[4] = {0x08,0x04,0x02,0x01}; //正轉 電機導通相序 D-C-B-A
  99. uchar phaseccw[4]= {0x01,0x02,0x04,0x08}; //反轉 電機導通相序 A-B-C-D
  100. int speedMax = 14;
  101. int speedMin = 50;
  102. int curSpeed = 50;
  103. //順時針轉動
  104. void MotorCW(void)
  105. {
  106.     uchar i;
  107.     for(i=0; i<4; i++)
  108.     {
  109.         MotorData=phasecw;
  110.         ms_delay(curSpeed);
  111.     }
  112. }
  113. //逆時針轉動
  114. void MotorCCW(void)
  115. {
  116.     uchar i;
  117.     for(i=0; i<4; i++)
  118.     {
  119.         MotorData=phaseccw;
  120.         ms_delay(curSpeed);//轉速調節(jié)
  121.     }
  122. }
  123. //停止轉動
  124. void MotorStop(void)
  125. {
  126.     MotorData=0x00;
  127. }

  128. void speedUp(void){

  129.         curSpeed = curSpeed+3;
  130. }

  131. void speedDown(void){

  132.         curSpeed = curSpeed-3;
  133. }

  134. /********************************************************************
  135. 名稱:主函數(shù)
  136. 作用:程序的執(zhí)行入口
  137. ********************************************************************/
  138. void main()
  139. {
  140.     ms_delay(50000);
  141.     LED0=0;//關閉LED燈
  142.     Uart_Init();//使用獨立的波特率發(fā)生器
  143.     ms_delay(500);
  144.     LED0=!LED0;
  145.     ms_delay(500);
  146.     LED0=!LED0;
  147.     ESP8266_Set("AT+CIPMUX=1"); //啟動多連接
  148.     ms_delay(500);
  149.     LED0=!LED0;
  150.     ESP8266_Set("AT+CIPSERVER=1,333");//建立server,端口為333
  151.     ms_delay(500);
  152.     LED0=!LED0;
  153.     //允許串口中斷
  154.     while(1)
  155.     {

  156.         if(receive_count > 0)//如果接受到數(shù)據(jù)
  157.         {
  158.             ms_delay(500);
  159.             receive_count = 0;//接收計數(shù)清0

  160.             if(Recive_table[9]=='0')
  161.             {
  162.                 LED0=!LED0;//0 燈滅
  163.                 ms_delay(500);
  164.                 ESP8266_Sent("close");
  165.                 //  ms_delay(500);
  166.                 //        ESP8266_Sent(Recive_table);
  167.                 //         ms_delay(500);
  168.                 curKeyval  =1;
  169.                 ms_delay(50);
  170.             }
  171.             if(Recive_table[9]=='1')
  172.             {
  173.                 LED0=!LED0;//0 燈滅
  174.                 ms_delay(500);
  175.                 ESP8266_Sent("open");
  176.                 //  ms_delay(500);
  177.                 //        ESP8266_Sent(Recive_table);
  178.                 //         ms_delay(500);
  179.                 curKeyval  =2;
  180.                 ms_delay(50);
  181.             }
  182.             if(Recive_table[9]=='2')
  183.             {
  184.                 LED0=!LED0;//0 燈滅
  185.                 ms_delay(500);
  186.                 ESP8266_Sent("open");
  187.                 //  ms_delay(500);
  188.                 //        ESP8266_Sent(Recive_table);
  189.                 //         ms_delay(500);

  190.                 curKeyval  =3;
  191.                 ms_delay(50);
  192.             }
  193.                          if(Recive_table[9]=='3')
  194.             {
  195.                  speedUp();
  196.             }
  197.                          if(Recive_table[9]=='4')
  198.             {
  199.                   speedDown();
  200.             }
  201.             receive_count = 0;//接收計數(shù)清0

  202.         }


  203.         switch(curKeyval)
  204.         {
  205.         case 1:
  206.             MotorCW();
  207.             break;
  208.         case 2:
  209.             MotorCCW();
  210.             break;
  211.         case 3:
  212.             MotorStop();
  213.             break;

  214.         }

  215.     }

  216. }

  217. void UART1_int (void) interrupt 4
  218. {
  219.     if(RI)
  220.     {
  221.         RI = 0;//清除接受標志
  222.         Recive_table[receive_count] = SBUF;//將數(shù)據(jù)存入數(shù)組
  223.         if(++receive_count > receive_max) {
  224.             receive_count = 0;//避免溢出
  225.         }
  226.         if((Recive_table[receive_count-1]=='\n'))
  227.             receive_count=0;
  228.     }
  229.     if(TI)
  230.     {}
  231. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:480682 發(fā)表于 2019-3-7 10:40 | 只看該作者
有問題呀,為什么我不能執(zhí)行呀
回復

使用道具 舉報

板凳
ID:510566 發(fā)表于 2019-4-12 15:53 | 只看該作者
這套東西單片機可以用52嗎
回復

使用道具 舉報

地板
ID:510566 發(fā)表于 2019-4-12 16:01 | 只看該作者
單片機改成52的話程序改動大嗎
回復

使用道具 舉報

5#
ID:308173 發(fā)表于 2019-4-13 09:33 | 只看該作者
兄弟你把代碼打包一下讓我下載呀
回復

使用道具 舉報

6#
ID:355489 發(fā)表于 2019-4-27 19:20 | 只看該作者
miaoxiaobaiqaq 發(fā)表于 2019-4-13 09:33
兄弟你把代碼打包一下讓我下載呀

你直接復制代碼就可以了,這就是所有代碼
回復

使用道具 舉報

7#
ID:355489 發(fā)表于 2019-4-29 20:41 | 只看該作者
hjx820 發(fā)表于 2019-4-27 19:20
你直接復制代碼就可以了,這就是所有代碼

sorry, 附件請到        STC15F2K60S2單片機+ESP8266+NTC傳輸?shù)骄W(wǎng)絡并訪問 這個貼子里下載,我這里所有貼子的除了main.c不一樣,其它都是一樣的
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频在线观看一区二区 | 久久久久久免费看 | 国产精品久久久乱弄 | 欧美片网站免费 | 欧美日韩三级视频 | 中文字幕一区二区三区精彩视频 | 亚洲成网站| 黄 色 毛片免费 | 久草成人 | 巨大黑人极品videos精品 | 久久久亚洲一区 | 免费精品视频在线观看 | 91视频观看 | 免费亚洲一区二区 | 成人免费视频网站在线看 | 久草免费在线 | 国产乱码精品一区二区三区中文 | yiren22综合网成人 | 亚洲精品电影网在线观看 | 香蕉视频在线播放 | 狠狠狠干| 日韩精品一区二区三区视频播放 | 欧美日韩在线不卡 | 日韩综合在线播放 | 毛片免费在线观看 | 成人在线免费看 | 91大神新作在线观看 | 日韩 欧美 二区 | 国产精品欧美一区二区三区不卡 | 免费观看一级特黄欧美大片 | 黄色成人免费在线观看 | 农村妇女毛片精品久久久 | 99精品免费视频 | 国产极品粉嫩美女呻吟在线看人 | 永久精品 | 九九看片| 亚洲高清一区二区三区 | 成人不卡视频 | 99热在这里只有精品 | 国产美女一区二区 | 国产精品一区二区三区在线 |