矩阵键盘的接口与控制
51单片机矩阵键盘原理

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矩阵键盘原理详解引言矩阵键盘是一种常见的输入设备,广泛应用于电子产品中。
在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显示接口

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)对键盘扫描一遍
发现有键被按下时,读入键盘操作,以求出键值。 定时时间间隔
• 由单片机内部定时/计数器产生。 • 每隔一定长度的程序设置一次键盘查询程序。
单片机矩阵键盘接口设计

在单片机 应用系 统中通 常都要 有 人 —机 对话功能 。人—机 对话的 中间桥梁 是键盘 , 盘就 是一组按 键 的集 合 , 人 员可 以通过 键盘 输 键 操作 入数 据或 命令 , 现简单 的人机 通讯 。键 盘分 编码键 盘和非 编码键 盘 , 实 键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称 为编码 键 盘 , : 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资料

单片机控制技术
知识点:单片机矩阵键盘接口
单片机控制技术
单片机矩阵键盘接口
目录
1 认识单片机键盘 2 矩阵式键盘接口电路 3 矩阵键盘按键识别技术
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
单片机应用系统通常需要优秀的人机交互接口。键盘是与单片机进行人机
一般,交矩阵互式的键盘最的行基线本由单的片机途输径出口。控制按,键列线的连接输单入片机状的输态入本口。质上是一个开关量,通过按键来 第二步设:向置所控有的制列线功上能输出或高电输平入,行数线输据出,低电以平(控行制列反单转)片,机然后运读入行列。信号。
按结构原理分类
(1)触点式按键——机械式、导电橡胶式 (2)无触点按键——电气式、磁感应按键
(前者造价低,后者寿命长)
按接口原理类
(1)独立式键盘——每键各接一根输入线 (2)行列式(矩阵)键盘——按行列交叉连线 (3)屏幕式键盘——触摸屏
按译码方式分类
(1)编码键盘——通过硬件实现译码 (2)非编码键盘——通过扫描程序实现译码
单片机矩阵键盘接口
三、矩阵键盘按键识别技术
首先判断是否有键按下:向所 有列线上输出低电平,再读入所 有的行信号; 如有任何一个键被按下,则读 入的行电平则不全为高;如无键 按下,则全高电平。
其次,逐列扫描判断具体的按键:
就是向列线上逐列送低电平。如果 读入的行值为全高,则表示此列无 键按下,否则有键按下。
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
独立式按键编程
开始
有按键闭合否 Y
延时10ms,软件去抖动
图3 独立式按键编程流程图
N
矩阵式键盘的接口设计与编程

;<--------------------------判断是否真的有键按下--------------------->
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Байду номын сангаас
矩阵键盘的使用流程

矩阵键盘的使用流程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.按键反应迟缓:可能是键盘连接出现问题,重新连接一次或者更换连接线尝试,或者检查计算机的处理器负载情况。
高通平台之矩阵键盘接口问题分析总结

矩阵键盘口使用注意事项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为输出,默认输出低电平;配置行输入为下降沿中断触发;当有按键按下去时,行列有个脚接通,这时候行会被拉低进入中断;在中断处理函数中,先将所有列电平信号置高,然后再逐一拉低,读取行的电平信号是否为低(列扫描),当扫描到某列时读取的行电平为低,说明该列的按键被按下。
- 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” }