用STC12C5A60S2单片机做矩阵键盘

本人用经典矩阵键盘的程序:先置第一行线为低电平P3=0xfe,然后扫描高四位找到也为低电平这种方法在STC12C5A60S2上实验,结果没有数码管亮。查单片机数据手册发现... 本人用经典矩阵键盘的程序:先置第一行线为低电平P3=0xfe,然后扫描高四位找到也为低电平这种方法在STC12C5A60S2上实验,结果没有数码管亮。
查单片机数据手册发现这样一句话:实际工作时可能出现两个I/O口均为输出为低,按键按下时短接在一起,我们知道一个CMOS电路的2个输出脚不应该直接短接在一起。
这句话是不是意味着STC12C5A60S2单片机不能做矩阵键盘实验?
因为矩阵键盘的原理就是要检测到两个端口电平都同时为低时,才会有输出。
有人用STC单片机做过矩阵键盘吗?
有真正动手做过的吗?
展开
 我来答
a451993547
推荐于2016-11-18 · TA获得超过1593个赞
知道小有建树答主
回答量:595
采纳率:100%
帮助的人:697万
展开全部

矩阵键盘最好在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;
}

放在整个程序的循环中 只要检测到按键做相应的动作即可。

如果要用到延时的地方

可以把显示函数当做延时函数来用,或者把显示函数放到中断里面。

这样都不会影响到正常的显示。

zhxiufan
2013-09-10 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38375
国家科技进步奖

向TA提问 私信TA
展开全部
当然可以,与其他51单片机一样,没有区别,你的问题不是出在IO,出在延时上,最好数码管显示用定时器控制,这样才不会受延时程序的影响。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
s_du
2013-09-11
知道答主
回答量:2
采纳率:0%
帮助的人:2848
展开全部
没问题,能做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式