⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stepper.c

📁 单片机使用stk642-050芯片控制四相电机。
💻 C
字号:

#include "Stepper.h"

/* 定时器0服务子程序 */
void time0() interrupt 1 using 1  // 用定时器0中断来产生CLK时钟
{
	/* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */
	TH0 = -T/256;  
	TL0 = -T%256;
	CLK = ~CLK;
}

void time1() interrupt 3 using 3  // 用定时器0中断来产生CLK时钟
{
	/* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */
	TH1 = -T/256;  
	TL1 = -T%256;
	CLK1 = ~CLK1;
}

/* 键消抖延时函数 */
void delay(void)
{
	uchar i;
	for (i=300;i>0;i--);
}

/* 键扫描函数 */
uchar keyscan(void)
{
	uchar scancode,tmpcode;
	P1 = 0xf0;			 					// 发全0行扫描码
	if ((P1&0xf0)!=0xf0)					// 若有键按下
	{
		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工作模式
	TMOD = 0x11;

  	EA = 1;
	ET0 = 1;
	ET1 = 1;

	
	/* 设置为2相激励 */
	M1 = 0;
	M2 = 0;

	/* 设置为4相激励 */
	M1 = 1;
	M2 = 1;
	M11 = 1;
	M12 = 1;

	/* 设置为环形转向轨迹 */
	M4 = 1;
	M5 = 1;
	M14 = 1;
	M15 = 1;
	
	EN = 0;							// 切断驱动输出
	EN1 = 0;	
	RET = 0;						// 归位输入无效
	RET1 = 0;
	CWB = 1;						// 初始设置为顺时针方向
	CWB1 = 1;
  	while(1)
    {
	/*	key = keyscan();			// 调用键盘扫描函数
		switch(key)
   		{
      		case 0x11:	*/			// 0行0列,启动键
			if(S01==0)
 		    {
				EN = 1;				// 打开驱动输出
				TH0 = -T/256;   	// 改变T可以改变步进电机转动速度  
  				TL0 = -T%256;
				TR0 = 1;			// 定时器0开始计数
			}
			else
			{
				TR0=0;
				EN=0;
			}
			if(S02==0)
			{
				EN1 = 1;				// 打开驱动输出
				TH1 = -T/256;   	// 改变T可以改变步进电机转动速度  
  				TL1 = -T%256;
				TR1 = 1;			// 定时器0开始计数
			}
			else
			{
				TR1=0;
				EN1=0;
			}

	/*			break;
			case 0x21:				// 0行1列,停止键
				TR0 = 0;			// 定时器0停止计数
				EN = 0;				// 切断驱动输出
				break;			
			case 0x41:				// 0行2列,切换转向按键
				CWB = ~CWB;
				break;
     		case 0x81:				// 0行3列,归位键
				RET = 1;	
				delay();
				RET = 0;
				break;
			default:break;
		 }*/
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -