按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式。我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果。51单片机的按键输入主要有两种,一种是独立按键,每个按键对应一个IO口,通过循环或者中断去检测,这种方法常用于按键个数较少得时候。如果按键的个数较多,每个按键都分配一个IO口,会占用大量的资源,所以就有了矩阵键盘。矩阵键盘是通过单片机扫描键盘的每行每列,通过行和列唯一确定按键的编号,下面对这两种方法进行介绍。
1 独立按键
Proteus仿真电路图
途中按键通过P1.0P1.3输入,四个LED灯连接P.0P2.3,不同按键按下,对应不同的LED灯亮,程序如下:
#include <reg51.h>
unsigned char num;
void main()
{
TMOD=0x01;
TH0 = (65536-917)/256; //1000/1.09
TL0 = (65536-917)%256;;
EA=1;
ET0=1;
TR0=1;
P1=0xff;
P2=0x00;
while(1){
if(num==20){
num=0;
switch(P1){
case ~0x01:
P2=~0x01;
break;
case ~0x02:
P2=~0x02;
break;
case ~0x04:
P2=~0x04;
break;
case ~0x08:
P2=~0x08;
break;
defult:
break;
}
}
}
}
void Timer0() interrupt 1
{
TH0 = (65536-917)/256;
TL0 = (65536-917)%256;
num++;
}
采用的是定时器0中断的形式,定时器0每1ms产生一次中断,num加一,再while循环中判断num=20时候,也就是计时20ms,读取P1的状态,通过判断P1的值判断是那个按键按下,点亮对应的LED灯。效果图如下:
独立按键很简单,想必大家有比我这更好的例子(比如加上消抖),今天的重点时矩阵键盘。
2 矩阵键盘检测
Proteus仿真电路图