说到键盘扫描,相信大多数人第一反应就是行列矩阵扫描,这样我们可以用相对有限的IO口得到尽可能多的按键。键盘扫描是单片机技术的一种基本处理方法,学校的单片机课程都会有相应章节进行阐述,只要按照课本上讲述的方法,一般都能设计出比较可靠的键盘扫描电路与程序。
课本上的键盘扫描方法(见下图接法二)不能说是尽善尽美,从易懂性、成本、程序难易程度等方面综合看应该是不错的方法,给人感觉是已经没有太多的改善空间,至少我是这么认为的。
然而前段时间一位台湾朋友画给我的键盘扫描矩阵电路(见下图接法二),让我又一次看到到自己的思维还有许多地方被自己的所谓“经验”束缚着。
单纯的从硬件接法看,两种接法并没有明显区别,接法一甚至要复杂一些,但如果结合到键盘扫描的程序来看,就会发现接法一确实更好。
两种接法我都没有把上拉电阻包含进来,来让我们看一下两种接法到底有什么不同:
接法二:
我们熟悉的传统扫键处理电路,假定键盘行列IO口标号分别为H1/H2/H3和V1/V2/V3,扫键流程通常如下。
2.1. H1设置为输出,H2/H3和V1/V2/V3设置为输入
2.2. H1分别输出1和0,读V1/V2/V3状态,如果Vy状态与H1一致,则认为H1与Vy交叉位置的键按下
2.3. H2设置为输出,H1/H3和V1/V2/V3设置为输入
2.4. H2分别输出1和0,读V1/V2/V3状态,如果Vy状态与H2一致,则认为H2与Vy交叉位置的键按下
2.5. H3设置为输出,H1/H2和V1/V2/V3设置为输入
2.6. H3分别输出1和0,读V1/V2/V3状态,如果Vy状态与H3一致,则认为H3与Vy交叉位置的键按下
接法一:
新扫键处理电路,假定键盘行列IO口标号分别为H1/H2/H3和V1/V2/V3,扫键流程通常如下。
1.1. H1/H2/H3和V1/V2/V3都设置为输入
1.2. 读H1/H2/H3和V1/V2/V3状态,如果Hx和Vy读到的状态均为0,则认为Hx与Vy交叉位置的键按下
从上面流程可以看出接法一的程序代码要简单不少,既能减少扫键的代码量,又能加快扫键处理的时间,站在软件的角度看确实要比接法二要好。后来我反思了一下为什么我们教材上的传统处理方法没有采用接法一,虽然接法一软件上要简单一些,但硬件布局要复杂,传统的按键只有两条接线,接法一需要三条接线,所以用传统的按键是无法实现的,但现在许多电子产品的按键都用导电橡胶或锅仔片来实现,所以接法一变得可行。
注:这两种电路对于同时按键达到3个的情况都有可能形成错误的按键逻辑。
关键字:键盘扫描 按键逻辑 单片机
引用地址:
两种键盘扫描方法比较分析
推荐阅读最新更新时间:2024-03-16 13:36
一文看懂STM32单片机和51单片机区别
单片机简介 51单片机简介 应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。 51单片机之所以成为经典,成为易上手的单片机主要有以下特点: 51单片机特性 1、从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。 2、同时在片内RAM区间还
[单片机]
PIC单片机控制DS18B20数字温度传感器原理及实现
#include pic.h #define uchar unsigned char #define uint unsigned int #define DQ RC1 #define DQ_HIGH() TRISC1=1 #define DQ_LOW() TRISC1=0;DQ=0 __CONFIG(0x3B31); const uchar table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f}; const uchar table1 ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,
[单片机]
用51单片机控制两相四线步进电机
最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。然后改用L293D驱动,可以转动。通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。找到问题,就容易解决了。修改程序,可以完美运
[单片机]
基于ISP微控制器的PLC实现方法
可编程序控制器(Programmable Logic Controller,简称PLC)把自动化技术、计算机技术和通信技术融为一体,按照成熟而有效的继电控制概念和设计思想,用先进的微控制器技术来实现I/O的实时检测和控制。由于PLC具有编程简单、可靠性高、通用性强和使用方便等特点,因此得到广泛应用。PLC技术已经成为工科院校电工学的必修内容。但PLC的种类很多,发展很快,而指令系统和使用方法又不尽相同,使PLC的教学内容总是滞后于PLC的技术发展。为了改变这种状况,我们以自带在系统中编程(ISP)功能的、高性价比的微控制器SM2965为核心,研制了基于ISP功能的可编程序控制器,用于PLC控制实验。下面介绍PLC的设计思路、硬件构
[单片机]
基于ARM支持实现MCU的高级视频图形功能
需要高级视频图形功能的系统一直是实施的挑战。传统上,这些系统需要硬件功能和软件功能的复杂组合,以创建应用程序所需的必要的更高级别的视频和图形。最新的基于 ARM 的MCU现在提供了一套全面的高级硬件功能,通常将常见的视频和图形标准作为独立模块实现,从而最大限度地减少了对这些硬件功能进行“硬编码”的需求。此外,广泛的基于ARM的生态系统提供了大量软件支持,用于实现常见的应用程序级功能(例如,轻松构建图形用户界面或GUI的应用程序),只需极少量的低级编码。广泛的参考设计和硬件平台允许设计人员利用制造商开发的例程来简化他们自己的自定义应用程序的创建。让我们看一下基于ARM的MCU系列中现有的一些新的视频硬件和软件功能。 三个关键要素
[单片机]
1.2至33伏直流数字电压电源设计
说明 这是一个简单的构建微控制器控制的电源,可以切换 1.2至33伏直流和高达3安培之间预先设定的电压(或32个或更多)。本指南将通过建设过程中的每一个方面,然而,一些电子和微控制器的基本熟悉将需要对微控制器编程。规格 输入电压:33伏直流最大 输入电流:3安培最大 输出电压:5至预置电压1.2至33 **伏直流 输出电流:3安培最大 *有没有整流桥,所以输入电压必须 DC **输出电压 说明 该电路的哈特是一个LM350可调正电压稳压器(T2)。稳压器,能够提供超过3安培以上的输出电压范围为1.2VDC到33Vdc。它易于使用,热过载保护,较大的电压范围,电流限制,高纹波抑制
[单片机]
51单片机驱动1602液晶汇编语言程序
LCMRS EQU P2.4 LCMRW EQU P2.5 LCMEN EQU P2.6 LCMDATA EQU P0 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#60H LCALL LCMSET LCALL LCMCLR MOV A,#80H LCALL LCMWR0 MOV DPTR,#TAB0 LCALL LCMWR2 MOV A,#0C0H LCALL LCMWR0 MOV DPTR,#TAB1 LCALL LCMWR2 SJMP $ TAB0: DB I AM YUAN MING ,00H TAB1: DB NICE TO MEET YOU ,00H LCMLAY:
[单片机]
基于EDA技术的单片机IP核设计
1. 引言 EDA(Electronic Design Automatic),简单的说就是通过有关的开发软件,自动完成用软件的方式设计的电子系统到最终形成集成电子系统或专用集成芯片的一门新技术。其中, EDA关键技术之一就是可以用硬件描述语言(HDL)来描述具有广泛应用前景、且具备自主知识产权的IP核(Intellectual Property)。这种IP核具有很高的通用性和灵活性,可以通过软件编程完成不同特定的功能,可以任意使用在各种嵌入式微控制系统中。嵌入式IP核的应用,由于重用设计思想、设计知识,极大地降低了设计成本,缩短了设计周期,成为当今片上系统(SoC)的重要设计手段。【1】 MCS-51系列单片机是目前国内应用
[单片机]