xuyaqi 发表于 2021-10-16 19:27 也不行,但是可以读取出行的数据,比如,第一行,程序显示01111111,第二行10111111,第三行11011111第四行就是11101111。但是具体哪个按键按下去的,它反应不出来,怎么回事啊 |
dzc3458 发表于 2021-10-16 18:43 确实是不能直接读数据,但是觉得不应该啊,为什么会读取不了数据呢 |
yzwzfyz 发表于 2021-10-16 16:14 就读不了,你说奇怪不 是不是跟单片机扫描有关系 |
|
给个参考: void Getch ( ) //取键值函数 { unsigned char X,Y,Z; P0=0x0f; //先对P0 置数 行扫描 if(P0!=0x0f) //判断是否有键按下 { delay10ms(); //延时,软件去干扰 if(P0!=0x0f) //确认按键按下 { X=P0; //保存行扫描时有键按下时状态 P0=0xf0; //列扫描 Y=P0; //保存列扫描时有键按下时状态 Z=X|Y; //取出键值 switch ( Z ) //判断键值(那一个键按下) { case 0xee: k=0; break; //对键值赋值 case 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break; case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; } } } } |
|
这个读不了的 试试下面的: switch(P0|0x00) |
| 这种4x4矩阵键盘好像不能直接读数据,需要逐行扫描,先把扫描行置0,然后检测按键,看看哪个列为0,才能判断第几行第几列,应该是这样的 |
| 不可能读不到,无论是0,是1,总会读到一个值的。怎么能说读不到呢? |