按键的原理及独立式按键的实现
键盘的基本原理
抖动的消除
硬件消抖
软件消抖
硬件消抖
软件消抖
利用延时程序消除抖动。
键盘的分类
独立式键盘和行列键盘
独立式键盘
特点
- 每个键占用一根并口线,键位多时占用并口(IO口)线多。
- 用于键位较少的情况。
- 处理简单,直接判并口线。
行列键盘—矩阵键盘
特点
- 键位分布在行列交叉点上。
- 占用并口线少,键位越多越明显。
键位的识别
第一步是首先检测键盘上是否有键按下;
第二步是识别哪一个键按下。
检测键盘上是否有键按下的处理方法—全扫描
识别键盘中哪一个键按下的处理方法—逐行逐列扫描
开始
元件
编程
#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();//操作数码管
}
}