0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

新手求助 单片机 定时器 步进电机

我编的一个程序

#include        //51芯片管脚定义头文件

#include   //内部包含延时函数 _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};

unsigned char code Tab[7]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82};  //数码管显示0~6的段码表

uint  n;

uint  m;

uint c=1;

uint b=1;

sbit  K1   = P3^2;       //一楼

sbit  K2   = P3^3;       //二楼

sbit  K3   = P3^4;       //三楼

sbit  K4   = P3^5;       //一楼

sbit  K5   = P1^4;       //二楼

sbit  K6   = P1^5;       //三楼

sbit  p1_0 = P1^0;

sbit  p1_1 = P1^1;

sbit  p1_2 = P1^2;

sbit  p1_3 = P1^3;

sbit  p2_0 = P2^0;

sbit  p2_1 = P2^1;

sbit  p2_2 = P2^2;

sbit  p2_3 = P2^3;

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

/*                                                  

/* 延时t毫秒

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

/*                                                      

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

void delay(uint t)

{                           

   uint k;

   while(t--)

   {

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

     { }

   }

}

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

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

/*

/*步进电机正转

/*

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

void  motor_ffw(n)

{

   uchar i;

   uchar k;

   uchar r;

   uint  j;

   for(k=0;k   {

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

   {

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

    {p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=0;

  delay(1);

  p1_0=1 ; p1_1=1 ; p1_2=0 ; p1_3=0;

  delay(1);

  p1_0=0 ; p1_1=1 ; p1_2=0 ; p1_3=0;

  delay(1);

  p1_0=0 ; p1_1=1 ; p1_2=1 ; p1_3=0;

  delay(1);

  p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=0;

  delay(1);

  p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=1;

  delay(1);

  p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=1;

  delay(1);

  p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=1;

     delay(1);                 //调节转速

        }

  }

    }

}

void  motor_ffw2(n)

{

   uchar i;

   uchar k;

   uchar r;

   uint  j;

   for(k=0;k   {

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

   {

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

   { p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=0;

  delay(1);

  p2_0=1 ; p2_1=1 ; p2_2=0 ; p2_3=0;

  delay(1);

  p2_0=0 ; p2_1=1 ; p2_2=0 ; p2_3=0;

  delay(1);

  p2_0=0 ; p2_1=1 ; p2_2=1 ; p2_3=0;

  delay(1);

  p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=0;

  delay(1);

  p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=1;

  delay(1);

  p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=1;

  delay(1);

  p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=1;

     delay(1);                 //调节转速

        }

  }

    }

}

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

/*

/*步进电机反转

/*

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

void  motor_rev(n)

{  uchar i;

   uchar k;

   uchar r;

   uint  j;

   for(k=0;k   {

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

   {

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

    {     p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=1;

    delay(1);

    p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=1;

    delay(1);

    p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=1;

    delay(1);

    p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=0;

    delay(1);

    p1_0=0 ; p1_1=1 ; p1_2=1 ; p1_3=0;

    delay(1);

    p1_0=0 ; p1_1=1 ; p1_2=0 ; p1_3=0;

    delay(1);

    p1_0=1 ; p1_1=1 ; p1_2=0 ; p1_3=0;

    delay(1);

          p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=0;      

          delay(1);   //调节转速

            

        }

  }

    }

}   

void  motor_rev2(n)

{  uchar i;

   uchar k;

   uchar r;

   uint  j;

   for(k=0;k   {

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

   {

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

    {     p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=1;

    delay(1);

    p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=1;

    delay(1);

    p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=1;

    delay(1);

    p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=0;

    delay(1);

    p2_0=0 ; p2_1=1 ; p2_2=1 ; p2_3=0;

    delay(1);

    p2_0=0 ; p2_1=1 ; p2_2=0 ; p2_3=0;

    delay(1);

    p2_0=1 ; p2_1=1 ; p2_2=0 ; p2_3=0;

    delay(1);

          p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=0;      

          delay(1);   //调节转速         

        }

  }

    }

}   

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

/*

/*检测程序

/*

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

void check()

{ if(n>c)

  {motor_ffw(n-c);

  p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}

  else if(n  {motor_rev(c-n);

  p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}

  else if(n==c)

{p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}

  c=n;

}

void check2()

{ if(m>b)

  {motor_ffw2(m-b);

  p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}

  else if(m  {motor_rev2(b-m);

  p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}

  else if(m==b)

{p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}

  b=m;

}

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

*                                                      

*  主程序                                               

*                                                      

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

main()

{

while(1)

    {  

      if(K1==0)

    {n=1;

    check();}

   if(K2==0)

    {n=2;

    check();}

   if(K3==0)

    {n=3;

    check();}

   if(K4==0)

    {m=1;

    check2();}

   if(K5==0)

    {m=2;

    check2();}

   else if(K6==0)

    {m=3;

    check2();}

    }

    }

电梯程序 只能等一部电梯运行之后才能 控制另一部电梯

有高手指导说 要用定时器 和中断

但是我补知道怎么改

请高手帮忙改下

提问者:I_mC酱 地点:- 浏览次数:4933 提问时间:10-17 17:55
我有更好的答案
提 交
1条回答
60user19 11-15 18:10
只能说这么多:定时器+中断+状态机。
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航