C51单片机为什么按键按下后矩阵键盘不返回键值

#include "reg52.h" //´ËÎļþÖж¨ÒåÁ˵¥Æ¬»úµÄÒ»Ð©ÌØÊ⹦ÄܼĴæÆ÷
#include "LCD1602.h" //??LCD1602???
#include "UART.h"

typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

#define GPIO_KEY P1

int KeyValue; //ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼üÖµ

sbit beep=P1^5; //·äÃùÆ÷¶¨Òå

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //ÏÔʾ0~FµÄÖµ

u8 a;//¶¨Ê±Æ÷¼ÆÊý
u8 DisplayData[8];

u8 ymd[8]={1,0,1,0,1,2,0,2}; //ÄêÔÂÈÕ´æ´¢
u8 hms[6]={0,0,0,0,0,0}; //ʱ·ÖÃë´æ´¢
u8 get;

int line=1,num;
int flash=1;

int flag1,flag2,flag3=5,flag4=0;

void delay(u16 i) //ÑÓʱº¯Êý£¬i=1ʱ£¬´óÔ¼ÑÓʱ10us
{
while(i--);
}

void Timer0Init() // ¶¨Ê±Æ÷0³õʼ»¯
{
TMOD|=0X01; //Ñ¡ÔñΪ¶¨Ê±Æ÷0ģʽ£¬¹¤×÷·½Ê½1£¬½öÓÃTR0´ò¿ªÆô¶¯¡£
TH0=0Xd8; //¸ø¶¨Ê±Æ÷¸³³õÖµ£¬¶¨Ê±10ms
TL0=0Xf0;
ET0=1; //´ò¿ª¶¨Ê±Æ÷0ÖжÏÔÊÐí
EA=1; //´ò¿ª×ÜÖжÏ
TR0=1; //´ò¿ª¶¨Ê±Æ÷
}

void sound()//·äÃùÆ÷
{
int l=100;
l=100;
while(l--)
{
beep=~beep;
delay(10); //ͨ¹ýÐ޸ĴËÑÓʱʱ¼ä´ïµ½²»Í¬µÄ·¢ÉùЧ¹û
}
}

void DigDisplay1() //¶¯Ì¬É¨Ãè
{
int q=6;
int m=8;
int n=1;
TR1=1;
LCD_Init();
while(m)
{
LCD_ShowNum(1,n++,ymd[m-1],1);
m--;
}
n=1;
while(q)
{
LCD_ShowNum(2,n++,hms[q-1],1);
q--;
}
delay(500000);
}

void keypros()
{
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
{
delay(1000);//ÑÓʱ10ms½øÐÐÏû¶¶
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
{
//²âÊÔÁÐ
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=1;break;
case(0X0b): KeyValue=2;break;
case(0X0d): KeyValue=3;break;
case(0X0e): KeyValue=4;break;
}
//²âÊÔÐÐ
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}

    }
}

}

void DigDisplay2()
{
int q=6;
int m=8;
int n=1;
int w=10;
LCD_Init();
while(m)
{
LCD_ShowNum(1,n++,ymd[m-1],1);
if(flash==1)
LCD_ShowString(line,num+1," ");
m--;
}
w=10;
n=1;
while(q)
{
LCD_ShowNum(2,n++,hms[q-1],1);
if(flash==1)
LCD_ShowString(line,num+1," ");
q--;
}
delay(500000);
}

void keymod()
{
if(flag4==1)
{
switch(KeyValue)
{
case 1:flag4=0;KeyValue=0;break;
case 2:if(line==1)
{
line=2;
num=5;
}
else
{
line=1;
num=7;
}
KeyValue=0;break;
case 3:num--;
if(num<0)
{
if(line==1)
num=7;
else
num=5;
}
KeyValue=0;break;
case 4:if(line==1)
ymd[7-num]=ymd[7-num]+1;
else
hms[5-num]=hms[5-num]+1;
KeyValue=0;break;
}
}
else
if(KeyValue=1)
{
KeyValue=0;
flag4=1;
}
if(KeyValue!=0)
{
sound();
}
}

void uniyear() //ÈòÄêÅжÏ
{
int m;
m=ymd[7]*10+ymd[6]+2000;
if(m%4==0)
flag1=1;
else
flag1=0;
}

void MSmonth() //´óСÔÂÅжÏ
{
int m;
m=ymd[3]*10+ymd[2];
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
flag2=1;
else
flag2=0;
if(m==2)
flag2=2;
}

void main() //Ö÷º¯Êý
{
Timer0Init(); //¶¨Ê±Æ÷0³õʼ»¯
UART_Init();
while(1)
{
keypros();
keymod();
if(flag4==0)
DigDisplay1();
else
DigDisplay2();
}
}

void Timer0() interrupt 1 //¶¨Ê±Æ÷0ÖжÏ
{
int m,n,o,g;
int k=ymd[1]*10+ymd[0];
TH0=0Xd8; //¸ø¶¨Ê±Æ÷¸³³õÖµ£¬¶¨Ê±10ms
TL0=0Xf0;
a++;
if(a==25)
flash=!flash;
if(a>=100) //1s
{
a=0;
hms[0]=hms[0]+1;
} //Ãë¸öλ
if(hms[0]>9)
{
hms[0]=0;
hms[1]=hms[1]+1;
} //Ãëʮλ
if(hms[1]==6&&hms[0]==0)
{
hms[1]=0;
hms[2]=hms[2]+1;
} //·Ö¸öλ
if(hms[2]>9)
{
hms[2]=0;
hms[3]=hms[3]+1;
}//·Öʮλ
if(hms[3]>=6&&hms[2]>=0)
{
sound();
hms[3]=0;
hms[4]=hms[4]+1;
} //ʱ¸öλ
if(g>24)
{
hms[4]=0;
hms[5]=0;
m=1; //ÈÕ¸öλ¼ÓÐźÅ
}
if(hms[4]>9)
{
hms[4]=0;
hms[5]=hms[5]+1; //ʱʮλ
}
uniyear(); //ÈòÄê
MSmonth(); //´óСÔÂ
o=ymd[3]*10+ymd[2];
g=hms[4]+hms[5]*10;
if(m==1)
{
m=0;
ymd[0]=ymd[0]+1;
}
switch(flag2)
{
case 0:if(k>30)
{
ymd[0]=1;
ymd[1]=0;
n=1;//Ô¸öλ¼ÓÐźÅ
}break;
case 1:if(k>31)
{
ymd[0]=1;
ymd[1]=0;
n=1;//Ô¸öλ¼ÓÐźÅ
}break;
case 2:if(flag1)
{
if(k>29)
{
ymd[0]=1;
ymd[1]=0;
n=1;//Ô¸öλ¼ÓÐźÅ
}
else
{
if(k>28)
{
ymd[0]=1;
ymd[1]=0;
n=1;//Ô¸öλ¼ÓÐźÅ
}
}
}break;
}
if(ymd[0]>9)
{
ymd[0]=0;
ymd[1]=ymd[1]+1;//ÈÕʮλ
}
if(n==1)
{
n=0;
ymd[2]=ymd[2]+1;//Ô¸öλ
}
if(ymd[2]>9)
{
ymd[2]=1;
ymd[3]=ymd[3]+1;
}

    if(o>12)
        {
            ymd[2]=1;
            ymd[3]=0;
            ymd[4]=ymd[4]+1;//Äê¸öλ 
        }
    if(ymd[4]>9)
    {
        ymd[4]=0;
        ymd[5]=ymd[5]+1;//Äêʮλ 
}
if(ymd[5]>9)
            {
                ymd[5]=0;
                ymd[6]=ymd[6]+1;//Äê°Ùλ 
                
            }
if(ymd[6]>9)
                {
                    ymd[6]=0;
                    ymd[7]=ymd[7]+1;//Äêǧλ 
                }

}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^