就是这个程序,用按键控制步进电机正反转,为什么只有按键一直摁着电机才转,松开就不转了
#include<reg52.h> //头文件一般无需改动
#include<intrins.h> //头文件一般无需改动
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f};//正转驱动值
uchar code REV[8]={0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f,0x9f};//反转驱动值
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
uint a;
/*********************************************************/
void delayus(unsigned int i)//延时函数
{
unsigned int j;
for(;i>0;i--)
for(j=10;j>0;j--);
}
void delayms(uint i)//延时函数
{
unsigned int j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
/***********************************************************/
void motor_rev() //反转
{uchar i;
for (i=0;i<8;i++)//8拍 1个脉冲即1拍=3.75°
{
P1=REV[i];//赋驱动值
delayus(a); //改变转速,不过不要超过步进电机的最快值 延时一下
}
}
void motor_ffw() //正转
{uchar i;
for (i=0;i<8;i++)//8拍 1个脉冲即1拍=3.75°
{
P1=FFW[i];//赋驱动值
delayus(a); //改变转速,不过不要超过步进电机的最快值 延时一下
}
}
void main()
{
a=9;
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=1; //边沿触发
while(1)
{
if(KEY1==0)
{
motor_ffw();
//电机正转
}
else if(KEY2==0)
{
motor_rev();
//电机反转
}
else if(KEY3==0)
{
P1 = 0xf0;
}
}
}
/********************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我按你说的改了,没有变化啊,还是那样
void main()
{
a=9;
unsigned char flag=0;
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=1; //边沿触发
while(1)
{
if(KEY1==0)
{
flag=1;
}
else if(KEY2==0)
{
flag=2;
}
else if(KEY3==0)
{
flag=0;
}
switch(flag)
{
case 0: P1 = 0xf0; break;
case 1: motor_ffw(); break; //电机正转
case 2: motor_rev(); break; //电机反转
}
}
}
一周热门 更多>