一、键盘的基本问题
键盘是一组按键的集合,是最常用的单片机输入设备。操作人员可以通过键盘输入数据或命令,实现简单的人—机通信。
按键是一种常开型按钮开关。平时按键上的二个触点处于断开状态,按下按键时它们才闭合(短路)。
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件译码器实现,并产生键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘等;靠软件识别的称为非编码键盘。
当按键K未被按下时,P1.0输入为高电平;当K闭合时,P1.0输入为低电平。
通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。
由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,如图9-3所示。抖动时间的长短由按键的机械特性决定,一般为5~10 ms。这是一个很重要的时间参数,在很多场合都要用到。
二、独立式键盘
独立式按键是指各按键相互独立地接通一条输入数据线。当任何一个键按下时,与之相连的输入数据线即可读入数据0,而没有按下时读入1。
独立式键盘
优点:电路简单;
缺点:键数较多时,要占用较多的I/O线。
C语言程序清单:
#include<reg52.h>
void key( )
{ unsigned char k;
P1=0xff; //输入时P1口置全1
k=P1; //读取按键状态
if(k==0xff) //无键按下,返回
return;
delay20ms(); //有键按下,延时去抖k=P1;
if(k==0xff) //确认键按下
return; //抖动引起,返回
while(P1!=0xff); //等待键释放
switch(k)
{
case:0xfe
… //0号键按下时执行程序段
break;
case:0xfd
… //1号键按下时执行程序段
break;
…
//2~6号键程序省略
case:0x7f
… //7号键按下时执行程序段
break;
}
}