C51单片机 【基础1】--按键实验

本文详细介绍了C51单片机中按键的工作原理,包括独立按键和矩阵键盘的接线方式。针对按键消抖问题,文章提出了通过软件延时来消除抖动的方法,并给出了独立按键和4x4矩阵键盘的C语言程序实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

通过C51单片机操控键盘在很多设计中都会用到,如如果要设计一个密码锁。如果没有掌握按键的使用,那么就真的没有办法实现了。今天这篇文章就系统的说一下,按键程序的原理和实现。

按键工作原理

目前我们在开发板上使用的按键有两种接线方式:

  • 1、独立按键
  • 2、矩阵键盘

轻触开关
轻触开关是一种电子开关,使用时,轻轻按开关就可使开关接通,当松手时,开关断开。如图:
在这里插入图片描述
在这里插入图片描述

按键消抖

在实际写程序的时候还要考虑另一个问题就是抖动。当我们按下按键开关的时候其实会产生电平上下抖动。如下图这种情况:
在这里插入图片描述
如果我们不考虑抖动,就会检测到多次开关按下,但实际上我们就按下一次,那么我们当然不想这种事情的发生。因此我们需要考虑如何消除抖动。
消除抖动的方法也分为两种,一种是采用高精度的按键,这样可以有效的减少抖动。但是我们一般采取的是第二种,通过软件的方式来消除抖动。通过上面的图上我们可以看到,波形只有在两端的时候会产生抖动,那么我们就利用这个特点添加一个延时,去除前面那一段时间,也就是当按键按下那一刻延时一段时间后再去检测电平变化。这样就可以完美的解决这个问题了。

1)独立按键

独立按键相对来说是比较简单的,使用的就是上面介绍的轻触开关,我们通过原理图进行讲解:
在这里插入图片描述
我们可以看到图上有四个开关,分别为K1、K2、K3、K4,它们的一端连接的都是GND,另一端分别连接在了RXD(P3.1)、TXD(P3.0)、P32、P33,几个引脚上。
当我们按下开关后,对应的引脚就会显示低电平。我们通过主程序中的循环,来检测对应的引脚电平的变化,来判断开关是否按下,从而完成对应的操作。
程序流程:
在这里插入图片描述
下面我们通过一个独立按键程序来看一下:(完整程序可独立运行)

/*******************************************************************************
* 实验名	     : 左右流水灯实验
* 使用的IO	     : LED使用P2,键盘使用P3.1
* 实验效果       : 按下K1键,
*	注意					 :
*******************************************************************************/
#include<reg51.h>
#include<intrins.h>	

#define GPIO_LED P2
sbit K1=P0^0;
void Delay10ms( );   //延时10ms

/*******************************************************************************
* 函数名         : main
* 函数功能		   : 主函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void main(void)
{
   
	unsigned int i,j;
	j=0x01;
	
	while(1)
	{
   	
		GPIO_LED=j;	 
		if(K1==0)		//检测按键K1是否按下
		{
   
			Delay10ms();	//消除抖动
			if(K1==0)
			{
   
				j=_cror_(j,1);//1000 0000
				while((i<50)&&(K1==0))	 //检测按键是否松开
				{
   
					Delay10ms();
					i++;
				<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gussu-毛虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值