关于矩阵键盘扫描程序个别按键卡机

2019-08-15 16:23发布

今天做测试矩阵键盘模块发现第一行的四个按键一按就卡机,,代码如下迫切望大佬解释
#define Key_Hang GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
#define Key_Lie  GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7

u8 Key_Scan(void)
{
        u8 hang;
        u8 lie;
        u8 key,i,final=0xff;


        RCC->APB2ENR |= 1<<2;  //使能
        GPIOA->CRL &= 0X00000000;
        GPIOA->CRL |= 0X88888888;
        GPIOA->ODR |= 0XF0<<0;

        if(ReKey != 0xf0)
        {
                delay_ms(10);
                if(ReKey != 0xf0)
                {
                        hang = 0x0f&Read_hang();       
                        lie = 0xf0&Read_lie();       
                        key = hang | lie;
                        for(i=0;i<16;i++)
                        {
                                if(key == key_table[i])
                                {
                                        final = i+1;        //此处做了修改
                                }       
                        }
                        GPIOA->CRL &= 0X00000000;
                          GPIOA->CRL |= 0X88888888;
                        GPIOA->ODR |= 0XF0<<0;

                        while(ReKey != 0xf0);       
                }
       
       
       
}
        return final;  
}
以下是主函数部分
int main(void)
{
  delay_init();                     //延时函数初始化          
         uart_init(9600);
         LCD_Init();
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
         POINT_COLOR=RED;
       
       
        price=0;
        weight=1;
        DIS_Init();
        LCD_Clear(RED);       
       
       
       
       
       
       
       
        while(1)
        {   
               
                Key_Num=Key_Scan();
       
                POINT_COLOR=RED;
                if(Key_Num==255);
else {LCD_Clear(RED);
                LCD_ShowxNum(80,40,Key_Num,2,16,0);}
               
       
       
        }
       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。