51单片机入门教程(4)——按键控制

这篇博客详细介绍了51单片机的按键控制,包括独立按键的原理、仿真电路及消抖处理,以及矩阵键盘的工作原理、扫描程序和在Proteus中的仿真。通过阅读,读者可以掌握如何在单片机中实现按键的稳定检测。
摘要由CSDN通过智能技术生成


单片机与外界的信息交互主要有两大类,输入信息和输出信息。
之前的博客介绍了通过单片机控制LED灯和数码管向外界输出信息,该教程介绍单片机常用的输入设备——独立按键和矩阵键盘。

一、独立按键

1.1 独立按键的原理

独立按键一共有四个针脚,两个短针脚之间默认不导通,两个长针脚之间默认导通。实物图如图:
在这里插入图片描述

1.2 独立按键的仿真电路

在Proteus中对按键进行了简化,只有两个接线针脚。按键的一端接到单片机的IO口上,另一端与GND连接。当按键按下时,单片机的IO口与GND连接,端口电平被拉低。因此通过读取端口电平即可获知按键状态。
仿真电路如图:
在这里插入图片描述

1.3 按键消抖

关于按键抖动
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。即单片机在按键被按下的一瞬间检测到的信号是很多次的忽高忽低的电平信号,如图:
在这里插入图片描述
这种信号是不稳定的。因此,我们需要使用按键消抖的算法使单片机获取到正常稳定的信号。
为了避免在最不稳定的时候采集信号,常用的操作是延时,即当检测到低电平输入时,延时若干时间(常用20ms),再次采集信号,如果仍是低电平,则为按键被按下。
示例程序如下:

/**************************
* 说明: 按键被按下时led灯灭
**************************/
#include <reg52.h>
#define uint unsigned int 
#define uchar unsigned char
//定义按键端口
sbit key = P1^0;
//定义LED灯端口
sbit led = P2^0;
//延时函数声明
void delay(uint xms);
//程序入口
void main(){
   
  while(1){
   
    //第一次判断
    if(key == 0){
   
	  //延时20ms 消除抖动
	  delay(20);
	  //第二次判断
	  if(key == 0){
   
	    led = 0;	  //灯灭
	  }
	  else {
   
	    led = 1;	  //灯亮
	  }
	  //等待按键被松开
	  while(!key);  //当按键未松开时,key为0,执行该死循环。
	}
  }
}
void delay(uint xms)
{
   
  uint i,
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值