独立按键
首要既然是检测输入,关于当然要用到拉电阻,来检测引脚电平改变改变。51单片机中,除了P0口外,P2,P3,P4都是内置上拉电阻的准双向IO口,一般 的 51 P0引脚都外接了上拉电阻,当然也能够用作输进口。
作为输入前需求拉为高电平。当有按键按下,致使单片机的某个引脚接地,变为低电平时,咱们就以为这个按键按下了。当按键松开后,因为输入不会锁存,所以此刻拉高的引脚回归到高电平。
独立按键的内部原理。
独立按键的4个引脚中,两两为一组。每一组的2个引脚是连在一起的,当按键按键时,2个组又衔接了,也便是4个脚都衔接一起了。
按键的很重要注意点便是消除颤动,消抖。因为人按下按键不是并瞬间到位的,按键在按下的过程中会有颤动。咱们需求经过延时来让单片机绕过颤动的时刻。
下面是一个用按键作为开关直接操控LED的demo。
注:下图中P2.0衔接的按键应该再接一个电阻,我忽略忘掉画出来了。
/***************************************按键按下,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。
电平回转。
这样就能够判判定了按键的坐标。
demo的连线图。