BSMGood 发表于 2011-9-23 12:43:49

LPC2132 按键问题

智林测控的LPC2132的板子,用它来做上位机跟RFID模块进行通信,结果在用板子上得按键选择操作界面和扇区块值的时候,单步调试通过,但是全速运行的话就无法通过,请问这是什么原因?附程序代码;

U32 key = 0x0000FC00;    //键码,    P0.1-P0.15
/*----------------------------------------------------------*\
|                                                 按键返回                        |
\*----------------------------------------------------------*/
U8 KEY_Press()
{
        U8 f = 0;
        if((IO0PIN & key)!=key)
        {
                DelayNS(500);                //消抖;               
                if((IO0PIN & key)!=key)
                {
                        f = 1;
                }
        }
        else
        {               
                f = 0;
        }
        return f;
}

/*----------------------------------------------------------*\
|                                                 按键扫描                           |
\*----------------------------------------------------------*/
U8 key_scan()
{
        U8 i=0;
        if(KEY_Press())          
        {               
                if((IO0PIN & 0X00008000)==0)
                {
                        key_left =1;//左键被按下
                        i = 1;
                }
                if((IO0PIN & 0X00002000)==0)
                {
                        key_right =1;//右键被按下
                                i = 1;
                }
                if((IO0PIN & 0X000000800)==0)
                {
                        key_up = 1;       //上键被按下
                                i = 1;
                }
                if((IO0PIN & 0X00004000)==0)
                {
                        key_down = 1;//下键被按下
                                i = 1;
                }
                if((IO0PIN & 0X00000400)==0)
                {
                        key_ok = 1;//下键被按下
                                i = 1;
                }
                while(KEY_Press());                //判断有按键按下了,也执行了选择操作,等待按键的松开
        }       
        else
        {
                        i = 0;
        }
        return i;
}


以下是扇区块值一段代码:

        while(key_scan())
        {
                while(key_left)                                        //选择扇区
                {                       
                        if(Sector!=0X0F)                       //扇区值不等于15
                        {
                                key_left = 0;                        //左键标志置零
                                Sector++;
                                Block += 4;                //对应的块值初始化
                                LCD_Clear_Screen(Blue);
                                sprintf(s,"Sector:%d",Sector);
                                LCD_PutString(1,40,s,0xF800,0xFFE0);           //打印块值
                                sprintf(s,"Block:%d",Block);
                                LCD_PutString(1,65,s,0xF800,0xFFE0);           //打印块值
                                if(key_ok)
                                {
                                        break;
                                }
                        }
                }
                while(key_right)                                //选择块值
                {
                        key_right = 0;
                        if(Block <= (Sector*4+3))                   //扇区对应块值的最大值
                        {                               
                                LCD_Clear_Screen(Blue);

                                sprintf(s,"Sector:%d",Sector);
                                LCD_PutString(1,40,s,0xF800,0xFFE0);           //打印扇区值

                                sprintf(s,"Block:%d",Block);
                                LCD_PutString(1,65,s,0xF800,0xFFE0);           //打印块值

                                Block ++;
                                if(Block == (Sector*4+3))
                                {
                                        LCD_PutString(1,85,"CHOOSED KEY OPERATION",0xF800,0xFFE0);
                                }
                        }
                }
        }
全速运行的时候按键无法进入key_scan();但是单步调试的时候按下按键才能进去,并且IO0PIN得到了相应的值,请问这是为什么?


求救高手····

BSMGood 发表于 2011-10-22 10:58:24

还是我自己来吧,第一个是延时的问题,第二个是键盘扫描函数的返回值都是一个标志位,大家注意到了没,小问题却磕绊了我一段时间,还需努力啊我
页: [1]
查看完整版本: LPC2132 按键问题