51单片机学习之5-独立按键和矩阵键盘
键盘的原理
键盘分编码键盘(例如电脑键盘)和非编码键盘(自己用程序去识别)。
非编码键盘分:独立式非编码键盘(独立按键)、行列式非编码键盘(4*4阵列键盘)
独立键盘的电路图。
因为51单片机的IO口不是双向口而是准双向口,要让IO口具备输入功能,必须将IO口置1,置1之后当按键按下时IO口的电平会被拉低,即被置0。当检测到IO口为0时即可判断该按键已经按下。按键按下时会有一个抖动的过程(弹片会抖动),由于单片机检测IO口速度非常快,超过弹片抖动的频率,所以当单片机检测到IO口为0时需延时一小段时间再检测IO是否为0,如果仍为0就确认该按钮被按下。因为IO口里面有上拉电阻,所以当松开按钮时,IO口又被拉高。
例程:
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitKey=P3^4;//按键
sbitLed=P1^0;//Led灯
voiddelay(uintz);
/********主函数********/
voidmain()
{
while(1)
{
if(!Key)
{
delay(10);//消抖操作
if(!Key)
Led=0;//按下时Led亮
else
Led=1;
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
第15集
4*4矩阵键盘
上图中,1个按键占用一个IO口,如果有16个按键就占用了16个IO口。为了减少IO口的使用,就需要用矩阵的方式连线。如下图
矩阵扫描原理
从图可以看出P30、P31、P32、P33为行(低四位),P34、P35、P36、P37为列(高四位)。
假设我们按下的是S6按钮。
评论