矩阵键盘的接口与控制
51单片机矩阵键盘原理
![51单片机矩阵键盘原理](https://img.taocdn.com/s3/m/f8ce4d254531b90d6c85ec3a87c24028905f8558.png)
51单片机矩阵键盘原理51单片机矩阵键盘原理矩阵键盘是一种常用的输入设备,可以通过少量的I/O口控制多个按键。
51单片机作为嵌入式系统中常用的控制器,也可以通过控制矩阵键盘来实现输入功能。
1. 矩阵键盘的结构矩阵键盘由多个按键组成,每个按键都有一个引脚与其他按键共用,形成了一个按键矩阵。
例如,4x4的矩阵键盘有16个按键,其中每行和每列各有4个引脚。
2. 矩阵键盘的工作原理当用户按下某一个按键时,该按键所在行和列之间会形成一个电路通路。
这时,51单片机可以通过扫描所有行和列的电路状态来检测到用户所按下的具体按键。
具体实现过程如下:(1)将每一行引脚设置为输出状态,并将其输出高电平;(2)将每一列引脚设置为输入状态,并开启上拉电阻;(3)逐一扫描每一行引脚,当发现某一行被拉低时,则表示该行对应的某一个按键被按下;(4)记录下该行号,并将该行引脚设置为输入状态,其余行引脚设置为输出状态;(5)逐一扫描每一列引脚,当发现某一列被拉低时,则表示该列对应的是刚才所记录下的行号及其对应的按键;(6)通过行号和列号确定具体按键,并进行相应的处理。
3. 代码实现下面是一个简单的51单片机矩阵键盘扫描程序:```c#include <reg52.h> //头文件sbit row1 = P1^0; //定义引脚sbit row2 = P1^1;sbit row3 = P1^2;sbit row4 = P1^3;sbit col1 = P1^4;sbit col2 = P1^5;sbit col3 = P1^6;sbit col4 = P1^7;unsigned char keyscan(void) //函数定义{unsigned char keyvalue; //定义变量while(1) //循环扫描{row1=0;row2=row3=row4=1; //设置行状态 if(col1==0){keyvalue='7';break;} //读取按键值 if(col2==0){keyvalue='8';break;}if(col3==0){keyvalue='9';break;}if(col4==0){keyvalue='/';break;}row2=0;row1=row3=row4=1;if(col1==0){keyvalue='4';break;}if(col2==0){keyvalue='5';break;}if(col3==0){keyvalue='6';break;} if(col4==0){keyvalue='*';break;}row3=0;row1=row2=row4=1; if(col1==0){keyvalue='1';break;} if(col2==0){keyvalue='2';break;} if(col3==0){keyvalue='3';break;} if(col4==0){keyvalue='-';break;}row4=0;row1=row2=row3=1; if(col1==0){keyvalue='C';break;} if(col2==0){keyvalue='0';break;} if(col3==0){keyvalue='=';break;} if(col4==0){keyvalue='+';break;}}return keyvalue; //返回按键值}void main() //主函数{unsigned char key;while(1) //循环读取{key = keyscan(); //调用函数}}```以上代码实现了一个简单的矩阵键盘扫描程序,可以通过调用`keyscan()`函数来获取用户所按下的具体按键值。
stm32矩阵键盘原理
![stm32矩阵键盘原理](https://img.taocdn.com/s3/m/1c2fc25f0a1c59eef8c75fbfc77da26925c5966f.png)
STM32矩阵键盘原理详解引言矩阵键盘是一种常见的输入设备,广泛应用于电子产品中。
在STM32微控制器中,利用GPIO引脚实现矩阵键盘控制相对简单,本文将详细介绍STM32矩阵键盘的基本原理。
基本原理矩阵键盘由多个按键组成,通常采用行列式排列。
每个按键都由一个触点和一个按键外壳组成,触点一般为弹簧式结构,按下按键时触点接通,释放按键时触点断开。
矩阵键盘的连接方式矩阵键盘的每个按键都被分配一个行号和列号,通过行线和列线来连接按键和控制芯片。
STM32通过GPIO来控制行线和列线的电平,实现按键的扫描和检测。
在STM32中,行线和列线可以连接到不同的GPIO引脚上。
行线连接到输出引脚,列线连接到输入引脚。
这样,通过对行线的输出和对列线的输入,可以实现对矩阵键盘的扫描和检测。
矩阵键盘的扫描原理矩阵键盘的扫描原理可以简单描述为以下几个步骤:1.将所有行线设置为高电平,所有列线设置为输入模式。
2.逐个将行线设置为低电平,并同时检测列线引脚的电平状态。
3.如果某一列的输入引脚检测到低电平,表示该列对应的按键被按下。
4.通过行线和列线的对应关系,确定被按下的按键的行号和列号。
矩阵键盘的按键映射通过扫描后,可以得到被按下的按键的行号和列号,STM32可以根据行列号的映射关系将按键信息转化为相应的按键值。
通常,矩阵键盘的按键映射是通过二维数组来实现的。
数组的行号对应行线,列号对应列线。
数组中的元素对应按键的键值。
例如,要实现一个4x4的矩阵键盘,可以通过以下数组表示按键的映射关系:uint8_t keyMap[4][4] = {{ '1', '2', '3', 'A' },{ '4', '5', '6', 'B' },{ '7', '8', '9', 'C' },{ '*', '0', '#', 'D' }};通过行列号可以确定数组中的元素,从而得到按键的键值。
9 矩阵键盘接口与LED显示接口
![9 矩阵键盘接口与LED显示接口](https://img.taocdn.com/s3/m/da12940816fc700abb68fc36.png)
LED数码管的显示方法
动态显示
• 微型机定时地对显示器件扫描 • 显示器件分时工作,每次只能有一个器件显示
• 使用硬件少,线路简单,因而价格低
• 占用机时长,只要扫描程序停止,显示即刻停止
静态显示
• 一次输出显示模型后,就能保持该显示结果 • 占用机时少,显示
• 使用元件多,且线路比较复杂
• 随着集成电路的发展,多种功能的显示器件问世
程控扫描方法
求闭合键的键值
• 对键盘逐行扫描 • 使PC0=0,读入列值,若等于FFH,说明该行无键按下
• 再对下一行进行扫描(即令PC1=0)„„
• 直至发现列值不等于FFH,则说明该行有键按下。
求出其键值
• 键值= 8键×行值 +列值
并行I/O接口芯片—Intel 8255A
并行I/O接口芯片—Intel 8255A
程控扫描法
程控扫描方法
判断是否有键按下
• 通过PC口使所有的行输出均为低电平,从端口A读入列值。 • 如果读入值为 FFH, 无键按下。
• 如果读入值不为 FFH, 有键按下。
去除键抖动
• 若有键按下,延时10~20ms,再一次判断有无键按下, • 如果此时仍有键按下,则认为键盘上确有一个键被按下。
延时10ms子程序
D10ms: MOV R5 , #14H DL: DL0: MOV R6 , #FFH DJNZ R6 , DL0 DJNZ R5 , DL
定时扫描法
CPU 每隔一定的时间(如10ms)对键盘扫描一遍
发现有键被按下时,读入键盘操作,以求出键值。 定时时间间隔
• 由单片机内部定时/计数器产生。 • 每隔一定长度的程序设置一次键盘查询程序。
单片机矩阵键盘接口设计
![单片机矩阵键盘接口设计](https://img.taocdn.com/s3/m/e3d5c081d0d233d4b14e694f.png)
在单片机 应用系 统中通 常都要 有 人 —机 对话功能 。人—机 对话的 中间桥梁 是键盘 , 盘就 是一组按 键 的集 合 , 人 员可 以通过 键盘 输 键 操作 入数 据或 命令 , 现简单 的人机 通讯 。键 盘分 编码键 盘和非 编码键 盘 , 实 键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称 为编码 键 盘 , : S 码键 盘 、C 如 A CⅡ B D码键 盘 等 ; 靠软 r识 别的称 为非 编 牛 码键盘 。 本文侧 重讨论键 盘接 口处 理的 内容 、 三种控制方 式和— 个典 型 矩阵键 盘接 口程 序设计 。 1键 盘接 口处理 的内容 1 . 键扫描 1按 键盘 大都采 用按 行 、 列的矩 阵开 关结 构, 结构 可 以减少硬 列排 这种 件 和连线 。常 用按键 扫描识 别方 法有 行扫描 法 ( r cnig ̄ R - ann) S
0班 {
1畦 0 0HLeabharlann 1H 1 0 衄
1H 2
0I E' I
l 疆
H
lH 唾
0H D
1} 5I
娅H
1H 6
oH F
1l l 7
湃誊 薷丽
图 1
1 朗
1H 9
1H A
1H B
1H C
IH D
1H E
1H F
表 1
R1 R2 R3
向下的顺序编排的, 这样安排, 使键码可以根据行号列号 以查表求得 ,
也可 以通过计算得 到 。 按下表 所示 的键 码编排规律 , 行的首号依 次是 各 OH、8 IH、8 如列 号按 O O 0H、O 1H, 一 _ 顺 序 , 键码 的计 算公 式 为 : 7 则 键 码=亍 彳首号+ 列号 4键释放 计算 键码之后 , 以延时后进 行 扫描 的方法等待 释放 。 再 等待键 释放 是为 了保证键 的一 次闭合 仅进 行一次 处理 。 2键盘 工作 方式 键盘接 口。 一般采 用行列 式键盘 主 要有 编程 扫描 ' 定时扫 描和 中断 扫描方 式有三种 : 21编程 扫描方 式: C U空 闲时’ 键盘判 断有无 键按 下. 般 当 P 扫描 一 应具备 以下几个功 能 :1判断键 盘上有无键 按下 。() () 2去除键 抖动 的影 响。( ) 描键盘 。() 3扫 4别闭合 的键是 否十放 。
【优】单片机矩阵键盘接口最全PPT资料
![【优】单片机矩阵键盘接口最全PPT资料](https://img.taocdn.com/s3/m/8c9d7fe9a6c30c2258019e6e.png)
单片机控制技术
知识点:单片机矩阵键盘接口
单片机控制技术
单片机矩阵键盘接口
目录
1 认识单片机键盘 2 矩阵式键盘接口电路 3 矩阵键盘按键识别技术
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
单片机应用系统通常需要优秀的人机交互接口。键盘是与单片机进行人机
一般,交矩阵互式的键盘最的行基线本由单的片机途输径出口。控制按,键列线的连接输单入片机状的输态入本口。质上是一个开关量,通过按键来 第二步设:向置所控有的制列线功上能输出或高电输平入,行数线输据出,低电以平(控行制列反单转)片,机然后运读入行列。信号。
按结构原理分类
(1)触点式按键——机械式、导电橡胶式 (2)无触点按键——电气式、磁感应按键
(前者造价低,后者寿命长)
按接口原理类
(1)独立式键盘——每键各接一根输入线 (2)行列式(矩阵)键盘——按行列交叉连线 (3)屏幕式键盘——触摸屏
按译码方式分类
(1)编码键盘——通过硬件实现译码 (2)非编码键盘——通过扫描程序实现译码
单片机矩阵键盘接口
三、矩阵键盘按键识别技术
首先判断是否有键按下:向所 有列线上输出低电平,再读入所 有的行信号; 如有任何一个键被按下,则读 入的行电平则不全为高;如无键 按下,则全高电平。
其次,逐列扫描判断具体的按键:
就是向列线上逐列送低电平。如果 读入的行值为全高,则表示此列无 键按下,否则有键按下。
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
独立式按键编程
开始
有按键闭合否 Y
延时10ms,软件去抖动
图3 独立式按键编程流程图
N
矩阵式键盘的接口设计与编程
![矩阵式键盘的接口设计与编程](https://img.taocdn.com/s3/m/057b556bdc36a32d7375a417866fb84ae55cc35e.png)
;<--------------------------判断是否真的有键按下--------------------->
T_KEY:
ACALL
DL_20MS
;调用延时子程序
ACALL
P_KEY
;再次调用“有无按键按下子程序”
JNZ
IN_SCAN
;若有键按下,则执行逐行扫描程序
AJMP
SCAN
;若无键按下,则不断查询
;<--------------------------扫描数据初始化----------------------->
单片机原理及应用技术
—1—
one 矩阵式键盘接口设计——基于行反转法
4×4矩阵式键盘接 口设计如图所示
—2—
图中P1口的低4位作为行线,P2口的低4位作为列线。行线通过74LS21进行逻辑与操作后作为单 片机的外部中断源输入,当有键按下时以中断形式去执行相应的按键处理程序。
行反转法因判键时将输入与输出线反转互换而得名,步骤如下:
PB口作为扫描口需要设为输出,PA口设为读入。 逐行扫描时,PB口的状态为:
PB7 PB6 PB5 PB4 111 1 111 1 111 1 111 1 111 0 110 1 101 1 011 1
PB3 PB2 PB1 PB0 1 110 1 101 1 011 0 111 1 111 1 111 1 111 1 111
—3—
【例9-3】 行反转法判断按键编号,并存入40H单元,程序如下
ORG
0000H
LJMP
MAIN
ORG
0003H
LJMP
INT0
ORGБайду номын сангаас
矩阵键盘的使用流程
![矩阵键盘的使用流程](https://img.taocdn.com/s3/m/3bb9df57001ca300a6c30c22590102020740f29a.png)
矩阵键盘的使用流程1. 引言矩阵键盘是一种常见的输入设备,广泛应用于各种电子产品中。
本文将介绍矩阵键盘的使用流程,包括连接矩阵键盘、矩阵键盘的工作原理以及如何进行按键操作。
2. 连接矩阵键盘连接矩阵键盘的步骤如下:1.确认矩阵键盘的接口类型:矩阵键盘通常使用USB或者PS/2接口。
查看键盘背面标签或者说明书,确认键盘的接口类型。
2.准备相应的连接线:根据键盘接口类型准备相应的连接线,如USB线或者PS/2转接器。
3.将键盘与计算机连接:将键盘的接口与计算机的相应接口进行连接。
如果使用USB接口,直接将USB线插入计算机的USB接口;如果使用PS/2接口,将PS/2转接器插入计算机的PS/2接口,然后将键盘的接口插入转接器。
4.等待操作系统自动识别:计算机会自动识别新连接的键盘,并进行适配。
稍等片刻,操作系统会完成键盘的安装。
3. 矩阵键盘的工作原理矩阵键盘的工作原理是基于一种矩阵排列的按键结构。
它将键盘按键分为行列交叉的网格,行对应按键上的触点,列则对应键盘电路中的控制信号。
当按下某个按键时,该按键所在的行和列会产生接触,触点与控制信号连接,信息传递给计算机,实现按键的输入。
4. 按键操作矩阵键盘的按键操作非常简单,只需按照以下步骤进行:1.先确认你要按下的按键所在的行和列位置。
可以参考键盘的布局图或者记住按键的位置。
2.将手指放在预定的按键上,稍微用力按下。
注意不要按错位置,避免误操作。
3.松开手指后,可以观察到键盘上对应的字符会在屏幕上显示出来。
或者,按键可能会触发电脑中的某个功能,如音量控制、页面切换等。
5. 常见问题及解决方法在使用矩阵键盘过程中,可能会遇到一些问题。
以下是一些常见问题及其解决方法:1.按键无法正常输入字符:检查键盘连接是否松动,重新连接键盘,或者尝试使用其他USB接口或者PS/2转接器进行连接。
2.按键反应迟缓:可能是键盘连接出现问题,重新连接一次或者更换连接线尝试,或者检查计算机的处理器负载情况。
高通平台之矩阵键盘接口问题分析总结
![高通平台之矩阵键盘接口问题分析总结](https://img.taocdn.com/s3/m/fb634f49bd64783e08122b24.png)
矩阵键盘口使用注意事项1 问题描述客户拿到机器测试时发现按键同时按两位会出现三位数字,当快速按下1、2两个按键时,屏幕显示是1、2、3。
问题在每台机器上都存在。
2 重现条件拿到客户样机在公司进行开机测试复现,问题100%出现。
3 原理分析(1)分析过程1、矩阵键盘电路设计具体电路如下:2、目前模块专用支持矩阵键盘的脚是已经被占用或者是未连线出来,所以客户目前使用的是带有中断功能的GPIO口作为矩阵键盘的输入输出脚。
3、我们使用的代码是直接使用高通平台的矩阵键盘原生代码。
4、将示波器四个脚接在客户的KCOL0、KCOL1、KCOL2、KROW0四个脚位上,测试波形如下,从图中可以看出波形有很多细高电平(1.8V),显得非常不正常,还有电平只有半高(0.9V),并且逻辑不对。
5、而按单个按键是正常的原因一个键按下去时单个下降沿触发正常,即使后面的波形不正常也可以掩盖问题。
但当监控扫描中断时同行不同列的多个按键时就会出现异常,按两个键可能会出现异常,就如客户出现的3个数字这种情况。
6、下面是改正软件配置后的正常波形,从波形中可以看出1(KROW0)默认是高电平,其他3根线是KCOL线(3为KCOL0、1为KCOL1、4为KCOL2)默认是低电平,当按下按键7时,列KCOL先全部拉高然后进行中断扫描,KROW0默认一直为高,触发进行拉低,KROW0在KCOL0拉低时相对应触发拉低,其他KCOL拉低时KROW0没反应,表示只有按键7有效。
同理当按下按键8时,KROW0在KCOL1拉低时触发拉低,图如下:(2)分析原因1、首先说明矩阵按键原理,行row设为输入,且内部上拉,也就是默认输入高电平;列col为输出,默认输出低电平;配置行输入为下降沿中断触发;当有按键按下去时,行列有个脚接通,这时候行会被拉低进入中断;在中断处理函数中,先将所有列电平信号置高,然后再逐一拉低,读取行的电平信号是否为低(列扫描),当扫描到某列时读取的行电平为低,说明该列的按键被按下。
矩阵键盘使用说明
![矩阵键盘使用说明](https://img.taocdn.com/s3/m/645fb51a302b3169a45177232f60ddccda38e69e.png)
矩阵键盘使用说明矩阵键盘是一种特殊设计的键盘,其按键布局呈矩阵状,与传统的直排键盘有所不同。
矩阵键盘的按键分布更加紧凑,使得用户的手指在按键时的移动距离更小,可以提高打字的速度和准确性。
在本篇文章中,将介绍矩阵键盘的基本使用说明。
1.连接键盘:2.打字基本操作:和传统键盘相比,矩阵键盘的按键布局有所不同。
在开始打字之前,需要了解矩阵键盘的按键分布。
通常情况下,矩阵键盘的按键分布为4行,每行有10个按键,共40个按键。
每个按键上标有一个字母、数字或符号,用户通过按下相应的按键来输入字符。
由于按键的布局更加紧凑,用户在使用矩阵键盘时需要稍微调整手指的位置。
一般来说,用户应该将手指放置在键盘上,使得拇指位于空格键上,食指、中指和无名指分别位于第一行、第二行和第三行按键上,小指位于第四行按键上。
这样可以更加灵活地操作按键,并提高打字的速度和准确性。
当需要输入字符时,用户可以按下相应的按键,即可将字符输入到计算机中。
和传统键盘类似,用户可以通过长按Shift键来输入大写字母,并通过按下Caps Lock键来锁定大写输入模式。
此外,矩阵键盘通常还具备一些特殊功能按键,例如功能键、控制键等。
用户可以通过按下这些特殊按键来完成一些特定的操作,例如切换输入法、调节音量等。
3.高级功能:除了基本的打字功能外,矩阵键盘通常还具备一些高级功能。
例如,一些矩阵键盘支持多键触发功能,即用户可以同时按下多个按键,以实现一些复杂的操作。
例如,在游戏中,用户可以同时按下多个按键来触发组合技能。
此外,一些矩阵键盘还支持自定义按键功能。
用户可以通过软件设置,将一些按键映射为其他功能键或字符,以满足个性化的需求。
一些高端的矩阵键盘还具备背光功能。
用户可以通过调节键盘的背光亮度和颜色,以适应不同的环境需求。
4.清洁和维护:和其他键盘一样,矩阵键盘也需要定期进行清洁和维护。
由于矩阵键盘的按键间隙较小,容易积累灰尘和污垢。
用户可以使用软刷或气泡喷射器清洁键盘表面和按键间隙。
矩阵键盘介绍与使用程序
![矩阵键盘介绍与使用程序](https://img.taocdn.com/s3/m/d8bfc16d28ea81c758f578f6.png)
单片机外接键盘电路一、原理简介键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。
我们可以通过键盘输入数据或命令来实现简单的人机通信。
在设计键盘电路与程序前,我们需要了解键盘和组成键盘的按键的一些知识。
1. 按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。
按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。
全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。
非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。
由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。
2. 按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。
此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。
因此,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,通过接口电路与单片机相连。
单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。
3. 按键的特点与去抖机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。
单片机矩阵式键盘连接方法及工作原理
![单片机矩阵式键盘连接方法及工作原理](https://img.taocdn.com/s3/m/c48b2a20bd64783e09122b37.png)
矩阵式键盘的连接方法和工作原理什么是矩阵式键盘?当键盘中按键数量较多时,为了减少I/O 口线的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样做有什么好处呢?大家看下面的电路图,一个并行口可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别就越明显。
比如再多加一条线就可以构成20 键的键盘,而直接用端口线则只能多出一个键(9 键)。
由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的。
矩阵式结构的键盘显然比独立式键盘复杂一些,识别也要复杂一些,在上图中,列线通过电阻接电源,并将行线所接的单片机4 个I/O 口作为输出端,而列线所接的I/O 口则作为输入端。
这样,当按键没有被按下时,所有的输出端都是高电平,代表无键按下,行线输出是低电平;一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了,具体的识别及编程方法如下所述:二.矩阵式键盘的按键识别方法确定矩阵式键盘上任何一个键被按下通常采用“行扫描法”或者“行反转法”。
行扫描法又称为逐行(或列)扫描查询法,它是一种最常用的多按键识别方法。
因此我们就以“行扫描法”为例介绍矩阵式键盘的工作原理:1.判断键盘中有无键按下将全部行线X0-X3 置低电平,然后检测列线的状态,只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中;若所有列线均为高电平,则表示键盘中无键按下。
2.判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平(即在置某根行线为低电平时,其它线为高电平),当确定某根行线为低电平后,再逐行检测各列线的电平状态,若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
下面给出一个具体的例子:单片机的P1 口用作键盘I/O 口,键盘的列线接到P1 口的低4 位,键盘的行线接到P1 口的高4位,也就是把列线P1.0-P1.3 分别接4 个上拉电阻到电源,把列线P1.0-P1.3 设置为输入线,行线P1.4-P1.7 设置为输出线,4 根行线和4 根列线形成16 个相交点,如上图所示。
矩阵键盘资料(在实验五十中)
![矩阵键盘资料(在实验五十中)](https://img.taocdn.com/s3/m/db253cc55fbfc77da269b1cb.png)
TECHISHINE
有了表 50-2,要写出键盘译码电路的 VHDL 程序就非常容易了,尤其针对有表可以对照
的电路设计,只要使用 CASE-WHEN 或 WHNE-ELSE 语句,便可轻松完成设计。
表 50-2 键盘参数表
SEL2~SEL0 KIN3~KIN0
对应的 键盘译 按键功 按键 码输出 能
010
1101
REG 10010 功能键
1011
C
01100 字母 C
表 50-1 按键位置与数码关系
122
Beijing Techshine Technology Co.
TECHISHINE
SEL2~SEL0 000
KIN3~KIN0 1110 1101 1011
对应的按键 0 6
LAST
0111
CTRL
1110
1
1101
7
001
1011
STEP
0111
EMPTY1
5
1101
B
111
1011
ENTER
0111
NONE
光靠矩阵键盘是无法正确地完成输入工作的,另外还需搭配以下几个电路模块: 1、 时钟产生电路
当一个系统中使用不同操作频率的脉冲波形时,最方便的方法就是利用一个自由计数器 来产生各种频率。本电路中就使用三种不同频率的工作脉冲波形。它们分别是:系统时钟(它 是系统内部所有时钟的提供者,频率最高)、弹跳消除取样信号、键盘扫描信号和七段显示器 扫描信号。在很多的电路设计中,键盘扫描信号和七段显示器扫描信号可以使用相同的时钟 信号,本设计也采用此方法。
Beijing Techshine Technology Co.
矩阵按键控制说明
![矩阵按键控制说明](https://img.taocdn.com/s3/m/dac18034a9114431b90d6c85ec3a87c240288aad.png)
矩阵按键控制一、矩阵按键电路结构1、独立按键2、矩阵按键(4×4键盘)3、按键防抖分析:二、按键处理流程三、工作方式:查询法、中断法四、按键程序设计按键输入程序的设计通常需要完成以下任务:1、判断有无按键按下由于直接进行按键扫描,需要的时间比较长。
如果对程序性能有较高要求,通常需要另外编写判断有无按键按下的函数。
仅判断有无按键按下,无需进行扫描,这样程序执行速度就快得多。
当有按键按下时,再调用按键扫描程序来取键值。
2、消除按键抖动干扰矩阵键盘消接抖与独立按键一样,检测到有按键按下后,延时10ms左右,再确认是否有键按下,如两次都检测到有键按下,才确认为有按键按下。
特别说明,并不是所有按键动作都必须消除按键抖动。
当按键要处理的事情与按键的次数有关时,必须消键抖动。
连续按一次或多次键,对要完成的事情没有影响时,可以不消键抖动。
3、识别被按下的键值。
确认有按键按下后,调用取键值函数获取键值。
4、等待按键释放。
只有键释放了,才完成了一次“按键”动作。
至于是先等待按键释放,再处理按键的工作;还是先处理按键的工作,再等待按键释放,要根据工作的要求来决定。
五、引脚控制:行线、列线根据实际采用跳线来连接。
六、控制程序举例/****** 4*4键扫描程序开始 ******/sbit keyC0=P0^0;sbit keyC1=P0^1;sbit keyC2=P0^2;sbit keyC3=P0^3;sbit keyR0=P2^4;sbit keyR1=P2^5;sbit keyR2=P2^6;sbit keyR3=P2^7; uchar key_get(){uchar k=255; //键值暂存,无键返回255keyC0=keyC1=keyC2=keyC3=keyR0=keyR1=keyR2=keyR3=1; //拉高位线电平keyR0=0; //第1行if(keyC3==0)k=0;else if(keyC2==0)k=1;else if(keyC1==0)k=2;else if(keyC0==0)k=3;keyR0=1;keyR1=0; //第2行if(keyC3==0)k=4;else if(keyC2==0)k=5;else if(keyC1==0)k=6;else if(keyC0==0)k=7;keyR1=1;keyR2=0; //第3行if(keyC3==0)k=8;else if(keyC2==0)k=9;else if(keyC1==0)k=10; //0xAelse if(keyC0==0)k=11; //0xBkeyR2=1;keyR3=0; //第4行if(keyC3==0)k=12; //0xCelse if(keyC2==0)k=13; //0xDelse if(keyC1==0)k=14; //0xEelse if(keyC0==0)k=15; //0xFkeyR3=1;return k; //返回键值}/****** 4*4键扫描程序结束 ******/void main(){bit keyDown=0;while(1){if(keyDown==0&&key_get()!=255) //防抖消除功能{delay(200);if(key_get()!=255){jianzhi=key_get();keyDown=1;switch(jianzhi) //判断键值{case 0:yuan1++;break; //对应键值的操作功能case 1:yuan5++;break; //对应键值的操作功能case 2:yuan10++;break; //对应键值的操作功能}}}}}。
矩阵式键盘控制数码管显
![矩阵式键盘控制数码管显](https://img.taocdn.com/s3/m/7f41127530126edb6f1aff00bed5b9f3f90f72c1.png)
为了避免按键抖动造成的误判,微 控制器会对检测到的按键状态进行 去抖动处理,确保按键状态的准确 性。
键盘编码方式
行码与列码组合
01
每个按键都有一个唯一的行码和列码组合,用于标识按键的位
置。
编码表
02
建立一个包含所有按键行码和列码组合的编码表,用于将按键
位置映射到对应的编码值。
编码输出
03
键盘扫描程序
根据矩阵式键盘的原理,编写键盘扫描程序,实 现按键的检测与识别。
数码管显示程序
根据数码管的显示原理,编写数码管显示程序, 实现数码管的显示和控制。
主程序
主程序负责调用键盘扫描程序和数码管显示程序, 实现整个系统的控制逻辑。
系统调试与测试
硬件调试
检查硬件电路连接是否正确,确保各模块工作正常。
矩阵式键盘控制数码管显示系 统
目录
CONTENTS
• 矩阵式键盘控制原理 • 数码管显示技术 • 矩阵式键盘控制数码管显示系统设计 • 系统性能优化与改进 • 应用前景与发展趋势
01 矩阵式键盘控制原理
CHAPTER
矩阵式键盘结构
4x4矩阵式键盘结构
由16个按键组成的矩阵,行线和列线 交叉连接,每个按键位于行线和列线 的交叉点上。
根据按键位置在编码表中找到对应的编码值,通过微控制器输
出相应的编码信号,控制数码管显示相应的字符或数字。
02 数码管显示技术
CHAPTER
数码管工作原理
数码管由多个LED段组成,通过控制各段的亮灭来显示数字或字符。
数码管内部有8个LED段,通过电流的通断控制每个段的亮灭,从而显示不同的数字 或字符。
数码管驱动方式
点驱动方式
键盘矩阵说明书
![键盘矩阵说明书](https://img.taocdn.com/s3/m/f48f361cfc4ffe473368abed.png)
用户操作手册矩阵控制键盘说明书一、概述:控制键盘是一种功能强大的多功能操作键盘,与矩阵切换/控制系统兼容。
控制键盘可调用所有的摄像机、编程监视器切换序列和控制解码器,高速球。
控制键盘能改变系统的时间、日期、摄像机条目并能对系统进行编程;能设置预置点和选择监视器,可控制包括巡视和报警的所有系统功能;控制功能液晶显示区显示当前受控的监视器、显示摄像机号以及从键盘输入的数字。
键盘具有操作保护功能。
多协议,多波特率可选。
二、设备介绍:数字区——用于输入摄像机号、监视器号.CAM——选定一个摄像机MON——调用监视器F1——特殊功能F2——特殊功能AUX——辅助功能ACK——确认A——特殊功能B——特殊功能RUN——运行自动切换HOLD——画面保持TIME——自动切换时间PROG——编辑功能USER——用户998 AUX——加锁OFF——关附属开关0N——开附属开关SALVO——启动一个同步分组切换SHOT——调用预置点OPEN——打开镜头光圈CLOSE——关闭镜头光圈NEAR——调整聚焦(十) FAR——调整聚焦WIDE——获得全景图像T ELE——获得特写图像LAST——调一个自动切换的上一摄象机NEXT——调一个自动切换的下一摄象机CLAER——清除“ENTER”显示窗口的算字(主控)摇杆区——控制云台上、下、左、右三、控制矩阵切换/控制系统3.1键盘通电:用一个9 V电源通过通讯接口盒及6芯扁线供电,并将通讯接口盒与解码器,高速球的通讯接口正确连接,接通电源,此时通讯指示灯(CODE)闪烁(如不闪烁,接口盒通讯线接错)。
液晶显示区显示“D—Password:”,要求输入4位键盘密码(原始密码为“0000”),输入方法为:“****”+ACK。
键盘密码输入正确后,数码区“D—Password”消失,输入某个监视器号并加确认键(MON),表明键盘已处于工作状态。
控制键盘要选协议和波特率。
(按左边的F2+A键,屏幕显示控制协议,往右摇动摇杆,上下到需要的协议,往右确认,再选波特率,摇动摇杆上下到需要的波特率,往右确认)如果作为分控来用就不要密码..3.2 B70支持各种PTZ控制系统,能控制各种型号球机、解码器,支持SITO,PELCO-D,PELCO-P等多种控制协议。
矩阵按键控制数码管显示
![矩阵按键控制数码管显示](https://img.taocdn.com/s3/m/4f02197527284b73f2425036.png)
定时消抖 Case 0xee; P0口送0 段码 Case 0xed; P0口送1 段码 Case 0x77; …… P0口送F 段码
有键按下?
是
否
存储当前P2的状态1 Break P2=0X0F 结束 存储当前P2的状态2
返回(状态1|状态2)
返回0XFF
程序编写
//========================================== //函数名称: keyscan() //函数功能: 检测按键 //入口参数:无 //出口参数:cord_h|cord_1 //备注: //========================================== UINT8 keyscan(void) { INT8 cord_h=0; INT8 cord_1=0; P2=0xf0; if(P2!=0xf0) { delay_ms(10); if(P2!=0xf0) { cord_h=P2; P2=0x0f; cord_1=P2; return(cord_h|cord_1); } } return(0xff); }
在没有按键按下时,即DS2450 的输入量时0,当有丌 同的按键按下时,DS2450 的输入量丌同,微处理器就会 得到丌同的数字量,微处理器根据采集到的数字量可判断 按键情况。
单片机控制的“机电一体化产品”中按键的接口设计 科技咨询,李迚波
键盘扫描子程序一般包括以下内容:
1.判别有无键按下;
2.消除键盘机械抖动;
出线输出为全低电平,则列线中电平由高变低所在列为按
键所在列。
两步即可确定按键所在的行和列,从而识别出所按的键。
采用线反转法的矩阵式键盘
假设键3被按下。
第一步,P1.0~P1.3输出全为“0”,然后,读入 P1.4~P1.7线的状态,结果P1.4=0,而P1.5~P1.7均为 1,因此,第1行出现电平的变化,说明第1行有键按下; 第二步,让P1.4~P1.7输出全为“0”,然后,读入 P1.0~P1.3位,结果P1.0=0,而P1.1~P1.3均为1,因 此第4列出现电平的变化,说明第4列有键按下。
第10章行列式(矩阵式)键盘接口
![第10章行列式(矩阵式)键盘接口](https://img.taocdn.com/s3/m/7be61a33b90d6c85ec3ac6ff.png)
DB
8FH,0BFH,8CH,0FFH,0FFH
;0,1,2,3,4 ;5,6,7,8,9 ;A,B,C,D,E ;F,-,P,暗
键盘扫描子程序: KEYI:MOV MOV A,#00H SBUF,A ;判有无键按下,使所有列线为0 ;的编码送A ;扫描键盘的(8)号74LS164输 ;出为00H,使所有列线为0 ;串行输出完否? ;串行输出完毕,清TI ;第1行有闭合键吗?如有,跳 ;PK1进行处理 ;在第2行键中有闭合键吗?无闭 ;合键跳KL1 ;调用延时10ms子程序DL10,软 ;件消除抖动
(1)行列式键盘工作原理 无键按下,该行线为高电平,当有键按下时, 行线电平有列线的电平来决定。 由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。
(2)按键的识别方法
a. 扫描法 图10-10(b)中3号键被按下为例,来说明此键 时如何被识别出来的。
ACALL KS1 JNZ POP RET LK3 A
NEXT:INC
R4
;列计数器加1,为下一列扫描作准备
MOV JNB
RL MOV AJMP KND: AJMP KS1: MOV “0”→ MOV MOVX
A,R2 ;判是否已扫到最后一列(最右一列) Acc.7,KND ;键扫描已扫到最后一列,跳KND,
; 右边的下一位LED亮位选码
MOV R3,A AJMP LD0 ;送R3中保存 ;
LD1: RET ; DSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;共阴极段码表 DB DB 7DH,07H,7FH,6FH,77H,7CH 39H,5EH,79H,71H,73H,3EH
实验七 矩阵键盘控制接口
![实验七 矩阵键盘控制接口](https://img.taocdn.com/s3/m/3fc76dd033d4b14e85246857.png)
实验七矩阵键盘控制接口一、实验要求设计并实现一个4×8键盘接口控制器,含有时序产生电路、键盘扫描电路、弹跳消除电路、键盘译码电路、按键码存储电路、显示电路。
要求:当按下某一键时,在数码管上显示该键对应的键值。
二、实验内容实验仪器中4×8矩阵键盘的电路原理图如图50-1所示。
图50-1 4×8矩阵键盘电路原理图扫描信号为BCOM[8..1],在BCOM[8..1]前已接有一个3-8译码器,3-8译码器的输入为SEL0~SEL3。
当3-8译码器的输入为“000”时,即BCOM1为‘0’,其他位为‘1’,我们按下第一排第一键,此时KIN0输出‘0’,KIN1~KIN3输出全为‘1’,按下第二排第二键时,KIN1输出‘0’,其他输出‘1’;当3-8译码器输入为001时,即BCOM2为‘0’,我们按下第一排第二键,此时KIN0输出‘0’,KIN1~KIN3输出全为‘1’,同理其他键依此类推。
键盘上的每个按键就是一个开关,当某键被按下时,该按键的接点会呈现‘0’状态,反之为‘1’。
扫描信号为SEL[2..0]进入3-8译码器,再从译码器输出到键盘,所以第一次只能扫描一排,依此周而复始。
按键位置与数码的关系如表50-1所示。
若从KIN[3..0]输出的皆为‘1’时,表示没有按键按下,代表该列没有按键被按下,则不进行按键编码的操作,反之,如果有被按下时,则应将KIN[3..0]读出的值送到译码电路进行编码。
表50-1 按键位置与数码关系光靠矩阵键盘是无法正确地完成输入工作的,另外还需搭配以下几个电路模块:1、时钟产生电路当一个系统中使用不同操作频率的脉冲波形时,最方便的方法就是利用一个自由计数器来产生各种频率。
本电路中就使用三种不同频率的工作脉冲波形。
它们分别是:系统时钟(它是系统内部所有时钟的提供者,频率最高)、弹跳消除取样信号、键盘扫描信号和七段显示器扫描信号。
在很多的电路设计中,键盘扫描信号和七段显示器扫描信号可以使用相同的时钟信号,本设计也采用此方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
完整程序实例
#include <reg51.h> #define uchar unsigned char
void keyscan(void); void dlms(void); uchar keyvalue=0xff; void main(void) { while(1) { keyscan(); P2=~keyvalue; } } void dlms(void) { uchar i; for(i=200;i>0;i--); }
STEP5:将得到的行号和列号进行译码,得到键值
P3.0 ) if(recode==0xfb { switch(sccode) { P3.1 case 0xfe: keyvalue=16;break; case 0xfd:keyvalue=17;break; case 0xfb:keyvalue=18;break; P3.2 case 0xf7:keyvalue=19;break; case 0xef:keyvalue=20;break; case 0xdf:keyvalue=21;break; case 0xbf:keyvalue=22;break; case 0x7f:keyvalue=23;break; P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 default:break; } }
STEP1: 检测是否有键按下 void keyscan( ) 向单片机的行扫描口输出全0,检测列输出口的状态是否全为“ 1” { unsigned char temp_key; P1=0xff; P3=0xf8; temp_key=P1; if(temp_key!=0xff) { … P3.0 } } “0”
STEP6: 松手检测
P3=0xf8; temp_key=P1; while(temp_key!=0xff) { temp_key=P1; }
P3.0
P3.1
“0” “0”
P3.2
“0”
等待按键抬起 P1.0 P1.1 P1.2 P1.3 P1.4 退出扫描程序 P1.5 P1.6 P1.7
“1” “1” “1” “1” “0” “1” “1” “1” “1”
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
STEP3:再次检测是否有键按下
P3.0
P3.1
P3.2
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
void dlms(void) { unsigned char i; for(i=200;i>0;i--); } void keyscan( ) { unsigned char temp_key; P1=0xff; P3=0xf8; temp_key=P1; if(temp_key!=0xff) { dlms(); temp_key=P1; if(temp_key!=0xff) { …… } } }
STEP1:检测是否有键按下; STEP2:若有键按下,延时去抖动; 若没有键按下,退出扫描程序; STEP3:再次检测是否有键按下,若此时没有检 测到有键按下,退出扫描程序; STEP4:逐行扫描,判断按下的按键所在的行线 与列线; STEP5:将得到的行线与列线的值进行转换,得 到按下的按键所代表的键值; STEP6:松手检测;
if(recode==0xfd) { switch(sccode) { case 0xfe: keyvalue=8;break; case 0xfd:keyvalue=9;break; case 0xfb:keyvalue=10;break; case 0xf7:keyvalue=11;break; case 0xef:keyvalue=12;break; case 0xdf:keyvalue=13;break; case 0xbf:keyvalue=14;break; case 0x7f:keyvalue=15;break; default:break; } } if(recode==0xfb) { switch(sccode) { case 0xfe:keyvalue=16;break; case 0xfd:keyvalue=17;break; case 0xfb:keyvalue=18;break; case 0xf7:keyvalue=19;break; case 0xef:keyvalue=20;break;
void keyscan(void) { uchar i,temp,sccode; uchar recode,temp_key; P1=0xff; P3=0xf8; temp=0xfe; temp_key=P1; if(temp_key!=0xff) { dlms(); temp_key=P1; if(temp_key!=0xff) { for(i=0;i<3;i++) { P3=temp; temp_key=P1; if(temp_key!=0xff) {
单片机原理及应用
矩阵式键盘的接口与控制
矩阵式键盘的广泛应用
在单片机应用系统中,通常要使用键盘完 成人机对话,实现控制命令及数据的输入。
键盘分为非编码键盘和编码键盘,由软件
完成对按键闭合状态识别的称为非编码键 盘;由专用硬件实现按键闭合状态识别的 称为编码键盘;
单片机学习板上的矩阵式键盘
4*4矩阵键盘的结构
case 0xdf:keyvalue=21;break; case 0xbf:keyvalue=22;break; case 0x7f:keyvalue=23;break; default:break; } } P3=0xf8; temp_key=P1; while(temp_key!=0xff) { temp_key=P1; } } } }
if(recode==0xfe) { switch(sccode) { case 0xfe: keyvalue=0;break; case 0xfd:keyvalue=1;break; case 0xfb:keyvalue=2;break; case 0xf7:keyvalue=3;break; case 0xef:keyvalue=4;break; case 0xdf:keyvalue=5;break; case 0xbf:keyvalue=6;break; case 0x7f:keyvalue=7;break; default:break; } }
sccode=P1; recode=temp; temp=temp<<1|0x01; } else temp=temp<<1|0x01; } if(recode==0xfe) { switch(sccode) { case 0xfe: keyvalue=0;break; case 0xfd:keyvalue=1;break; case 0xfb:keyvalue=2;break; case 0xf7:keyvalue=3;break; case 0xef:keyvalue=4;break; case 0xdf:keyvalue=5;break; case 0xbf:keyvalue=6;break; case 0x7f:keyvalue=7;break; } }
if(recode==0xfd) { switch(sccode) { case 0xfe: keyvalue=8;break; case 0xfd:keyvalue=9;break; case 0xfb:keyvalue=10;break; case 0xf7:keyvalue=11;break; case 0xef:keyvalue=12;break; case 0xdf:keyvalue=13;break; case 0xbf:keyvalue=14;break; case 0x7f:keyvalue=15;break; default:break; } }
第0行
第1行
第2行
第3行 第0列 第1列 第2列 第3列
4*4矩阵键盘的结构
第0行
“0”
第1行
第2行
第3行 第0列 第1列 第2列 第3列
4*4矩阵键盘与51单片机的接口
P1口的高四位连接键盘的列线,低四位连接键盘的行线
实验箱上的键盘
列 线 接 口 插 孔
行 线 接 口 插 孔
实验箱上的键盘原理图
“0”
键盘与单片机的接口
3条行线连接P3口的低三位 8条列线连接P1口
键盘输入信息的处理过程
1. CPU判断是否有键按下。 2. 确定按下的是哪一个键。 3. 把此键代表的信息转换成单片机所能识 别的代码,如ASCII或其它特征码。
常用的按键识别方法有扫描法和反转法。其中扫描法比较常见。
矩阵键盘扫描法的基本过程
STEP4:逐行扫描
P3.0
P3.1
“0” “1” “0” “1”
P3.2
“1” “0”
void keyscan( ) { uchar temp_key; uchar i,temp,recode,sccode; P1=0xff; P3=0xf8; temp_key=P1; if(temp_key!=0xff) { dlms(); temp_key=P1; if(temp_key!=0xff) { temp=0xfe; for(i=0;i<3;i++) { P3=temp; temp_key=P1; if(temp_key!=0xff) { sccode=P1; recode=temp; temp=temp<<1|0x01; } else temp=temp<<1|0x01; P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 } } “1” “1” “1” “1” “1” “1” “0” “1” “1” }