(四)独立按键

本文介绍了单片机上非编码键盘中的独立按键应用,重点讲述了按键检测的硬件连接和软件处理,包括如何通过GPIO口检测按键状态、解决抖动问题,以及通过按键控制LED灯亮灭的程序实现。提供的代码示例展示了按键扫描函数和延迟函数的使用,实现了四个独立按键分别控制四个LED灯的状态切换。

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

前面回忆了按键输出的相关内容,现在可以继续弄按键输入的内容,本节来弄一个独立按键的相关内容来回忆按键输入的相关内容,通过一个独立的按键的判断来使一个led灯亮灭。

1.关于按键

键盘分为编码键盘和非编码键盘,键盘上编码键的识别由专用的硬件编码器实现,并产生编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘。非编码键盘又分为独立键盘和行列式键盘。单片机上的键盘一般都是非编码键盘,而这节我主要说的就是独立键盘。

2.硬件

关于案件的检测其实也比较简单,我们这个按键的检测原理非常简单,我们首先通过gpio口与按键相连和地相连,如下图所示:

我们的gpio作为输入的时候默认是高电平,这个时候我们同时检测四个按键的状态,如果gpio检测到低电平,那么这个按键就是被按下。但是在实际应用中我们按下的时候,他并不是立刻从高电平转化为低电平,而是有一段时间的抖动,就是一段时间的高低电平,我们可以通过硬件消抖和软件消抖两种方式来完成消抖工作,但是硬件消抖一般使用硬件电路进行消抖,这个是比较复杂而且成本比较高的,所以我们基本都是选择软件消抖的方式,如果一个按键已经被按下,我们延时大概10ms左右,再次去检测,如果还是低电平,就证明按键被按下了。

3. 软件

        按下按键之后就让对应的led灯亮主要程序如下:

#include "key.h"
void delay(int xms){
	int i,j;
	for(i = 0;i < xms;i++){
		for(j = 0;j < 100;j++);
	}
}
int key_scan(){ 
	if(k0==0){
		delay(10);
		if(k0==0){
			led0 = !led0;
		}
		while(!k0);
		
	}
	else if(k1==0){
		delay(10);
		if(k1==0){
			led1 = !led1;
		}
		while(!k1);
	}
	else if(k2==0){
		delay(10);
		if(k2==0){
			led2 = !led2;
		}
		while(!k2);
	} 
	if(k3==0){
		delay(10);
		if(k3==0){
			led3 = ~led3;		
		}
		while(!k3);
	}
	else {
	}
	return 0;
}	  

关于其中的原理前面已经说的比较清楚了,顺便也把调用函数和头文件一起放上,头文件代码如下:

#ifndef _KEY_H_
#define _KEY_H_
#include "reg52.h"
sbit k1 = P3^1;
sbit k0 = P3^0;
sbit k2 = P3^2;
sbit k3 = P3^3;
sbit led0 = P2^0;
sbit led1 = P2^1;
sbit led2 = P2^2;
sbit led3 = P2^3;
int key_scan();
void delay();
#endif

主函数调用函数如下:

#include "reg52.h"
#include "key.h"
void main(){
	while(1){

		key_scan();
	}
}

到此,我们的独立按键就算是完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值