单片机的 矩阵键盘问题 求讲解!!附程序了

//矩阵键盘行列扫描voidkeyscan(){P1=0xf0;key_l=P1;key_l=key_l&0xf0;if(key_l!=0xf0)//{delay_50u... //矩阵键盘行列扫描
void keyscan()
{
P1=0xf0;
key_l=P1;
key_l=key_l&0xf0;
if(key_l!=0xf0) //
{
delay_50us(800);//键盘消抖
if(key_l!=0xf0)
{
key_l=key_l&0xf0;
key_l=key_l|0x0f;
P1=key_l;
key_h=P1;
key_h=key_h&0x0f;
key_l=key_l&0xf0;
key=key_h+key_l;
}
}
这一段每句是什么意思??
展开
 我来答
做而论道
高能答主

2015-07-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
这程序,逻辑上,是有错的。
------------------
if(key_l!=0xf0) //--不等于则....
{
delay_50us(800);//键盘消抖
if(key_l!=0xf0) //--不等于则....
……
------------------
在延时前、后的两个判断,所用的条件、变量内容,都是完全相同的。

在前面如果满足条件,在后面,就也能满足。
在前面,不满足条件,在后面,也一定不满足。

实际上,后面的这个判断,并无任何用处。
对于消抖,这程序仅仅是进行了延时而已。
采纳答案中,没有指出这个缺点。

http://zhidao.baidu.com/question/509466640.html
这才是正确的程序和正确的解释。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5ea888d
推荐于2016-10-15 · TA获得超过979个赞
知道小有建树答主
回答量:922
采纳率:50%
帮助的人:684万
展开全部
//矩阵键盘行列扫描
void keyscan()
{
P1=0xf0; //高四位 为 高电平 ,低四位 相当于接地 , 4 X 4 行列矩阵键盘 。
key_l=P1; //保存 P1 口的值
key_l=key_l&0xf0; //将P1 口的值 和 0xf0 与 运算 ,如有 按键按下 ,高四位的某一位 会变成 低电平 0
if(key_l!=0xf0) //有按键按下 就不会 等于 0xf0。
{
delay_50us(800);//键盘消抖
if(key_l!=0xf0)//有按键按下 就不会 等于 0xf0。
{
key_l=key_l&0xf0; //获取 按下按键 所在的 列值 ,对应列的位置是 0
key_l=key_l|0x0f;
P1=key_l;
key_h=P1;
key_h=key_h&0x0f; //获取 按下按键 所在的 行值 ,对应行的位置是 0
key_l=key_l&0xf0;
key=key_h+key_l;//行列合并
}
}
追问
key_l=key_l|0x0f;
P1=key_l;
key_h=P1

是什么意思啊??
追答
key_l=key_l|0x0f; //key_l 低四位 的低电平 置1,为下一条指令 检测行线做准备
P1=key_l;//P1 端口 列线 对应位为低电平,行线是 高电平输入转口状态
key_h=P1;//获取 行线位置 。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式