[C] 纯文本查看 复制代码int Key_Scan(void)
{
uchar KeyVal;
GPIO_ResetBits(X1_GPIO_PORT,X1_GPIO_PIN); //ÏèèÃX1êä3öμí
GPIO_ResetBits(X2_GPIO_PORT,X2_GPIO_PIN); //ÏèèÃX2êä3öμí
GPIO_ResetBits(X3_GPIO_PORT,X3_GPIO_PIN); //ÏèèÃX3êä3öμí
GPIO_ResetBits(X4_GPIO_PORT,X4_GPIO_PIN); //ÏèèÃX4êä3öμí
if((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN)|GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN)|GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN)|GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))!=0x0000)
return -1; //èç1ûX1μ½X4è«Îa1ÔòûóD°′¼ü°′ÏÂ
else
{
delay_ms(5); //Ñóê±5ms襶¶¶ˉ
if((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN)|GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN)|GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN)|GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))!=0x0000)
return -1;
}
GPIO_SetBits(X1_GPIO_PORT,X1_GPIO_PIN);
GPIO_SetBits(X2_GPIO_PORT,X2_GPIO_PIN);
GPIO_SetBits(X3_GPIO_PORT,X3_GPIO_PIN);
GPIO_ResetBits(X4_GPIO_PORT,X4_GPIO_PIN);
Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
if(Y1==0&&Y2==1&&Y3==1&&Y4==1)
KeyVal='*';
if(Y1==1&&Y2==0&&Y3==1&&Y4==1)
KeyVal=0;
if(Y1==1&&Y2==1&&Y3==1&&Y4==0)
KeyVal='D';
if(Y1==1&&Y2==1&&Y3==0&&Y4==1)
KeyVal='#';
while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))&(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))&(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))&(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
//μè′y°′¼üêí·Å
GPIO_ResetBits(X1_GPIO_PORT,X1_GPIO_PIN);
GPIO_SetBits(X2_GPIO_PORT,X2_GPIO_PIN);
GPIO_SetBits(X3_GPIO_PORT,X3_GPIO_PIN);
GPIO_SetBits(X4_GPIO_PORT,X4_GPIO_PIN);
Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
if(Y1==0&&Y2==1&&Y3==1&&Y4==1)
KeyVal=1;
if(Y1==1&&Y2==0&&Y3==1&&Y4==1)
KeyVal=2;
if(Y1==1&&Y2==1&&Y3==0&&Y4==1)
KeyVal=3;
if(Y1==1&&Y2==1&&Y3==1&&Y4==0)
KeyVal='A';
while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))&(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))&(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))&(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
GPIO_SetBits(X1_GPIO_PORT,X1_GPIO_PIN);
GPIO_ResetBits(X2_GPIO_PORT,X2_GPIO_PIN);
GPIO_SetBits(X3_GPIO_PORT,X3_GPIO_PIN);
GPIO_SetBits(X4_GPIO_PORT,X4_GPIO_PIN);
Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
if(Y1==0&&Y2==1&&Y3==1&&Y4==1)
KeyVal=4;
if(Y1==1&&Y2==0&&Y3==1&&Y4==1)
KeyVal=5;
if(Y1==1&&Y2==1&&Y3==0&&Y4==1)
KeyVal=6;
if(Y1==1&&Y2==1&&Y3==1&&Y4==0)
KeyVal='B';
while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))&(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))&(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))&(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
GPIO_SetBits(X1_GPIO_PORT,X1_GPIO_PIN);
GPIO_SetBits(X2_GPIO_PORT,X2_GPIO_PIN);
GPIO_ResetBits(X3_GPIO_PORT,X3_GPIO_PIN);
GPIO_SetBits(X4_GPIO_PORT,X4_GPIO_PIN);
Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
if(Y1==0&&Y2==1&&Y3==1&&Y4==1)
KeyVal=7;
if(Y1==1&&Y2==0&&Y3==1&&Y4==1)
KeyVal=8;
if(Y1==1&&Y2==1&&Y3==0&&Y4==1)
KeyVal=9;
if(Y1==1&&Y2==1&&Y3==1&&Y4==0)
KeyVal='C';
while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))&(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))&(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))&(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
return KeyVal;
}