概述
前面几章讲解的都是 I/O 口当成输出管脚使用,本章将通过按键实验学习 I/O 口的输入功能。按键作为一种输入设备,在实际应用中非常的广泛。本章将详细介绍按键的使用。
7.1 按键原理
独立按键的原理非常简单,如下图所示:
如图所示,K17-K20 共 4 个按键分别与单片机的 P3.0-P3.3 管脚连接。例如当按下按键 K17 后,P3.0 管脚为低电平,在单片机中通过检测 P3.0 管脚是否为低电平,便可知道 K17 是否按下。
7.2 按键电路软件设计
下面我们学习独立按键的编写,这里要实现的功能为按键 K17 按下,点亮 led0,按键 K20 按下打开蜂鸣器,程序代码如下所示:
#include<reg52.h>
sbit led0 = P1^0;//LED小灯管脚定义
sbit FM = P2^4;//蜂鸣器管脚位定义
sbit Key17 = P3^0;//独立按键管脚定义
sbit Key20 = P3^3;
void main()
{
while(1)
{
led0 = Key17;//按键17按下时,点亮led0
FM = Key20;// 按键20按下时,打开蜂鸣器
}
}
蜂鸣器打开、点亮 led0 小灯以及按键 K17、K20 按下均为低电平,因此赋值代码如上循环语句中所示。将程序下载到单片机中,当按下 K17,K20 时,led0 小灯点亮,蜂鸣器想起,弹起按键后,led0 小灯熄灭,蜂鸣器关闭。
在实际使用中,我们并不是经常一直按着按键,最常见的方式为先按下按键然后弹起,这个过程表示按键按下一次的完整过程。因此,在程序中首先检测按键是否按下,然后再检测按键是否弹起,代码如下图所示:
#include<reg52.h>
sbit led0 = P1^0;//LED小灯管脚定义
sbit FM = P2^4;//蜂鸣器管脚位定义
sbit Key17 = P3^0;//独立按键管脚定义
sbit Key20 = P3^3;
bit flag=1;
void main()
{
while(1)
{
if(Key17==0)//按键按下
{
if(Key17==1)//按键弹起
{
led0 = ~led0;//数值取反
}
}
if(Key20==0)//按键按下
{
if(Key20==1)//按键弹起
{
FM = ~FM;//数值取反
}
}
}
}
如上代码所示,在程序中首先检测按键 K17 是否按下,如果按下了再检测 K17 是否弹起,若检测到弹起,让 led0 小灯的状态变化,每完成一次按键操作,led0 小灯亮灭状态会翻转一次。K20 按键与此类推。
7.3 下载验证
将上述代码下载至单片机便可验证了。