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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機控制步進電機正反轉和加減速keil源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:349552 發(fā)表于 2018-6-11 16:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /***********************************************************************************
  2. *  標題:  步進電機+上位機 控制正反轉和加減速                                                                           *
  3. *                                                                                                                                                                    *
  4. *    通過本例程了解步進馬達使用及驅(qū)動程序編寫                                                                           *
  5. *;   單雙八拍工作方式:                                                            *
  6. *;   A-AB-B-BC-C-CD-D-DA                                                                                                                      *
  7. *                                                                                        *                                                                                                                          *
  8. **************************************************************************************/  
  9. //接線方法:請你一定要看,步進電機杜邦線接方法 步進電機模塊上“-”接到開發(fā)板上的GND “+接VCC
  10. //IN1~IN4 分別接到P1.0~P1.3”  

  11. #include "reg52.h"
  12. #include <string.h>

  13. void delay(unsigned int t);

  14. //Motor
  15. sbit F1 = P1^0;
  16. sbit F2 = P1^1;
  17. sbit F3 = P1^2;
  18. sbit F4 = P1^3;

  19. unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
  20. unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉

  21. unsigned char g_Speed = 10; //最慢,1為最快
  22. unsigned char g_State = 0;  //0: 停止, 1為正轉,2為反轉

  23. /*協(xié)議定義*/
  24. bit startBit = 0;                                  //串口接收開始標志位
  25. bit newLineReceived = 0;                 //串口一幀協(xié)議包接收完成
  26. unsigned char inputString[50];  //接收數(shù)據(jù)協(xié)議

  27. /**********************************************************************
  28. *                                                                                                                                          *
  29. *                       步進電機驅(qū)動                                                                  *
  30. *                                                                                                                                          *
  31. ***********************************************************************/
  32. void  motor_ffw()
  33. {
  34.    unsigned char i;
  35.    unsigned int  j;
  36.           for (j=0; j<64; j++)
  37.     {

  38.       for (i=0; i<8; i++)
  39.         {
  40.           if(g_State==1) P1 = FFW[i]&0x1f;  //取數(shù)據(jù)
  41.                   if(g_State==2) P1 = FFZ[i]&0x1f;
  42.           delay(g_Speed);                   //調(diào)節(jié)轉速
  43.         }
  44.      }
  45. }

  46. /******************************************************
  47. *
  48. *                     延時程序
  49. *
  50. ********************************************************/
  51. void delay(unsigned int t)
  52. {                           
  53.    unsigned int k;
  54.    while(t--)
  55.    {
  56.      for(k=0; k<80; k++)
  57.      { }
  58.    }
  59. }

  60. //串口初始化
  61. void ComInit(void)
  62. {
  63.    
  64.            SCON = 0x50;         // SCON: 模式1, 8-bit UART, 使能接收
  65.         TMOD |= 0x20;
  66.         TH1=0xfd;                 //波特率9600 初值
  67.         TL1=0xfd;
  68.         TR1= 1;
  69.         EA = 1;                    //開總中斷
  70.         ES= 1;                         //打開串口中斷


  71. }
  72. //串口發(fā)送函數(shù)
  73. /*void PutString(unsigned char *TXStr)  
  74. {               
  75.         ES=0;     
  76.         while(*TXStr!=0)
  77.         {                     
  78.           SBUF=*TXStr;
  79.           while(TI==0);
  80.           TI=0;   
  81.           TXStr++;
  82.         }
  83.         ES=1;
  84. }*/
  85. void Protocol(void)
  86. {
  87.         while (newLineReceived)  //協(xié)議數(shù)據(jù)接收完畢一包
  88.         {
  89.                         //判斷是否是51的協(xié)議
  90.                 if(inputString[1] != '5' || inputString[2] != '1')
  91.                 {
  92.                          newLineReceived = 0;  
  93.                            memset(inputString, 0x00, sizeof(inputString));
  94.                         break;
  95.                 }
  96.                 //判斷是否是Step motor的協(xié)議數(shù)據(jù)
  97.                  if(inputString[4] != 'S' && inputString[5] != 'M' && inputString[6] != 'T')
  98.                 {
  99.                         newLineReceived = 0;  
  100.                            memset(inputString, 0x00, sizeof(inputString));
  101.                         break;
  102.                 }

  103.                 if(inputString[8] == '1') //加速
  104.                 {
  105.                         g_Speed--;
  106.                         if(g_Speed == 0)
  107.                         g_Speed = 1;
  108.                         
  109.                 }
  110.                 else if(inputString[8] == '2') //減速
  111.                 {
  112.                         g_Speed++;
  113.                         if(g_Speed > 10)
  114.                         g_Speed = 10;
  115.                         
  116.                 }
  117.                
  118.                 //讀取功能執(zhí)行
  119.                 if(inputString[7] == '0')         //停止
  120.                 {
  121.                         g_State = 0;
  122.                         newLineReceived = 0;  
  123.                            memset(inputString, 0x00, sizeof(inputString));
  124.                         break;        
  125.                 }
  126.                 else if(inputString[7] == '1')        //順轉
  127.                 {
  128.                         g_State = 1;
  129.                         newLineReceived = 0;  
  130.                            memset(inputString, 0x00, sizeof(inputString));
  131.                         break;
  132.                 }
  133.                 else if(inputString[7] == '2')        //逆轉
  134.                 {
  135.                         g_State = 2;
  136.                         newLineReceived = 0;  
  137.                            memset(inputString, 0x00, sizeof(inputString));
  138.                         break;
  139.                 }

  140.         
  141.                 newLineReceived = 0;  
  142.                    memset(inputString, 0x00, sizeof(inputString));
  143.         }
  144. }
  145. void main()
  146. {
  147.          ComInit();
  148.         P1 = 0xff;
  149.     while(1)
  150.         {
  151.                  
  152.                 if(g_State != 0 )
  153.                 {
  154.                         motor_ffw();        
  155.                 }
  156.         }
  157. }

  158. /******************************************************************/
  159. /* 串口中斷程序*/
  160. /******************************************************************/
  161. void UART_SER () interrupt 4
  162. {
  163.         unsigned char n;         //定義臨時變量
  164.         static int num = 0;

  165.         if(RI)                 //判斷是接收中斷產(chǎn)生
  166.         {
  167.                 RI = 0;         //標志位清零
  168.                 n = SBUF; //讀入緩沖區(qū)的值

  169.                 //control=n;
  170.             if(n ==


  171. )
  172.             {
  173.               startBit = 1;
  174.                   num = 0;
  175.             }
  176.             if(startBit == 1)
  177.             {
  178.                inputString[num] = n;
  179.                    num++;   
  180.             }  
  181.             if (n == '#')
  182.             {
  183.                newLineReceived = 1;
  184.                startBit = 0;
  185.                    Protocol();
  186.             }
  187.                
  188.                 if(num >= 50)
  189.                 {
  190.                         num = 0;
  191.                         startBit = 0;
  192.                         newLineReceived        = 0;
  193.                 }
  194.         }

  195. }

復制代碼

所有資料51hei提供下載:
程序 步進電機.zip (45.43 KB, 下載次數(shù): 33)


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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-6-12 01:34 | 只看該作者
補全原理圖才可獲取積分
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产婷婷色一区二区三区 | 亚洲精品不卡 | 久久精品一 | 亚洲在线日韩 | 久久亚洲天堂 | 国产欧美在线一区 | 91免费电影 | 黄色一级大片在线免费看产 | 日本欧美国产在线观看 | 毛片高清 | 特级黄一级播放 | 亚洲午夜精品在线观看 | 99久久99久久精品国产片果冰 | 9久久婷婷国产综合精品性色 | 人人干人人草 | 日韩国产一区二区三区 | 6080亚洲精品一区二区 | 国产激情视频网 | 亚洲成人一级 | 91视频精选 | 国产成人a亚洲精品 | 日韩av一区二区在线观看 | 亚洲日本一区二区 | 日韩一区二区三区在线观看 | 中国一级特黄真人毛片免费观看 | 国产一区二区三区久久久久久久久 | 欧美在线一级 | 成人av播放| 欧美精品欧美精品系列 | 久久久久亚洲 | a级毛片毛片免费观看久潮喷 | 男女网站视频 | 日韩视频在线观看中文字幕 | 国产日韩欧美中文字幕 | 国产亚洲黄色片 | 日韩欧美在线观看视频 | 国产成人亚洲精品 | 欧美黄色大片在线观看 | 欧美黄色一级毛片 | 久久久精品网 | 国产福利在线视频 |