单片机矩阵键盘的使用之读取键盘

  • 格式:doc
  • 大小:16.50 KB
  • 文档页数:2

单片机矩阵键盘的使用之读取键盘
矩阵键盘的使用在单品机的学习当中十分广泛,可是对于许多新手,包括本人有时也是搞不明白,昨天晚上和今天早上的思考和同行们的讨论,终于有了点头绪,所以想记录下读取键盘的思路。

在单片机的学习版中,矩阵键盘通常如下图设计:
下面就以按下S16键来讲解其思路:
首先:
P3的高位P3.4~P3.7输出为0,低位P3.0~P3.3输出为1;即P3=0x0F,当按下S16键后(有消抖动过程),P3.3的值为0,则P3的值更新为0x07;
其次:
P3的高位P3.4~P3.7输出为1,低位P3.0~P3.3输出为0;即P3=0xF0,当按下S16键后(有消抖动过程),P3.4的值为0,则P3的值更新为0xE0;
最后将两个值相加得P3=0xE7;
在keyscan()函数(假设我们的键盘扫描程序为unsigned char keyscan())返回其键盘的值供后续的程序调用,通常会有一个switch块根据其返回值来确定输出的是哪一个数值。

下面提供一段KeilC51语言的代码来解释一下:
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
uchar keyscan( void ) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行列值中间变量
P3 = 0x0f; //行线输出全为0
cord_h = P3 //读入列线值
if( cord_h != 0x0f ) //先检测有无按键按下。