微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位大侠,帮我看看这个程序为什么不能运行

各位大侠,帮我看看这个程序为什么不能运行

时间:10-02 整理:3721RD 点击:

#include <reg51.h>       //51芯片管脚定义头文件

#include <intrins.h>  //内部包含延时函数 _nop_();

#define uchar unsigned char

#define uint  unsigned int

uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //四相八拍正转编码

uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};  ////四相八拍反转编码

sbit  K1   = P3^2;       //正转

sbit  K2   = P3^3;       //反转

sbit  K3   = P3^4;       //停止

sbit  BEEP = P3^6;       //蜂鸣器

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

/*                                                  

/* 延时t毫秒

/* 11.0592MHz时钟,延时约1ms                                    

/*                                                      

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

void delay(uint t)

{                           

   uint k;

   while(t--)

   {

     for(k=0; k<125; k++)

     { }

   }

}

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

void delayB(uchar x)    //x*0.14MS

{

   uchar i;

   while(x--)

   {

     for (i=0; i<13; i++)

     { }

   }

}

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

void beep()

{

   uchar i;

   for (i=0;i<100;i++)

    {

     delayB(4);

     BEEP=!BEEP;                 //BEEP取反

    }

     BEEP=1;                    //关闭蜂鸣器

}

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

/*

/*步进电机正转

/*

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

void  motor_ffw()

{

   uchar i;

   uint  j;

   for (j=0; j<8; j++)         //转1*n圈

    {

    if(K3==0)

        {break;}                //退出此循环程序

      for (i=0; i<8; i++)       //一个周期转45度

        {

          P1 = FFW;          //取数据

          delay(2);            //调节转速

        }

    }

}

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

/*

/*步进电机反转

/*

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

void  motor_rev()

{

     uchar i;

uint  j;

for (j=0; j<8; j++)       //转1×n圈

      {

    if(K3==0)

         {break;}               //退出此循环程序

        for (i=0; i<8; i++)     //一个周期转45度

        {

          P1 = REV;          //取数据

          delay(2);            //调节转速

        }

      }

}

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

*                                                      

*  主程序                                               

*                                                      

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

main()

{

      uchar r,N=64;             //N 步进电机运转圈数

   while(1)

    {  

      if(K1==0)

  {

        beep();

for(r=0;r<N;r++)

         {

   motor_ffw();       //电机正转

     if(K3==0)

           {beep();break;}    //退出此循环程序

     }

      }

  else if(K2==0)

       {

    beep();

for(r=0;r<N;r++)

         {

       motor_rev();       //电机反转

   if(K3==0)

           {beep();break;}    //退出此循环程序

}

       }

    else  

  P1 = 0xf0;

    }

}

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


按实验板上的K1按键步进电机正转
按实验板上的K2按键步进电机反转
按实验板上的K3按键步进电机停止


你再试试#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>  //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint  unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};  ////四相八拍反转编码
sbit  K1   = P3^2;       //正转
sbit  K2   = P3^3;       //反转
sbit  K3   = P3^4;       //停止
sbit  BEEP = P3^6;       //蜂鸣器
/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                    
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}
/**********************************************************/
void delayB(uchar x)    //x*0.14MS
{
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
}
/**********************************************************/
void beep()
{
   uchar i;
   for (i=0;i<100;i++)
    {
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    }
     BEEP=1;                    //关闭蜂鸣器
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   uchar i;
   uint  j;
   for (j=0; j<8; j++)         //转1*n圈
    {
    if(K3==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P1 = FFW;          //取数据
          delay(2);            //调节转速
        }
    }
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
uint  j;
for (j=0; j<8; j++)       //转1×n圈
      {
    if(K3==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转45度
        {
          P1 = REV;          //取数据
          delay(2);            //调节转速
        }
      }
}
/********************************************************
*                                                      
*  主程序                                               
*                                                      
*********************************************************/
main()
{
      uchar r,N=64;             //N 步进电机运转圈数
   while(1)
    {  
      if(K1==0)
  {
        beep();
for(r=0;r<N;r++)
         {
   motor_ffw();       //电机正转
     if(K3==0)
           {beep();break;}    //退出此循环程序
     }
      }
  else if(K2==0)
       {
    beep();
for(r=0;r<N;r++)
         {
       motor_rev();       //电机反转
   if(K3==0)
           {beep();break;}    //退出此循环程序
}
       }
    else  
  P1 = 0xf0;
    }
}

抱歉没发对
红字处应改成P1 = REV;          //取数据
P1 = FFW;          //取数据

哎不知怎么了
P1=REv[i];
P1=ffw[i];

多谢了,  应该把P1=REv;  P1=ffw;写成 P1=REv[i];  P1=ffw[i];

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top