键盘概述
计算机的键实际上就是开关,制造这种键的方法是多种多样的。
几种常用的按键:
(1)机械式按键
(2)电容式按键
(3)薄膜式按键
(4)霍耳效应按键
按键识别方法
通常采用两种方法:
(1)行扫描法,
(2)行反转法。
行扫描法:使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫描完全部的行线为止。
行反转法:行线接并行口,先让它工作在输出方式下,将列线也接一个并行口,先让它工作在输入模式下。CPU通过输出端口往各行线上全部送低电平,然后读入 列线的值。如果有某一键被按下,则必定会使某一列线值为0。然后,程序再对两个并行端口进行方式设置,使行线工作在输入,列线工作在输出,将刚才读的列线 值从列线所接的并行端口输出,再读取行线上的输入值。
用ARM芯片实现键盘接口1
例:与4X4的矩阵键盘接口,采用节省口线的“行扫描法”方法来检测键盘,这样只需要8根口线。
选取PF口作为检测键盘用端口,设定PF0 –PF3为输出扫描码的端口,PF4--PF7为键值读入口。
用ARM芯片实现键盘接口2
矩阵键盘按键的识别方法,此方法分两步进行:
①识别键盘哪一行的键被按下:让所有行线均为低电平,检查各列线电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明无键被按下。
②如果某列有键被按下,识别键盘哪一行的键被按下:逐行置低电平,并置其余各行为高电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此行此列交叉点处按键被按下。
行扫描法获取键值的程序1
接口中利用了PF口的相关寄存器,PF口的寄存器有3个:PF口数据寄存器 PDATF、PF口上拉电阻寄存器 PUPF和PF口控制寄存器 PCONF。
行扫描法获取键值的程序2
行扫描法获取键值的程序3
1.寄存器设置
程序中,首先通过设置PCONF寄存器,来实现端口功能配置,然后再分别设置PDATF及PUPF寄存器。
(1)设置PCONF寄存器
由于需要设定PF0~PF3为输出口,PF4~PF7为输入口,因此,在端口工作之前设置:
rPCONF=000 000 000 00 01 01 01 01 B=0x55;
(2)设置PDATF寄存器
PF0~PF3作为输出口输出扫描码时,可采用如下语句:
rPDATF=0xf0; //PF0~PF3全写入0
PF4~PF7作为输入口读入键值时,采用如下语句:
Keyval=(rPDATF&0xf0)>>4;
(3)设置PUPF寄存器
设置内部上拉电阻的语句为:
rPUPF=0x00; //使能PF0~PF7的内部上拉电阻
行扫描法获取键值的程序4
2.键盘扫描程序框图
行扫描法获取键值的程序5
3.键盘扫描程序代码
#include
#include
char ReadKeyVal(void)
{
unsigned char i,j,H_val,L_val;
char keyval= -1;
rPCONF = 0x55;
rPUPF=0x00;
rPDATF=0xf0;
if((L_val=(rPDATF&0xf0))!=0xf0)
{//有键按下
H_val=0xfe;//行值,从第0行开始判断
for(i=0;i4))|0xf0;//设置行值格式
Keyval =get_val(H_val)× 4 + get_val(L_val);
return keyval;
}
else
H_val = H_val |