打印

新人求助....

[复制链接]
1191|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luciser|  楼主 | 2012-12-3 19:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是新人...~~请大神们帮我看看我的程序问题出在哪了....用按键控制步进电机正转反转停止的 正转时有些一卡一卡的 而且不能反转....
#include<reg51.h>

unsigned char code runz[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //正转步进电机相序表
unsigned char code runf[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //反转步进电机相序表


sbit K1=P0^0;sbit K2=P0^1;sbit K3=P0^2;

void delay(unsigned char i);//延时函数声明

void motor_init()//步进电机初始化
{
       
        P1=0xff;

}

void keymotor()                //按键驱动步进电机        K1反转,K2正转,K3停止
{
loop1:if(K1==0)
          {
                  delay(10);
                if(K1==0)
                {
                        unsigned char i;
                        while(1)
                                for(i=0;i<8;i++)
                                {
                                        P1=runz[i];
                                        delay(10);
                                        if(K2==0)
                                        goto loop2;
                                        else if(K3==0)
                                        goto loop3;
                                }
               
                }
          }
loop2:if(K2==0)
          {
                  delay(10);
                if(K2==0)
                {
                        unsigned char i;
                                while(1)
                                for(i=0;i<8;i++)
                                {
                                        P1=runf[i];
                                        delay(10);
                                        if(K1==0)
                                        goto loop1;
                                        else if(K3==0)
                                        goto loop3;
                                }
                       
                }
      }
loop3:if(K3==0)
          {
                  delay(10);
                if(K3==0)
                {
                        while(1)
                        {
                                P1=0xff;
                                if(K1==0)
                                goto loop1;
                                else if(K2==0)
                                goto loop2;
                        }
                       
                }
      }
}

void main()
{
        motor_init();
        while(1)
        keymotor();
}

void delay(unsigned char i)
{
        unsigned char j;
        while(i--)
                for(j=0;j<255;j++);
}

相关帖子

沙发
wangyy608| | 2012-12-3 20:44 | 只看该作者
检查按键;
用示波器看输出;

使用特权

评论回复
板凳
icecut| | 2012-12-3 23:16 | 只看该作者
你先把你那些goto都删掉...那么多goto不晕才怪呢

使用特权

评论回复
地板
zhang7676050| | 2012-12-4 09:29 | 只看该作者
goto不太好啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝