您好,楼主
工作的原理是:用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4
X
4个。
这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
能否尽量详细地说一下:
p1=0x0f;
//低四位输入
delay(1);
//稍稍延时
temp=p1;
//读p1口
temp=temp&0x0f;
//取低四位
temp=~(temp|0xf0);
if(temp==1)
//检测按下的键所在的列号,在第一列
key=0;
else
if(temp==2)
//在第二列
key=1;
else
if(temp==4)
//在第三列
key=2;
else
if(temp==8)
//在第四列
key=3;
else
key=16;
//否则显示-
这一段的意义
你只要我解释这段的意义吧。
这一段是确定按下的键所在的列号。我看几乎每行都有注释啊,而且注释的很好。
temp=temp&0x0f;
//取低四位
temp=~(temp|0xf0);这行没注释,我就说一下,就是对temp低四位取反,
因为
p0是段选,低电平有效,这样能分离出按键信息。举个例子,如果是第一列有键按下,temp在执行此句前,低四位应该是1110(低电平有
效
)执行后低四位才变成0001,恰好能为下面的
if,else
if
提供正确的逻辑。如果没键按下,temp=0x00,所以有else
key=16。显示“-”。
我想应该解释清楚了,如有疑问,给我留言。
你到这看看
http://www.willar.com/me300_view.asp?id=29
你想生产?