被一个小小的问题卡住了

2019-07-16 01:00发布

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,i,temp;
void one();
void two ();
void three ();
void four ();
void delay (uint x)
{
        uint i,j;
                for( i=x; i>0; i-- )
                        for( j=110; j>0; j-- );
}
void keyscan()
{
P1=0x7f;
temp=P1;
temp=temp&0x0f;
        if(temp!=0x0f)
        {
                delay(10);
                temp=P1;
                temp=temp&P1;
                        if(temp!=0x0f)
                        {
                                delay(10);
                                temp=P1;
               
                                        switch( temp )
                                        {
                                                        case 0x77:
                                                        one();       
                                                        break;       
                                                               
                                                               
                                                                 case 0x7b:
                                                                two();
                                                                break;
                                                               
                                                               
                                                               
                                                                        case 0x7d:
                                                                        three();
                                                                break;


                                                                                case 0x7e:
                                                                                four();
                                                                                break;
                                               

                                                                                                while(temp!=0x0f)
                                                                                                {
                                                                                                        temp=P1;
                                                                                                        temp=temp&P1;
                                                                                                }
                                                                                                while(1);
                                        }
                                  
                       
                                }
        }
}
void one ()
{
  P0=0;
}
void two ()
{       
            delay(75);
                P0=~P0;
}
void three ()
{    aa=0xfe;
         for(i=8;i>0;i--)
         {
                  P0=aa;
                aa=_crol_(aa,1);
                delay(100);
         }
         aa=0x7f;
         for(i=8;i>0;i--)
         {
                  P0=aa;
                 aa=_cror_(aa,1);
                 delay(100);
          }
}
void four ()
{
        aa=0xfe;
        for(i=4;i>0;i--)
        {
                        P0=aa;
                        aa=_crol_(aa,2);
                        delay(500);
        }
        aa=0x7f;
        for(i=4;i>0;i--)
        {
                        P0=aa;
                        aa=_cror_(aa,2);
                        delay(500);
        }
}
void main ()
{

         keyscan();
         
}
问题:比如说按下第二个键,检测到了,所以单片机执行
void two()
{       
            delay(75);
                P0=~P0;
}这个程序,但单片机只执行了一次,不会循环执行 void two这个程序,此时并没有按其他的键。

我要的是再没有按下其他键之前,它会一直执行这个程序,请问该怎么写?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。