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

📄 step_motor1.c

📁 1. 以单极 2相磁化方式使步进电机正向旋转 2. 按中断开关的话
💻 C
字号:
/*============================================================
File Name :Step_Motor1.c
说明 :
1. 以单极 1相磁化方式使步进电机正向旋转
2. 按中断开关的话,正-〉逆,逆-〉正 旋转。
=============================================================*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

const unsigned char one_phase[]={0x01,0x04,0x08,0x02,0x02,0x08,0x04,0x01};

volatile unsigned char phase_pnt,dir;
void delay(unsigned int d1,unsigned int d2);
void go_step_1phase(unsigned int time);
void initialize(void);

SIGNAL(SIG_INTERRUPT0)                // 外部中断
{
     dir=~dir;
}
int main(void)
{
     DDRD=0xf0;                       // 端口D 高4位=输出, 低4位=输入
	 initialize();
	 while(1)
	 {
	 go_step_1phase(700); 
	 }
}
void delay(unsigned int d1,unsigned int d2)
{
     unsigned int i,j;
	 
	 for(i=0;i<d1;i++)
	     {
	     for(j=0;j<d2;j++);
		 }
}
void go_step_1phase(unsigned int time)
{
     if(!dir)
	     PORTD=(one_phase[phase_pnt++]<<4);
	 else                              		// 逆向旋转
	     PORTD=(one_phase[phase_pnt--]<<4);
		 phase_pnt&0x0f;                   // 若phase_pnt=(4,0xff),phase_pnt=(0,3)
		 delay(time,100);
}
	 
void initialize(void)
{
     EIMSK=0x01;                       // 使用外部中断0
	 EICRA=0x02;                       // 下降沿中断请求
	 sei();                            // 使能所有中断
}

⌨️ 快捷键说明

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