每次都执行选择第一行这里的代码,按下其他行的代码检测不出来
时间: 2024-03-18 15:39:10 浏览: 20
你说得对,程序中的选择第一行代码会覆盖其他行的选择代码,导致其他行的按键检测无法正常工作,这样会导致按键检测不准确。为了解决这个问题,需要在每次检测之前,先将其他行的选择代码置为高电平状态,再选择对应行进行检测。修改后的程序如下所示:
```
unsigned char MatrixKey()
{
unsigned char KeyNumber = 0;
P1 = 0xFF;
P1_3 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNumber = 1;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNumber = 5;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNumber = 9;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNumber = 13;}
P1 = 0xFF;
P1_2 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNumber = 2;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNumber = 6;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNumber = 10;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNumber = 14;}
P1 = 0xFF;
P1_1 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNumber = 3;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNumber = 7;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNumber = 11;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNumber = 15;}
P1 = 0xFF;
P1_0 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNumber = 4;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNumber = 8;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNumber = 12;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNumber = 16;}
return KeyNumber;
}
```
修改后的程序,在选择每行进行按键检测之前,都将其他行的选择代码置为高电平状态,保证了每行按键都可以被正常检测到。