矩阵键盘最好在IO口跟IO口之间加一个小电阻
数码管不亮很有可能是按键检测的时候进行了延时,延时时间过长导致数码管不亮。或者存在检测按下或松手的语句,导致一直在处于检测按键的状况
矩阵键盘可以参考下面的代码
获取一次按键扫描的值 ,如果是255代表没有按键按下,否则返回按键的值。
#define KEY P3
#define K1 P3_4
#define K2 P3_5
#define K3 P3_6
#define K4 P3_7
unsigned char GetKey(void)
{
KEY=0xff;
K1=0;
swithc(KEY&0x0f)
{
case 0x0E:return 0;
case 0x0D:return 1;
case 0x0B:return 2;
case 0x07:return 3;
}
KEY=0xff;
K2=0;
swithc(KEY&0x0f)
{
case 0x0E:return 4;
case 0x0D:return 5;
case 0x0B:return 6;
case 0x07:return 7;
}
KEY=0xff;
K3=0;
swithc(KEY&0x0f)
{
case 0x0E:return 8;
case 0x0D:return 9;
case 0x0B:return 10;
case 0x07:return 11;
}
KEY=0xff;
K4=0;
swithc(KEY&0x0f)
{
case 0x0E:return 12;
case 0x0D:return 13;
case 0x0B:return 14;
case 0x07:return 15;
}
return 255;
}
放在整个程序的循环中 只要检测到按键做相应的动作即可。
如果要用到延时的地方
可以把显示函数当做延时函数来用,或者把显示函数放到中断里面。
这样都不会影响到正常的显示。
当然可以,与其他51单片机一样,没有区别,你的问题不是出在IO,出在延时上,最好数码管显示用定时器控制,这样才不会受延时程序的影响。
没问题,能做