资料介绍
今天,我们来讲解一下板子上的一个模块——机械按键。
机械按键分为两种使用模式:独立按键和矩阵按键。这两个模式是通过板子上的一个硬件部分来切换的,使用方法不相同,但原理都差不多,在大家使用小红板学习的时候这方面都应该也有接触过。没错,它与小红板上的使用方式几乎是相同的。
相信很多人在学习的时候,都觉得按键很简单对吧?但是大家要注意的是,想要写出一个完全没bug(按键能够特别灵敏地判断状态)的按键其实并不简单。而且它总是结合数码管、LED灯等各种模块来配合使用的,按键各种按下状态中实现各种功能,各种逻辑写起来也是有一定难度的。
好的,话不多说了,接下来我会为大家分别讲解一下独立键盘和矩阵键盘基础知识。
机械按键原理图
我们先来看一下按键部分的原理图:
我们看右边蓝色框框起来引脚,可以看到大部分的按键都是通过P3端口来控制的。
为什么说是大部分呢?因为板子上的两个引脚有变化:P3^6 --> P4^2; P3^7 --> P4^4
前边说的键盘两种模式是通过左边橙色框里框起来的硬件(对应板子上的J5)来控制的。当跳线帽接2-3时,模式为独立按键;接1-2时,模式为矩阵按键(千万别抬杠哦)。
独立按键原理
好的,我们现在先开始独立按键的讲解。
这里的独立按键与小红板上的使用方法是完全一样的。
我们看左边红色框里框起来的部分,这四个按键就是独立按键,可以看到它右边分别接了P3^0~P3^3引脚,左边通过跳线帽接到了GND。
然后,我们又知道51单片机在默认状态下,引脚都为高电平,当对应按键按下时,右边的引脚就与左边的GND接在了一起,电平就会被拉低,所以直接判断对应的引脚是否为低电平就可以知道这个按键有没有被按下。
使用按键的时候要注意一点就是机械按键的抖动,我们看下边这张图:
上边蓝色框框起来的是我们理想中的波形图(默认高电平,按下低电平),实际中的波形是下边红色框框起来的。
可以看到绿色框中的电平一直在抖动,这段电平就会对我们判断按键是否触发产生干扰。由于板子上没有消除抖动的硬件设计,我们就需要通过程序延时来跳过这段抖动。
很简单,只需要在判断引脚电平为低以后加10ms左右的延时,如果这时候引脚电平还是低电平,就代表我们的按键确实被按下了。还有,在我们按下没松手的时候,程序会一直循环执行我们这段程序。
为了避免这种问题,还需要在按键程序中加入“松手检测”,看下边一段程序:
if(P30 == 0) //判断按键S7是否按下
{
Delay_key(10); //10ms延时用来消抖
if(P30 == 0) //再次判断按键S7是否按下
{
/* 按下S7时需要执行的程序放这里 */
while(P30 == 0); //松手检测
}
}
这就是独立按键的检测函数,嘻,很简单吧?
矩阵按键原理
好的独立按键讲完了我们来讲解一下矩阵按键。(切换的时候记得要把跳线帽换一下哦)
这时我们再看原理图,每行的四个按键都接在了一起,右端分别接在了P3^0、P3^1、P3^2、P3^3引脚,每列的四个按键也接在了一起,左端分别接在了P3^4、P3^5、P4^2、P4^4引脚。
当按下一个按键的时候,我们只要想办法判断它是哪一行哪一列的就行啦。通过程序先把P3^4、P3^5、P4^2、P4^4全部拉低,再判断P3^0、P3^1、P3^2、P3^3中哪一个引脚变为了低电平就可以判断第几行按键按下了,同样的方法来判断按键是哪一列的就可以啦。
再看下边一段程序:
void key_scan()
{
P34 = P35 = P42 = P44 = 0;
P30 = P31 = P32 = P33 = 1;
if(P30 == 0)
{
delayms(10)
if(P30 == 0) KeyValue = 7;
while(P30 == 0)
}
if(P31 == 0)
{
delayms(10)
if(P31 == 0) KeyValue = 6;
while(P31 == 0)
}
if(P32 == 0)
{
delayms(10)
if(P32 == 0) KeyValue = 5;
while(P32 == 0)
}
if(P33 == 0)
{
delayms(10)
if(P33 == 0) KeyValue = 4;
while(P33 == 0)
}
P34 = P35 = P42 = P44 = 1;
P30 = P31 = P32 = P33 = 0;
if(P34 == 0)
{
delayms(10)
if(P34 == 0) KeyValue = KeyValue 12;
while(P34 == 0)
}
if(P35 == 0)
{
delayms(10)
if(P35 == 0) KeyValue = KeyValue 8;
while(P35 == 0)
}
if(P42 == 0)
{
delayms(10)
if(P42 == 0) KeyValue = KeyValue 4;
while(P42 == 0)
}
if(P44 == 0)
{
delayms(10)
if(P44 == 0) KeyValue = KeyValue;
while(P44 == 0)
}
}
这段代码没加注释,是因为我希望大家可以不只依赖于注释。细品一下这段代码,在品的时候多加思考,绝对比只看注释理解得更加透彻。
KeyValue是我们在程序最开始定义的一个全局变量,它主要起标志的作用,这就是传说中的标志位,通过判断给它的赋值就可以判断按下的哪一个按键(KeyValue=6 --> 按键6...),把这个函数在主函数while循环中执行就可扫描矩阵按键。当然,这只是其中一种判断形式,常用的还有逐行判断等等,大家可以自己试一下。
值得注意的是,我们这里的头文件使用的是“stc15f2k60s2.h”,相较于“reg52.h”,它的功能更加强大。而且在“reg52.h”中是没有P4端口的定义的,在使用的时候要在程序开头部分添加一句代码 “sfr P4 = 0xC0;” 来给P4定义地址。“stc15f2k60s2.h”就不需要了,而且可以直接用 “P30”等来表示 “P3^0” 等。
本文转载自:电子产品世界(作者:阿飞)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理。
(mbbeetchina)
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- stm32矩阵键盘的程序
- 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)
- 51单片机键盘接口-独立按键和矩阵按键
- 使用单片机实现LCD矩阵键盘的程序免费下载 19次下载
- 单片机的矩阵键盘实验文件和程序免费下载 16次下载
- 使用单片机进行矩阵键盘基本控制的详细资料和程序免费下载
- 使用51单片机实现矩阵键盘的代码免费下载
- 使用51单片机实现矩阵式键盘的资料和程序免费下载
- 使用51单片机实现矩阵键盘的程序免费下载
- 使用51单片机进行矩阵键盘的程序免费下载
- 简易矩阵键盘的C语言程序免费下载 21次下载
- 矩阵键盘依次输入控制的C语言程序资料免费下载 5次下载
- 4×4键盘矩阵按键电路图和HEX资料免费下载 35次下载
- 第四棵--KEY独立键盘和矩阵键盘的检测 0次下载
- 矩阵键盘 0次下载
- 基于单片机的独立键盘与矩阵键盘检测 1444次阅读
- 单片机键盘检测与应用 5183次阅读
- 通过采用DSP芯片实现非编码矩阵键盘的设计 2385次阅读
- 51单片机对矩阵键盘实现16个按键操作的电路设计 2.9w次阅读
- 单片机矩阵键盘的使用之读取键盘 4278次阅读
- 51单片机对矩阵键盘实现16个按键操作的设计 3.6w次阅读
- 基于51单片机的4*4矩阵键盘字符输入 1w次阅读
- 什么是矩阵键盘?4*4键盘的原理软件设计分析 3.8w次阅读
- 单片机8x8矩阵键盘原理说明 2.5w次阅读
- 4x4矩阵键盘工作原理及扫描程序 24w次阅读
- 矩阵式键盘使用方法 2.5w次阅读
- 一文看懂矩阵键盘的特点及工作方式 3.7w次阅读
- 矩阵键盘有什么用_矩阵键盘有何用途 1.6w次阅读
- 基于FPGA的矩阵键盘控制器的设计 4868次阅读
- 基于ARM的矩阵键盘设计及其linux驱动实现 3057次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多