晚上帮同学写了段代码 用单片机P1口扩展成4*4的键盘 按下按键点亮P0口的LED
矩阵键盘的扩展不算复杂 主要是检测代码部分比较复杂
IO扩展原理
矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
检测原理
当无按键闭合时,行线与列线之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。
判断有无按键按下的方法:
-
粗扫描。行线输出低电平,列线输出高电平。读取Px口,若数据不等于 0x0F则有按键按下。
-
细扫描。行线逐行输出低电平,其他IO口输出高电平。读取Px口,若数据不等于输出的数值则有按键按下。并可以确定行数。同理列线逐行输出低电平,可以检测出列数。
-
根据行数和列数转换按键码
代码如下:
02
|
#define uchar unsigned char
|
04
|
#define LED_ON(X) P0 = ~(1<<(X)) //LED低电平点亮
|
26
|
uchar i,val,row,col,key;
|
28
|
P1 = 0xF0; //行线置0,列线置1
|
30
|
if( P1 != 0x0F0 ) //按键按下
|
32
|
for(i=0;i<4;i++) //行扫描
|
43
|
for(i=0;i<4;i++) //列扫描
|
阅读(1896) | 评论(0) | 转发(0) |