访问手机版页面
你的位置:老古开发网 > 51单片机 > 51单片机键盘按键 > 正文  
51单片机独立按键与矩阵按键的工作原理
内容导读:

独立按键

首先既然是检测输入,对于当然要用到拉电阻,来检测引脚电平变化变化。51单片机中,除了P0口外,P2,P3,P4都是内置上拉电阻的准双向IO口,一般 的 51 P0引脚都外接了上拉电阻,当然也可以用作输入口。

作为输入前需要拉为高电平。当有按键按下,致使单片机的某个引脚接地,变为低电平时,我们就认为这个按键按下了。当按键松开后,由于输入不会锁存,所以此时拉高的引脚回归到高电平。

独立按键的内部原理。

独立按键的4个引脚中,两两为一组。每一组的2个引脚是连在一起的,当按键按键时,2个组又连接了,也就是4个脚都连接一起了。

51单片机独立按键与矩阵按键的工作原理

按键的很重要注意点就是消除抖动,消抖。因为人按下按键不是并瞬间到位的,按键在按下的过程中会有抖动。我们需要通过延时来让单片机绕过抖动的时间。

51单片机独立按键与矩阵按键的工作原理

下面是一个用按键作为开关间接控制LED的demo。

注:下图中P2.0连接的按键应该再接一个电阻,我疏忽忘记画出来了。

51单片机独立按键与矩阵按键的工作原理

/***************************************按键按下,LED亮,松开,LED熄灭**************************************/#includetypedefunsignedintuint;typedefunsignedcharuchar;sbitbutton=P2^0;//按键输入引脚sbitled=P0^0;//LED控制输出引脚/***************************/voiddelay(uintt);ucharisKeyPressed(void);/***************************/voidmain(void){button=1;//P2是准IO口,作为输入前要写1led=1;while(1){if(isKeyPressed()){led=0;delay(100);led=1;}}}ucharisKeyPressed(void){ucharisPressed=0;//是否按下标志位ucharc=50;if(button==0)//初次检测{delay(5);//消抖延时if(button==0)//再次验证{isPressed=1;while(isPressed==0&&c--)//如果不用c作为计数器,那么一直按着按键的话,程序就会一直在这里循环。是否要用c需要根据自己的要求。;}}returnisPressed;}voiddelay(uintt){uinTI;ucharj;for(i=t;i》0;i--)for(j=110;j》0;j--);}

矩阵按键

矩阵按键的检测方式有多种,最常用的就是行列式扫描检测。原理和独立按键是一样的,只不过我们要扫描一组按键,找出那个被按下的而已。

对行列式扫描的分析。

假如我们按下了按键S6,现在来检测它。

用红色表示1高电平,蓝色表示0低电平。

先给键盘连接的GPIO口赋值为0XF0。

51单片机独立按键与矩阵按键的工作原理

电平反转。

51单片机独立按键与矩阵按键的工作原理

这样就可以判断定了按键的坐标。

demo的连线图。

51单片机独立按键与矩阵按键的工作原理

标签:独立按键,矩阵按键,51单片机,
来源:工程师周亮 作者:lhl545545 时间:2019/1/2 15:46:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐