亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stepmotor.c

?? 適用于單片機(51)和ARM的步進電機直線算法(兩個步進電機組成的平面),且含有加減速算法.
?? C
字號:
/****************************************************************************
 
 x和y兩個步進電機構成的一個平面上的直線函數,加減速直線函數. 使用Bresenham直線算法
 
 適用于lpc2114,CPU頻率為55MHZ.
 該直線算法在51單片機上也能獲得很好的效果
 
****************************************************************************/

typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable 	無符號8位整型變量  */
typedef signed   char  int8;                    /* defined for signed 8-bits integer variable		有符號8位整型變量  */
typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable 	無符號16位整型變量 */
typedef signed   short int16;                   /* defined for signed 16-bits integer variable 		有符號16位整型變量 */
typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable 	無符號32位整型變量 */
typedef signed   int   int32;                   /* defined for signed 32-bits integer variable 		有符號32位整型變量 */
typedef float          fp32;                    /* single precision floating point variable (32bits) 單精度浮點數(32位長度) */
typedef double         fp64;                    /* double precision floating point variable (64bits) 雙精度浮點數(64位長度) */

// I/O口定義
#define   XPU           0x00000400             //OUT P0.10口 X脈沖輸出端 
#define   XDR           0x00000800             //OUT P0.11口 X方向控制端 - 0右1左 
#define   YPU           0x00001000             //OUT P0.12口 Y脈沖輸出端 
#define   YDR           0x00002000             //OUT P0.13口 Y方向控制端 - 0上1下  

uint32 x0 = 0; //步進平面中,x的當前坐標
uint32 y0 = 0; //步進平面中,y的當前坐標

 //加/減速的相關參數,由系統參數中設置
uint8  dastep = 10;  //加減速時的計數步長(即N個脈沖才加減一次速),設置范圍為1~100.


/****************************************************************************
* 名稱:Delay_n(uint32 delayn)
* 功能:    延時
* 入口參數:delayn - 延時長度
* 出口參數:
* delay_n(1) = 約為0.108083us
****************************************************************************/
void Delay_n(uint32 delayn)
{ 
  for(; delayn > 0; delayn--);

}

/****************************************************************************
* 名稱:move_x(uint8 dr,uint32 delay)
* 功能:x方向走一步
* 入口參數: dr   - 走線方向(1=正向,0=反向)
*           delay - 走線速度的延時
* 出口參數:x0(全局變量) - x的當前坐標值
* 
****************************************************************************/
void move_x(uint8 dr,uint32 delay)
{  uint8 xa;

    IO0CLR = XPU;    //輸出低電平
     Delay_n(delay); //延時,為脈沖(低電平)寬度
    IO0SET = XPU;    //輸出高電平
     Delay_n(delay); //延時,為脈沖(高電平)寬度
    //計算當前的坐標值
   if(dr)
    {
      x0++;
    }
   else  
    {   
      x0--;
    }

}
  
/****************************************************************************
* 名稱:move_y(uint8 dr,uint32 delay)
* 功能:Y方向走一步
* 入口參數: dr   - 走線方向(1=正向,0=反向)
*           delay - 走線速度的延時
* 出口參數:y0(全局變量) - y的當前坐標值
* 
****************************************************************************/
void move_y(uint8 dr,uint32 delay)
{  uint8 xa;
    
    IO0CLR = YPU;    //輸出低電平
     Delay_n(delay); //延時,為脈沖(低電平)寬度
    IO0SET = YPU;    //輸出高電平
     Delay_n(delay); //延時,為脈沖(高電平)寬度
    //計算當前的坐標值
   if(dr)
    {
      y0++;
    }
   else  
    {   
      y0--;
    }
}

/****************************************************************************
* 名稱: Line_To_xy(uint32 x1,uint32 y1,uint32 delayn) 
* 功能:x和y按指定的速度走一直線,從坐標(x0,y0)到(x1,y1)
* 入口參數:x1 - x的目標坐標
*           y1 - y的目標坐標
*           delayn - 走線速度
* 出口參數:
* //XY按設定的速度走一直線((x0,y0)-(x1,y1)))
****************************************************************************/
void Line_To_xy(uint32 x1,uint32 y1,uint32 delayn) 
{ int32  e,dx,dy;
  uint32 i,xdr,ydr;

   //確定走線的長度和方向(在這里直接設置步進電機的方向)
  if(x1 >= x0)
   {dx = x1 - x0; IO0CLR = XDR;xdr = 1;}   //X正向   0右1左
  else
   {dx = x0 - x1; IO0SET = XDR;xdr = 0;}   //X反向
  if(y1 >= y0)
   {dy = y1 - y0; IO0CLR = YDR;ydr = 1;}   //Y正向   0下1上
  else
   {dy = y0 - y1; IO0SET = YDR;ydr = 0;}   //Y反向

  
  if(dx >= dy) //x固定走dx步,y根據計算結束再決定是否走步進
  {
      e = -dx;
      for(i = 1; i <= dx; i++)
      { 
         e += 2 * dy;
           move_x(xdr,delayn); 
         if(e >= 0)  //判斷Y是否走一步
          {
              move_y(ydr,delayn); 
              e = e - 2 * dx;
          }
      }
  }
  else   //y固定走dy步,x根據計算結束再決定是否步進
  {  
      e = -dy;
      for(i = 1; i <= dy; i++)
       {
          e = e + 2 * dx;
          move_y(ydr,delayn); 
          
          if(e >= 0)     //判斷X是否走一步
            {
                move_x(xdr,delayn); 
                e = e - 2 * dy;
            }
       }
  }
}
/****************************************************************************
* 名稱: Accel_To_xy(uint32 x1,uint32 y1,uint32 minaccel,uint32 maxdelay)
* 功能:x和y按加/減速走一條直線,從坐標(x0,y0)到(x1,y1). 加速度曲線為梯形
* 入口參數:x1 - x的目標坐標
*           y1 - y的目標坐標
*           minaccel - 加速前的初始速度(越大越慢)
*           maxdelay - 加速的最高速度(越小越快)
* 出口參數:

* 函數中的變量: 
*  acount -  加速器指針,即加速器在加速線上的當前位置.
*  alen   -  加速線的總長度  
*  shortlen -  1 = 其加速空間小于 "加速段 + 減速段" 的長度
*  accelsta -  0 = 速度不變; 0x5A = 加速; 0xA5 = 減速;
*  xcount   -  加速度計數器,到達加速度后,加/減一次速
*  dxdelay  -  加速/減速的步數
****************************************************************************/
void Accel_To_xy(uint32 x1,uint32 y1,uint32 minaccel,uint32 maxdelay)
{ int32  e,dx,dy,ndelay;
  uint32 i,acount=0,alen,dxdelay;
  uint8 xcount = 0,shortlen,accelsta = 0x5a,xdr,ydr;  //accelsta: 0=速度不變,5AH = 加速,A5H =減速;
  
  
   //確定走線的長度和方向(在這里直接設置步進電機的方向)
  if(x1 >= x0)
   {dx = x1 - x0; IO0CLR = XDR; xdr = 1;}   //X正向   0右1左
  else
   {dx = x0 - x1; IO0SET = XDR; xdr = 0;}   //X反向
  if(y1 >= y0)
   {dy = y1 - y0; IO0CLR = YDR; ydr = 1;}   //Y正向   0下1上
  else
   {dy = y0 - y1; IO0SET = YDR; ydr = 0;}   //Y反向

   
  alen = (dx + dy) / (2 * dastep);  //整個梯形曲線加減速曲線的總長度
  
  if(minaccel > maxdelay)
    {   dxdelay = minaccel - maxdelay; }  //加速/減速的步數
  else 
    {   dxdelay = 0; }     //無加減速  
    
  ndelay = minaccel;  //加減速的起始速度
  if(alen > dxdelay)  
    {shortlen = 0; alen = alen * 2;}
  else
    {shortlen = 1;}  //shortlen = 1,表示加速空間小于加,減速量
  

  if(dx >= dy) //x固定走dx步,y根據計算結束再決定是否走步進
  {
      e = -dx;
      for(i = 1; i <= dx; i++)
      { 
           xcount ++;       //由于加/減速的總步長為dx+dy,所以X和Y分別每走一步,都要進行加減速度處理
           if(xcount >= dastep) //x和y共同走了N步后進行一次加減速處理
              { acount ++;
                xcount = 0;
                 if(accelsta == 0x5a) ndelay --;       //加速
                 else if(accelsta == 0xa5) ndelay ++;  //減速
              }   
           e += 2 * dy;
           move_x(xdr,ndelay); 
         if(e >= 0)  //判斷Y是否走一步
          {
              move_y(ydr,ndelay); 
             xcount++;       //由于加/減速的總步長為dx+dy,所以X和Y分別每走一步,都要進行加減速度處理
             if(xcount >= dastep)  //x和y共同走了N步后進行一次加減速處理
               { acount ++;
                 xcount = 0;
                 if(accelsta == 0x5a) ndelay --;       //加速
                 else if(accelsta == 0xa5) ndelay ++;  //減速
               }   
              e = e - 2 * dx;
          }
         if(ndelay < maxdelay) ndelay = maxdelay;
        
        if(shortlen) //加速空間小
         { if(accelsta == 0x5a)
              {//判斷加速是否完成,以進入減速
                 if(acount >= alen)
                  {accelsta = 0xa5;alen=2 * alen;}
              }
            else if(accelsta == 0xa5)
              {//判斷減速是否完成(減速完成后,以最低速運行剩下的線)
                 if(acount >= alen)
                  {accelsta = 0; ndelay = minaccel;}
              }
          
         }
        else  //加速空間大
         {
          if(accelsta == 0x5a)
             {//判斷加速是否完成,以進入最高速
                 if(acount >= dxdelay) 
                 {  accelsta = 0; }
             }
           else if(accelsta == 0xa5)
             { //判斷減速是否完成(減速完成后,以最低速運行剩下的線)
                if(acount >= alen)
                 {accelsta = 0; ndelay = minaccel;}
             }
            else
             {//判斷最高速是否完成,以進入減速 
                if((acount + dxdelay) >= alen) 
                 {accelsta = 0xa5;}
             } 
          
         }
        
      }
  }
  else   //y固定走dy步,x根據計算結束再決定是否走步進
  {  
      e = -dy;
      for(i = 1; i <= dy; i++)
       {
         xcount++;       //由于加/減速的總步長為dx+dy,所以X和Y各走一步,都要計算加速度
         if(xcount >= dastep)//x和y共同走了N步后進行一次加減速處理
              { acount ++;
               xcount =0;
               if(accelsta == 0x5a) ndelay --;
                 else if(accelsta == 0xa5) ndelay ++;
              }   
           move_y(ydr,ndelay);  
         e = e + 2 * dx;
         if(e >= 0)     //判斷X是否走一步
          {
            move_x(xdr,ndelay); 
            e = e - 2 * dy;
            xcount++;       //由于加/減速的總步長為dx+dy,所以X和Y各走一步,都要計算加速度
            if(xcount >= dastep)
              { acount ++;
                xcount = 0;
               if(accelsta == 0x5a) ndelay --;
                 else if(accelsta == 0xa5) ndelay ++;
              }   
            }
          if(ndelay < maxdelay) ndelay = maxdelay;
       
        if(shortlen) //加速空間小
         { if(accelsta == 0x5a)
              {//判斷加速是否完成,以進入減速
                 if(acount >= alen) 
                  {accelsta = 0xa5;alen=2 * alen;}
              }
            else if(accelsta == 0xa5)
              {//判斷減速是否完成(減速完成后,以最低速運行剩下的線)
                 if(acount >= alen) 
                  {accelsta = 0; ndelay = minaccel;}
              }
          
         }
        else  //加速空間大
         {
          if(accelsta == 0x5a)
             {//判斷加速是否完成,以進入最高速
                 if(acount >= dxdelay) {accelsta = 0;}
             }
           else if(accelsta == 0xa5)
             { //判斷減速是否完成(減速完成后,以最低速運行剩下的線)
                if(acount >= alen) {accelsta = 0; ndelay = minaccel;}
             }
            else
             {//判斷最高速是否完成,以進入減速 
                if((acount + dxdelay) >= alen) {accelsta = 0xa5;}
             } 
          
         }
       }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美tickling挠脚心丨vk| 亚洲综合在线第一页| 国产福利91精品| 亚洲欧美日韩中文播放| 91精品国产综合久久久久久| 成人午夜av电影| 亚洲h在线观看| 国产精品久久综合| 日韩一区二区三区电影在线观看 | 国产一区二区精品久久91| 中文字幕av一区 二区| 91精品国产麻豆| 91九色02白丝porn| 国产一区二区在线看| 五月婷婷欧美视频| 亚洲男人的天堂av| 久久精品在线免费观看| 91精品国产综合久久福利| 色噜噜狠狠一区二区三区果冻| 国产精品12区| 久久成人18免费观看| 亚洲亚洲人成综合网络| 国产精品短视频| 久久久国产午夜精品| 9191国产精品| 91搞黄在线观看| 91在线视频观看| 成人高清av在线| 国产.欧美.日韩| 国产一区999| 久久99精品国产.久久久久| 亚洲精选视频在线| 国产精品三级av| 久久久久综合网| 久久中文娱乐网| www国产精品av| 日韩一区二区免费电影| 欧美欧美欧美欧美首页| 欧美在线免费观看视频| 91视频在线观看免费| 丁香六月久久综合狠狠色| 国产福利一区二区三区视频 | 日韩免费视频一区二区| 欧美日韩电影在线| 欧美日韩在线播放三区四区| 欧美色欧美亚洲另类二区| 在线免费观看一区| 欧美性大战久久久| 欧洲一区在线电影| 欧美日韩一级大片网址| 欧美日韩不卡一区| 欧美亚洲日本国产| 欧美日韩在线观看一区二区 | 日本一区二区三区国色天香| 国产欧美精品一区aⅴ影院| 久久免费视频一区| 久久精品欧美一区二区三区不卡| 国产欧美一区二区精品秋霞影院| 国产欧美精品一区二区色综合| 国产精品美女久久久久久久网站| 亚洲天堂网中文字| 亚洲精品视频在线观看免费| 亚洲一区二区三区小说| 亚洲无人区一区| 日本成人在线不卡视频| 黑人精品欧美一区二区蜜桃| 国产精品系列在线观看| eeuss国产一区二区三区| 在线一区二区三区做爰视频网站| 欧美日韩成人在线| 26uuu亚洲| 亚洲日本青草视频在线怡红院| 一区二区激情小说| 日韩成人午夜电影| 狠狠色丁香婷婷综合| 91亚洲资源网| 91精品国产手机| 日本一区二区三区国色天香 | 久久久久久日产精品| 久久久亚洲国产美女国产盗摄| 国产精品成人免费在线| 亚洲黄色av一区| 看片网站欧美日韩| aaa亚洲精品| 91精品国产综合久久婷婷香蕉| 久久久九九九九| 亚洲免费观看视频| 美女网站色91| 色综合久久99| 日韩欧美国产三级| 亚洲天天做日日做天天谢日日欢| 免费成人深夜小野草| av动漫一区二区| 欧美日韩精品专区| 久久久蜜臀国产一区二区| 一区二区三区在线视频观看| 国产精品一区在线| 欧美亚洲高清一区二区三区不卡| 欧美成人艳星乳罩| 亚洲精品视频自拍| 国产精品18久久久久久久久| 色天使色偷偷av一区二区| 精品三级av在线| 一区二区三区加勒比av| 国产成人在线视频播放| 7777精品伊人久久久大香线蕉最新版 | 欧美丝袜第三区| 久久久国产一区二区三区四区小说| 香蕉成人伊视频在线观看| 粉嫩一区二区三区在线看| 欧美一二三区在线| 亚洲精品视频自拍| 国产不卡视频一区| 日韩免费视频线观看| 亚洲韩国精品一区| 成人高清视频在线| 精品久久久久久亚洲综合网| 亚洲bt欧美bt精品777| 99精品视频在线播放观看| 久久久久久一级片| 精品亚洲成a人在线观看| 欧美精品久久99久久在免费线 | 五月婷婷欧美视频| 色综合久久中文字幕| 国产精品久久久久精k8| 狠狠色丁香久久婷婷综| 精品久久国产字幕高潮| 日本午夜精品视频在线观看| 欧美片网站yy| 五月天激情综合| 欧美四级电影网| 亚洲激情第一区| 欧洲一区二区三区在线| 亚洲精品国产一区二区精华液| 99久久精品一区| 国产精品久久二区二区| www.亚洲激情.com| 国产欧美一区二区精品忘忧草| 成人性生交大片免费看在线播放 | 亚洲欧美另类在线| 不卡的av在线播放| 中文字幕免费一区| 粉嫩一区二区三区性色av| 久久影视一区二区| 激情文学综合网| 国产天堂亚洲国产碰碰| 国产精品夜夜嗨| 国产日产欧美一区二区视频| 国产成人午夜视频| 国产日产欧美精品一区二区三区| 国产高清久久久久| 国产精品美女久久久久久2018| 成人亚洲一区二区一| 日韩理论在线观看| 色婷婷av一区二区三区gif| 亚洲一区二区欧美| 欧美优质美女网站| 婷婷开心激情综合| 4438成人网| 国产乱码精品一区二区三 | 一区二区国产盗摄色噜噜| a亚洲天堂av| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩精品欧美日韩精品| 麻豆久久久久久| 久久久精品中文字幕麻豆发布| k8久久久一区二区三区 | 精品剧情在线观看| 国产乱码精品一区二区三区忘忧草 | 亚洲色图第一区| 在线一区二区视频| 日韩国产一区二| 久久久精品综合| 欧美天堂亚洲电影院在线播放| 麻豆国产精品一区二区三区| 欧美成人一区二区三区| 丰满少妇在线播放bd日韩电影| 亚洲一区二区美女| 精品国产乱码91久久久久久网站| 成人a区在线观看| 天天操天天综合网| 日本一区二区三区四区在线视频| 欧美性一区二区| 美女一区二区在线观看| 国产精品国产自产拍在线| 色久综合一二码| 精品一区二区三区在线视频| 国产精品动漫网站| 欧美二区在线观看| 国产成人精品午夜视频免费| 亚洲成人激情综合网| 精品粉嫩超白一线天av| 色综合咪咪久久| 蜜桃av噜噜一区| 亚洲精品中文在线观看| 欧美精品一区二区不卡| 欧美色视频在线观看| av影院午夜一区| 国产一区二区三区在线观看精品 | 夫妻av一区二区|