按键的原理及独立式按键的实现

按键的原理及独立式按键的实现

键盘的基本原理

image-20220121194146092

抖动的消除

硬件消抖

软件消抖

image-20220121194202887

硬件消抖

image-20220121194607903

软件消抖

利用延时程序消除抖动。

键盘的分类

独立式键盘和行列键盘

独立式键盘

image-20220121194652106

特点

  • 每个键占用一根并口线,键位多时占用并口(IO口)线多。
  • 用于键位较少的情况。
  • 处理简单,直接判并口线。

行列键盘—矩阵键盘

image-20220121194759497

特点

  • 键位分布在行列交叉点上。
  • 占用并口线少,键位越多越明显。

键位的识别

第一步是首先检测键盘上是否有键按下;

第二步是识别哪一个键按下。

检测键盘上是否有键按下的处理方法—全扫描

识别键盘中哪一个键按下的处理方法—逐行逐列扫描

开始

image-20220121195947821

元件

image-20220121200414894

image-20220121200405563

编程

#include "reg51.h"

//定义P1.0口
sbit key0 = P1^0;
//定义一个数组,共阴0-9
unsigned char s[] = 
{
   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};

unsigned char num=0;

void delay(unsigned int n)
{
	//给变量一个初始值,防止变量初始化的时候是一个随机数
	//可能造成程序的误动作
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
	   for(j=0;j<120;j++);
	}
}

void key()
{
	if(key0==0)
	{
		delay(200);
		num++;
	}
}

void seg()
{
	P2=s[num];
	if(num==10)
	{
		num=0;
	}
}

void main()
{
	while(1)
	{
		key();//按键的程序	
		seg();//操作数码管
	}
}

按键消抖效果并不是很好,引入标志位,确保按键按下,数码管立即反应

#include "reg51.h"

//定义P1.0口
sbit key0 = P1^0;
//定义一个数组,共阴0-9
unsigned char s[] = 
{
   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};

unsigned char num=0,flag=0;

void delay(unsigned int n)
{
	//给变量一个初始值,防止变量初始化的时候是一个随机数
	//可能造成程序的误动作
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
	   for(j=0;j<120;j++);
	}
}

void key()
{
//	if(key0==0)
//	{
//		delay(200);
//		num++;
//	}
	//按键按下时
	if(flag==0&&key0==0)
	{
		flag=1;//标志位
	}
	//按键弹起
	if(flag==1&&key0==1)
	{
		num++;
		flag=0;
	} 
}

void seg()
{
	P2=s[num];
	if(num==10)
	{
		num=0;
	}
}

void main()
{
	while(1)
	{
		key();//按键的程序	
		seg();//操作数码管
	}
}

image-20220121202721605

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值