爱玩科技网
您的当前位置:首页步进电机控制源程序

步进电机控制源程序

来源:爱玩科技网


/********************************************/

/*电子信息工程学院 */

/* 作 者:*/

/********************************************/

#include \"Stepper.h\"

/* 定时器0服务子程序 */

void time0() interrupt 1 using 1 // 用定时器0中断来产生CLK时钟

{

/* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */

TH0 = -T/256;

TL0 = -T%256;

CLK = ~CLK;

}

/* 键消抖延时函数 */

void delay(void)

{

uchar i;

for (i=300;i>0;i--);

}

/* 键扫描函数 */

uchar keyscan(void)

{

uchar scancode,tmpcode;

P1 = 0xf0; 行扫描码

if ((P1&0xf0)!=0xf0)

// 发全0

// 若有键按下

{

delay(); // 延时去

抖动

if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除

抖动影响

{

scancode = 0xfe;

while((scancode&0x10)!=0) // 逐行扫描

{

P1 = scancode; // 输出行扫描码

if ((P1&0xf0)!=0xf0) // 本行有键按下

{

tmpcode = (P1&0xf0)|0x0f;

/* 返回特征字节码,为1的位即对应于行和列 */

return((~scancode)+(~tmpcode));

}

else scancode = (scancode<<1)|0x01; // 行扫描

码左移一位

}

}

}

return(0); // 无键按

下,返回值为0

}

/* 主程序 */

void main()

{

uchar key;

TMOD = 0x01; // 设置定时器0工作模式

EA = 1;

ET0 = 1;

/* 设置为2相激励 */

M1 = 0;

M2 = 0;

/* 设置为环形转向轨迹 */

M4 = 1;

M5 = 1;

EN = 0; // 切断驱动输出

RET = 0; // 归位输入无效

CWB = 1; // 初始设置为顺时针方向

while(1)

{

key = keyscan(); // 调用键盘扫描函数

switch(key)

{

case 0x11: // 0行0列,启动键

EN = 1; // 打开驱动输出

TH0 = -T/256; // 改变T可以改变步进电机转动速度

TL0 = -T%256;

TR0 = 1; // 定时器0开始计数

break;

case 0x21: // 0行1列,停止键

TR0 = 0; // 定时器0停止计数

EN = 0; // 切断驱动输出

break;

case 0x41: CWB = ~CWB;

break;

case 0x81: RET = 1;

delay();

RET = 0;

break;

default:break;

}

// 0行2列,切换转向按键

// 0行3列,归位键

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容