用STC12C5A60S2单片机做矩阵键盘
本人用经典矩阵键盘的程序:先置第一行线为低电平P3=0xfe,然后扫描高四位找到也为低电平这种方法在STC12C5A60S2上实验,结果没有数码管亮。查单片机数据手册发现...
本人用经典矩阵键盘的程序:先置第一行线为低电平P3=0xfe,然后扫描高四位找到也为低电平这种方法在STC12C5A60S2上实验,结果没有数码管亮。
查单片机数据手册发现这样一句话:实际工作时可能出现两个I/O口均为输出为低,按键按下时短接在一起,我们知道一个CMOS电路的2个输出脚不应该直接短接在一起。
这句话是不是意味着STC12C5A60S2单片机不能做矩阵键盘实验?
因为矩阵键盘的原理就是要检测到两个端口电平都同时为低时,才会有输出。
有人用STC单片机做过矩阵键盘吗?
有真正动手做过的吗? 展开
查单片机数据手册发现这样一句话:实际工作时可能出现两个I/O口均为输出为低,按键按下时短接在一起,我们知道一个CMOS电路的2个输出脚不应该直接短接在一起。
这句话是不是意味着STC12C5A60S2单片机不能做矩阵键盘实验?
因为矩阵键盘的原理就是要检测到两个端口电平都同时为低时,才会有输出。
有人用STC单片机做过矩阵键盘吗?
有真正动手做过的吗? 展开
3个回答
展开全部
矩阵键盘最好在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;
}
放在整个程序的循环中 只要检测到按键做相应的动作即可。
如果要用到延时的地方
可以把显示函数当做延时函数来用,或者把显示函数放到中断里面。
这样都不会影响到正常的显示。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |