51单片机矩阵键盘原理

合集下载

51单片机矩阵键盘原理

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()`函数来获取用户所按下的具体按键值。

基于51单片机的电子密码锁

基于51单片机的电子密码锁

电子密码锁一、工作原理本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O 线的数目,在按键比较多的时候,通常采用这样方法。

每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N ×M个按键的键盘。

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

4×4矩阵键盘的工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

扫描原理把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。

由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。

利用51单片机设计一个用16个按键输入,6位数字输出显示的电子时钟。

如图1-1所示。

图1-1按键分布图具体要求和按键功能介绍如下:1. 上电后,6 位数码管显示“—”;2. 设置6 位密码,密码通过键盘输入,按“确定”键确认,如密码正确,将锁打开;3. 密码由用户自己设定,若密码正确即锁被打开,则指示灯被点亮;4. 若密码1 次输入错误,则报警;5. 按Set 键,修改密码;6. 按Cle 键可清除已输入的密码,重新进行输二、系统硬件组成本次设计的主要有键盘,数码管,STC89C52芯片,以及LED灯。

实验一 矩阵键盘检测

实验一  矩阵键盘检测

实验一矩阵键盘检测一、实验目的:1、学习非编码键盘的工作原理和键盘的扫描方式。

2、学习键盘的去抖方法和键盘应用程序的设计.二、实验设备:51/AVR实验板、USB连接线、电脑三、实验原理:键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。

我们可以通过键盘输入数据或命令来实现简单的人机通信。

1、按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。

前者造价低,后者寿命长.目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。

按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。

编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别.全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。

非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成.由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。

2、按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。

也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。

此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。

当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。

因此,键信息输入是与软件结构密切相关的过程。

对于一组键或一个键盘,通过接口电路与单片机相连.单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。

矩阵键盘的原理及应用

矩阵键盘的原理及应用

矩阵键盘的原理及应用1. 矩阵键盘的原理矩阵键盘是一种常见的输入设备,由多个按键组成,可以同时检测多个按键的状态。

它采用了行列交叉的按键排列方式,通过按键的组合来实现多个输入选项。

其原理主要包括以下几个方面:1.1. 电路结构矩阵键盘的电路结构也称为“行列式键盘”,主要由行线(Row)和列线(Column)组成。

行线和列线通过导线互相交叉连接形成一个矩阵,每个按键都对应矩阵中的一个交叉点。

按键按下时,会导通对应的行线和列线,从而实现按键的状态检测。

1.2. 矩阵扫描矩阵键盘的工作原理是通过矩阵扫描来检测按键状态。

扫描过程由控制器完成,控制器通过逐行扫描的方式检测按键状态。

具体流程如下:1.所有行线置为高电平,所有列线设置为输入模式。

2.逐行将某一行设置为低电平,同时读取列线上的状态。

3.根据读取到的列线状态,确定按下的按键。

4.更新按键的状态,并记录下来。

5.重复以上步骤,直到扫描结束。

1.3. 按键编码矩阵键盘检测到按键状态后,需要进行按键编码,将按键状态转化为数字或字符。

常见的按键编码方式有两种:•行列编码:将矩阵键盘的行和列对应关系转化为一个唯一的值,通常使用二进制编码来表示。

•状态编码:通过按键的状态(按下或释放)来表示,通常使用两个状态位来编码。

2. 矩阵键盘的应用矩阵键盘由于其结构简单、使用方便等特点,在多个领域都得到了广泛的应用。

以下是矩阵键盘的一些常见应用场景:2.1. 电子产品矩阵键盘在电子产品中被广泛应用,比如手机、电视遥控器、计算器等。

它可以提供多个输入选项,方便用户进行操作。

矩阵键盘的结构紧凑,可与其他电路板集成,节省空间,适用于小型电子产品。

2.2. 工业控制矩阵键盘在工业控制领域也有重要应用。

比如工控终端设备、仪表仪器等,可以利用矩阵键盘实现数据输入和操作控制。

由于矩阵键盘可以同时检测多个按键的状态,因此非常适合于工业环境中需要同时输入多个信号的场合。

2.3. 家用电器矩阵键盘在家用电器中也有广泛应用,如洗衣机、微波炉、冰箱等。

单片机实验报告——矩阵键盘数码管显示

单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。

按其它键没有结果。

二、实验目的1、学习独立式按键的查询识别方法。

2、非编码矩阵键盘的行反转法识别方法。

3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。

4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。

5、掌握利用Keil51软件对程序进行编译。

6、会根据实际功能,正确选择单片机功能接线,编制正确程序。

对实验结果能做出分析和解释,能写出符合规格的实验报告。

三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。

2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。

3、识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。

这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。

由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。

矩阵键盘的键值计算及编程

矩阵键盘的键值计算及编程
P1口低四位是指:P1.3 P1.2 P1.1 P1.0
2 读取I/O口值的练习
.j
用程序控制单片机P2口工作,让高四位全高电平,低四位全低电平。 即:P2=0xf0; 具体实现见操作,结果如图。
P1口高四位是指:P1.7 P1.6 P1.5 P1.4
一般都是自高到低读出一个端口各脚电平 ,得到8位二进制数,再将8位二进制转换成2位十六进数。
P3口值= P3.7 P3.6 P3.5 P3.4P3.3 P3.2 P3.1 P3.0 =1111 1010=0xfa
2 读取I/O口值的练习
.j
当 程序使P2=0x0f; 外接一个两脚开关到P2口只能让P2产生如下四个新的值: 0x0e, 0x0d,0x0b,0x07 0x0d 0x0b
找出行线值 置行线所处端口位置高电平
找出列线值 置列线所处端口位置高电平
行线值+列线值=键值
计算键值一般方法
3 键盘的键值
.j
先找出行线值,再找出列线值,最后绘出矩阵键盘的键值。
总结
4×4矩阵键盘的键值 共有16个,计算键值时总是:
4 键盘扫描编程__线反转法
.j
/************键盘扫子描函数*******************/ char keyscan(void) //键盘扫描函数,键盘使用P2口 { char value_h,value_l; //value_h行值变量,value_l列值变量 P2=0xf0; //将行线所处位置置高电平 if((P2&0xf0)!=0xf0) //判断是否有键按下 { delay(10); //延时防抖 if((P2&0xf0)!=0xf0) //仍有键按下 { value_h=P2&0xf0; //读出P2口值给变量value_h P2=0x0f; //将列线所处位置置高电平 value_l=P2&0x0f; //读出P2口值给变量value_l return(value_l+value_h); //找到的键值返回给调用函数 } } }

51单片机矩阵键盘设计

51单片机矩阵键盘设计

51单片机矩阵键盘设计
一、引言
AT89C51单片机矩阵键盘设计是嵌入式系统中一个重要的技术,它的
作用是以矩阵形式把外部按键与MCU相连,使得系统可以对外部的按键进
行检测和响应。

矩阵键盘设计在可编程嵌入式系统的设计中占有重要的地位,如智能交通系统、智能家居系统、航空电子系统等。

本文主要介绍了矩阵键盘设计中硬件电路的设计,包括按键、拉电阻、和矩阵编码等,同时给出系统的控制算法,使得系统可以实现有效的按键
检测和响应。

二、矩阵键盘概述
矩阵键盘是将多个按键排布成列行形式进行连接,一般来说,矩阵键
盘是由按键、拉电阻、矩阵编码器和控制器组成,按键是系统中重要的部件,其作用是将外部输入信号传递给控制器。

拉电阻起到的作用是防止按
键耦合,一般可以使用4.7KΩ拉电阻来防止按键耦合。

矩阵编码器用来
识别按键的状态,通常通过硬件把按键信号编码为数字信号,输入到处理
器或控制器。

控制器用来实现按键信号的检测,通过定义硬件定时器和软
件定时器,实现按键检测和处理。

1、硬件电路设计
应用AT89C51单片机矩阵键盘。

51单片机矩阵键盘线反转法体会

51单片机矩阵键盘线反转法体会

51单片机矩阵键盘线反转法体会独立式键盘扫描只需读取IO口状态,而矩阵式键盘描通常有两种实现方法:逐行扫描法和线反转法。

(1)逐行扫描法依次从第一至最末行线上发出低电平信号,如果该行线所连接的键没有按下的话,则列线所接的端口得到的是全“1”信号,如果有键按下的话,则得到非全“1”信号。

(2)线反转法线反转法比行扫描速度快,原理是先将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线的值,那么在闭合键所在的列线上的值必为0;然后从列线输出全“0”信号,再读取行线的输入值,闭合键所在的行线值必为0。

这样,当一个键被按下时,必定可读到一对唯一的行列值。

再由这一对行列值可以求出闭合键所在的位置。

/*在TX-1C实验板上实现如下描述:实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时显示。

这里用“线反转”的方法写,可以代替郭天祥书上例【4.2.1】该书上使用逐行扫描的方式。

*/#include<reg52.h>#define uchar unsigned char#define uintunsigned intsbit duan=P2^6;//打开位选和段选sbit wei=P2^7;uchar code table[]={//数码管显示数值表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint x){uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void xianshi(uchar num){P0=table[num]; duan=1;duan=0;}uchar keyscan(void){uchar h,l;P3=0x0f;h=P3&0x0f;if(h!=0x0f){delay(10);if(h!=0x0f){h=P3&0x0f;P3=0xf0;l=P3&0xf0;return (h+l);}}return 0xff;}void main(){uchar key;P0=0;示duan=1;duan=0;//毫秒级延时函数//段选显示函数//矩阵键盘扫描函数//定义行、列值中间变量//列线输出全为0//读入行线//检测有无按键按下//延时去抖//如果确实按下//再次读入行线//输出当前列线值,行线反转//读入列线值//键盘最后组合编码值,也就是键值//其余情况返回该值//关闭所有数码管段选,实验板上电数码管不显P0=0xc0;//选中6位数码管wei=1;wei=0;while(1){key=keyscan();//用key读取keyscan()的值switch(key){case 0xee:key=0;while(keyscan()!=0xff); xianshi(key); break;//while(keyscan()!=0xff)是松手检测语句,松手时检测case0xde:key=1;while(keyscan()!=0xff);xianshi(key);//keyscan()函数会得到返回值0xff,!=oxff时表示按下去了case 0xbe:key=2;while(keyscan()!=0xff); xianshi(key); break;case 0x7e:key=3;while(keyscan()!=0xff); xianshi(key); break;case 0xed:key=4;while(keyscan()!=0xff); xianshi(key); break;case 0xdd:key=5;while(keyscan()!=0xff); xianshi(key); break;case 0xbd:key=6;while(keyscan()!=0xff); xianshi(key); break;case 0x7d:key=7;while(keyscan()!=0xff); xianshi(key); break;case 0xeb:key=8;while(keyscan()!=0xff); xianshi(key); break;case 0xdb:key=9;while(keyscan()!=0xff); xianshi(key); break;case 0xbb:key=10; while(keyscan()!=0xff); xianshi(key); break;case 0x7b:key=11; while(keyscan()!=0xff); xianshi(key); break;case 0xe7: key=12; while(keyscan()!=0xff); xianshi(key); break;case 0xd7: key=13; while(keyscan()!=0xff); xianshi(key); break;case 0xb7: key=14; while(keyscan()!=0xff); xianshi(key); break;case 0x77: key=15; while(keyscan()!=0xff); xianshi(key); break;default:break;}}}/*后记*//*刚开始写这个程序时我把主函数里面的switch—case语句这样写的,while(1){key=keyscan();//用key读取keyscan()的值switch(key){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;break;}case 0x7e:key=3;break;case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10; break;case 0x7b:key=11; break;case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; default:break;}xianshi(key);运行程序后发现当手按下按键时会有数码的显示,但是一旦放开按键数码管就什么都不显示了。

史上最详细矩阵键盘原理

史上最详细矩阵键盘原理

case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测
{
delay(1000);
a++;
//a 的作用是用于去抖动,重复检测 50 次//
}
}
}
}
void main()
{
LSA=0; //给一个数码管提供位选//
LSB=0; //给一个数码管提供位选//
LSC=0; //给一个数码管提供位选//
while(1)
//无限循环//
{
KeyDown();
//调用按键判断函数//
GPIO_DIG=smgduan[KeyValue]; //将按键数值赋给 P0 口,控制锁存器//
当接收到的数据低四位不全为高电平时说明有按键按下然后通过接收的数据值判断是哪一列有按键按下然后再反过来高四位输出高电平低四位输出低电平然后根据接收到的高四位的值判断是那一行有按键按下这样就能够确定是哪一个按键按下了
史上最详细单片机矩阵键盘原理 广东阳西福达名苑梁智钧 20180131 一、矩阵按键扫描原理 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为 1 的 时候,说明有按键按下,然后通过接收到的数据是哪一位为 0 来判断是哪一个按键被按下。 方法二: 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时, 说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输 出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 二、原理图:

51单片机 矩阵键盘 千百十个 加1减1

51单片机 矩阵键盘 千百十个 加1减1
break;
default: break;
}
}
}
void xianshi()//显示当前数值
{
//显示个位
P1_3=0;//开位码控制位,此段接PNP三极管8550的基极,低电平开位码。
P0=dis[ge];//显示段码
delay();//每次亮的状态为50us
P0=0xff;//清除数码管显示,因为是共阳极的,故为0xff。如不清除,则数码管上有鬼影
//51单片机控制四个数码管,P2口接4*4矩阵式键盘,采用行列翻转的原理,1键按下千位加1,5键按下千位减一,;2键按下百位加1,6键按下百位减1;
//3键按下十位加1,7键按下十位减1;4键按下个位加1,8键按下个位键1
#include<reg52.h>
#define uchar unsigned char
uchar row,col,k=0xff;//定义行、列、返回值、循环控制变量
unsigned char qian,bai,shi,ge;
sbit P1_3=P1^3;//个位位码
sbit P1_2=P1^2;//十位位码
sbit P1_1=P1^1;//百位位码
sbit P1_0=P1^0;//千位位码
break;
case 0xBd: k=7;//第二行第三列的按键按下(代号为7),数码管十位减1
if(shi==0) shi=9;
else shi=shi-1;
break;
case 0x7d: k=8;//第二行第四列的按键按下(代号为8),数码管个位减1
if(ge==0) ge=9;
else ge=ge-1;
P2=0xf0;
while((P2&0xf0)!=0xf0);//等待键释放(松手检测)

51单片机矩阵键盘与8051连接设计

51单片机矩阵键盘与8051连接设计
sbit L5=P0_;
sbit L6=P0_;
sbit L7=P0_;
sbit L8=P0_;
sbit DUAN=P2_;
sbit WEI=P2_;
/*-----------------------------
定时器0初始化函数
-----------------------------*/
void init()
case 0xed:L5=~L5;/*按键05功能*/ break;
case 0xdd:L6=~L6;/*按键06功能*/ break;
case 0xbd:L7=~L7;/*按键07功能*/ break;
case 0x7d:L8=~L8;/*按键08功能*/ break;
case 0xeb:/*按键09功能*/ break;
{
TR0=0; //定时终止
TH0=(65536-10000)/256; //定时器0初值重装
TL0=(65536-10000)%256;
NUM--;
}
/*--------------------------------------------------
矩阵键盘检测兼编码函数
--------------------------------------------------*/
kvalue=matrixkeyscan();
switch(kvalue)
{
case 0xee:L1=~L1;/*按键01功能*/ break;
case 0xde:L2=~L2;/*按键02功能*/ break;
case 0xbe:L3=~L3;/*按键03功能*/ break;
case 0x7e:L4=~L4;/*按键04功能*/ break;

矩阵键盘工作原理

矩阵键盘工作原理

矩阵键盘工作原理1.按键扫描:矩阵键盘是由多个按键组成的,这些按键被排列成一个矩阵的形式。

在进行按键扫描时,会依次逐行或逐列地检测按键的状态,看是否有按键被按下。

通常,每行和每列都会有一个针脚来连接按键。

当按下一个按键时,该按键所在的行和列之间就会出现电性连通,形成一个按键矩阵电路。

2.按键编码:在按键扫描中,通过检测按键的行列连通状态可以确定哪个具体的按键被按下。

然而,矩阵键盘的针脚数量有限,无法通过直接连接给每一个按键独立编码的方式来实现,因此需要对按键信号进行编码。

一种常用的编码方式是使用行列编码器。

行列编码器通过感知具体的按键被按下的行和列连通状态来判断该按键的位置,并将该按键位置信息转化为一个对应的码值。

这个码值可以被传递给设备控制器或处理器,进而被进一步处理。

行列编码器通常通过矩阵按键的行列针脚输入来判断按键连通状态,然后将结果输出给设备控制器或处理器。

在实际应用中,矩阵键盘一般采用扫描式工作方式,即按键的行和列依次进行扫描。

具体工作步骤如下:1.首先,设备控制器或处理器会向矩阵键盘的行线输出一个低电平信号,同时将列线设置为输入状态。

2.然后,设备控制器或处理器会逐列检测按键的状态。

当有按键被按下时,该行和列之间会有电性连通,此时检测到的列的状态会改变。

设备控制器或处理器会将该连通的行列位置信息传递给行列编码器进行编码。

3.接下来,设备控制器或处理器会依次递增行的编号,重复上述步骤进行按键扫描,并实时更新按键状态信息,直到按键扫描完成。

总结起来,矩阵键盘的工作原理即通过扫描按键的行和列连通状态来检测按键是否被按下,然后通过行列编码器将按键位置信息编码为一个码值,最后将该码值传递给设备控制器或处理器进行处理。

通过这样的工作原理,矩阵键盘可以实现多个按键的同时检测和编码,为用户提供方便、高效的输入方式。

51单片机矩阵键盘的编程

51单片机矩阵键盘的编程

51单片机矩阵键盘的编程C51 单片机上的外设键盘键是使用的矩阵方式扩展的,但是硬件仿真时必须把蜂民器的开关打开触使行扫描的74HC53 的E 端接地为输出型,否则测死了也没反应,我还以为是我的程序有问题呢,后来才找到的。

其原理74HC138 译码器在输出端Y1 与WR(P3)都处于低电平通过或非门,转化成行扫描的74HC53 的片选端打开写入数据,在输出端的高4 位通过移位方式输出到外设键盘中。

然后给WR 一个高电平来给74HC53 一个低电平使得输入无效进行锁存操作。

然后通过RD(P3)与Y2 共同输出低电平通过或非门加上个非门把低电平送到列扫描的74HC53 的片选端E 上,在读取数据前必须先将要获取的高4 位进行置1,然后读取高4 位数据,通过RD 送出高电平进行锁住输出,防止74HC53 同时输入输出导致芯片烧毁。

然后根据获得的unsigned char 进行移位比对操作来获得是哪一列,然后在通过运算得到第几个按键被按下。

这是最简单的矩阵方式扩展键盘的代码流程,上述是我理解的流程,测试已没问题。

#includereg52.h#includeabsacc.hvoid my_delay10nms(unsigned int n){unsigned i,j;while(n --){for(i = 128;i 0;i --)for(j = 10;j 0;j --);}}sbit LED_BIT = P1;vo i dmain(void){unsigned char Key_h;unsigned char Key_Val;unsigned char Key_r;unsigned char Last_key;unsigned char Key_Temp;while(1){Key_Val=0;for(Key_h=4;Key_h8;Key_h++){P2=0x88;P0=(1Key_h);P3=~(16);P3|=(16);P2=0x90;P3=~(17); //读P0|=0xf0;Key_Temp=P00xf0; // P3|=(17); // 防止芯片烧坏if(Key_Temp) {for(Key_r=4;Key_r8;Key_r++){if(Key_Temp(1Key_r)){Key_Val=(Key_h-。

51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil

51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil

51单⽚机教程:按键输⼊、矩阵按键(按键巧⽤)proteus仿真+keil⽂章⽬录IO⼝原理(P1⼝最简单,所以这⾥只介绍P1,其他IO⼝原理类似)P1⼝原理可以看到的是P1⼝的⼯作原理⽐较简单,⾸先⽤P1⼝做输⼊输出较为好理解。

1、内部总线:就是内部P1.X位寄存器的值,⽐如说内部总线P1.0上电压为0V,那么对应P1.0=0;内部总线P1.0上电压为5V,那么对应P1.0=1;2、P1.X引脚:对应单⽚机引脚接⼝3、读锁存器:读锁存器为1,允许读锁存器。

为0,不允许读锁存器。

4、读引脚:为0不允许读引脚,为1允许读引脚5、写锁存器:提供⼀个上升沿锁存数据(写数据到单⽚机IO⼝上时⾃动提供⼀个脉冲)⼏个核⼼问题:1、读锁存器与读引脚区别是什么?读锁存器:读锁存器Q的电平读引脚:读P1.X引脚的电平2、读锁存器与读引脚能不能同时读?不能,两个输⼊缓冲器只能同时打开⼀个,所以只能同时读取⼀个电平。

3、什么时候读锁存器,什么时候读引脚?凡属于读-修改-写⽅式的指令,从锁存器读⼊信号,其它指令则从端⼝引脚线上读⼊信号。

也就是说遇到读指令时,相应的输⼊缓冲器才会打开,⼀般是出于关闭状态4、如果P1.0⼝⼀开始置⼀,然后⽤按键拉低,松开按键后P1.0⼝会是低电平吗?不会,锁存器锁1,没有写⼊0之前⼀直输出1,按下按键只不过P1.0引脚变低了,松开后依然是⾼电平(有了以上知识,我们就可以轻松解决很多问题了)按键输⼊按键由于是机械结构,按下的时候难免产⽣抖动,⼀般抖动会在按下的时候与松开的时候产⽣,抖动时间⼤概是10ms⼆、打开proteus仿真,绘制电路功能:利⽤⼀个按键对⼀个发光⼆极管进⾏控制。

这个可以说是最简单的按键输⼊实验了!由于是51单⽚机,内部有上拉电阻,我们就不要浪费材料在按键上接上拉了三、打开keil,编写如下代码sbit key=P1^0;//定义key为P1.0sbit led=P2^0;//定义LED为P2.0void delay10(void)//延时10ms{int n=1000;while(n--);}void main(void){while(1){if(key==0)//读P1.0引脚,如果引脚为低电平,则进⼊if{delay10();//延时10ms消抖if(key==0)//再次判断按键是否按下,防⽌⼲扰,增强稳定{led =!led;//led状态改变while(key==0);//等待按键松开,防⽌往下执⾏}}}}博主有个疑问也很不解,当"key"换成"P2^0"后程序就不能正常运⾏了,知道的⼩伙伴能不能给我解解惑。

51单片机综合学习系统之矩阵键盘篇

51单片机综合学习系统之矩阵键盘篇

10-5 软件流程图 51 单片机综合学习系统资源丰富,可做实验有:8 位 LED 数码管、32 路 LED、4x4 矩阵键盘、4 个直控 键盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64 液晶、红外接收头接 口、支持 PS/2 接口的 104 键标准键盘、步进电机驱动接口、ADC0832 模/数转换接口、PC817 光电耦合器、 串行时钟芯片 DS1302、温度传感器 DS18B20 接口、RS232 串口通讯、外扩展接口以便外接更多的实验资源。 软件代码 /***************************************************************************/ /*杭州晶控电子有限公司*/ /**/
图 1 矩阵键盘布局图
图 2 矩阵键盘内部电路图 当无按键闭合时,P10~P13 与 P14~P17 之间开路。当有键闭合时,与闭合键相连的两条 I/O 口线之间 短路。判断有无按键按下的方法是:第一步,置列线 P14~P17 为输入状态,从行线 P10~P13 输出低电平, 读入列线数据, 若某一列线为低电平, 则该列线上有键闭合。 第二步, 行线轮流输出低电平, 从列线 P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是 键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可 能会连续多次进行同样的键操作。 矩阵键盘软硬件设计实例 本期以 51 单片机综合学习系统为硬件平台,介绍矩阵式键盘的编程方法。实验通过按下相应键后在一 位数码管上显示出键值。0 到 16 个键分别对应显示 0 到 F。
switch(n) { case(0xe0):display(7);break; case(0xd0):display(6);break; case(0xb0):display(5);break; case(0x70):display(4);break; } } } //扫描第三行 P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(11);break;

51单片机学习之5独立按键和矩阵键盘

51单片机学习之5独立按键和矩阵键盘

51单片机学习之5独立按键和矩阵键盘51单片机学习之5-独立按键和矩阵键盘第14集键盘的原理键盘分编码键盘(例如电脑键盘)和非编码键盘(自己用程序去识别)。

非编码键盘分:独立式非编码键盘(独立按键)、行列式非编码键盘(4*4阵列键盘)独立键盘的电路图。

因为51单片机的IO口不是双向口而是准双向口,要让IO口具备输入功能,必须将IO口置1,置1之后当按键按下时IO口的电平会被拉低,即被置0。

当检测到IO 口为0时即可判断该按键已经按下。

按键按下时会有一个抖动的过程(弹片会抖动),由于单片机检测IO口速度非常快,超过弹片抖动的频率,所以当单片机检测到IO口为0时需延时一小段时间再检测IO是否为0,如果仍为0就确认该按钮被按下。

因为IO口里面有上拉电阻,所以当松开按钮时,IO口又被拉高。

例程:#include;#defineuintunsignedint#defineucharunsignedcharsbitKey=P3^4;//按键sbitLed=P1^0; //Led灯voiddelay(uintz);/********主函数********/voidmain(){while(1){if(!Key){delay(10);//消抖操作if(!Key)Led=0; //按下时Led亮elseLed=1;}}}voiddelay(uintz){uintx,y;for(x=z;x>;0;x--)for(y=110;y>;0;y--);}第15集4*4矩阵键盘上图中,1个按键占用一个IO口,如果有16个按键就占用了16个IO口。

为了减少IO口的使用,就需要用矩阵的方式连线。

如下图矩阵扫描原理从图可以看出P30、P31、P32、P33为行(低四位),P34、P35、P36、P37为列(高四位)。

假设我们按下的是S6按钮。

第一步,我们先确定列,给P3口赋值0xF0=11110000,那么P37、P36、P35、P34都被置1,P33、P32、P31、P30都被置0,当S6被按下时,由于S6按钮的一边P31为0,所以跟S6另一边相连的P35被拉低,即等于0。

4×4矩阵键盘原理及其在单片机中的简单应用(基Proteus仿真)

4×4矩阵键盘原理及其在单片机中的简单应用(基Proteus仿真)

4×4矩阵键盘原理及其在单片机中的简单应用基于Proteus仿真1、4×4矩阵键盘的工作原理如下图所示,4×4矩阵键盘由4条行线和4条列线组成,行线接P3.0-P3.3,列线接P3.4-P3.7,按键位于每条行线和列线的交叉点上。

按键的识别可采用行扫描法和线反转法,这里采用简单的线反转法,只需三步。

第一步,执行程序使X0~X3均为低电平,此时读取各列线Y0~Y3的状态即可知道是否有键按下。

当无键按下时,各行线与各列线相互断开,各列线仍保持为高电平;当有键按下时,则相应的行线与列线通过该按键相连,该列线就变为低电平,此时读取Y0Y1Y2Y3的状态,得到列码。

第二步,执行程序使Y0~Y3均为低电平,当有键按下时,X0~X3中有一条行线为低电平,其余行线为高电平,读取X0X1X2X3的状态,得到行码。

第三步,将第一步得到的列码和第二步得到的行码拼合成被按键的位置码,即Y0Y1Y2Y3X0X1X2X3(因为行线和列线各有一条为低电平,其余为高电平,所以位置码低四位和高四位分别只有一位低电平,其余为高电平)。

也就是说,当某个键按下时,该键两端所对应的行线和列线为低电平,其余行线和列线为高电平。

比如,当0键按下时,行线X0和列线Y0为低电平,其余行列线为高电平,于是可以得到0键的位置码Y0Y1Y2Y3X0X1X2X3为01110111,即0X77。

当5键按下时,行线X1和列线Y1为低电平,其余行列线为高电平,于是可得到5键的位置码Y0Y1Y2Y3X0X1X2X3为10111011,即0XBB。

全部矩阵键盘的位置码如下:2、4×4矩阵键盘在单片机的简单应用举例(一)如下图所示,运行程序时,按下任一按键,数码管会显示它在矩阵键盘上的序号0~F,并且蜂鸣器发出声音,模拟按键的声音。

此处采用线反转法识别按键。

C程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit buzzer=P1^0;uchar code dis[]= //0~9,A~F的共阳显示代码{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E};uchar code tab[]= //矩阵键盘按键位置码{0x77,0xb7,0xd7,0xe7,0x7b,0xbb,0xdb,0xeb,0x7d,0xbd,0xdd,0xed,0x7e,0xbe,0xde,0xee};void delay(uint x) //延时函数{uchar i;while(x--)for(i=0;i<120;i++);}uchar scan() //矩阵键盘扫描函数,得到按键号,采用线反转法{uchar a,b,c,i;P3=0XF0; //P3口输出11110000a=P3; //读取列码delay(10); //防抖延时10msP3=0X0F; //P3口输出00001111b=P3; //读取行码c=a+b; //得到位置码for(i=0;i<16;i++)if(c==tab[i])return i; //查表得到按键序号并返回return -1; //无按键,则返回-1}void beep() //蜂鸣器发出声音,模拟按键的声音{ uchar i;for(i=0;i<100;i++){buzzer=~buzzer;delay(1);}buzzer=0;}void main(){uchar key;buzzer=0; //关闭蜂鸣器while(1){key=scan(); //得到按键号if(key!=-1) //有按键则显示,并且蜂鸣器发出声音{P0=dis[key];beep();delay(100);}}}Proteus仿真运行结果如下:3、4×4矩阵键盘在单片机的简单应用举例(二)如下图所示,运行程序时,按下的按键键值越大,点亮的LED灯越多,例如,按下1号键时,点亮一只LED灯,按下2号键时,点亮两只LED灯,按下16号键时,点亮全部LED 灯。

单片机控制的矩阵键盘

单片机控制的矩阵键盘

引言概述:
单片机控制的矩阵键盘已经成为现代电子设备中常见的输入方式之一。

该键盘具有结构简单、易于实现和使用方便等优点,广泛应用于各种电子产品中。

本文将对单片机控制的矩阵键盘的原理、设计和应用进行详细阐述。

正文内容:
一、矩阵键盘的原理
1.1矩阵键盘的基本结构
1.2矩阵键盘的电路连接方式
1.3矩阵键盘的工作原理
二、单片机控制的矩阵键盘的设计
2.1单片机的选择和配置
2.2键盘扫描算法的设计
2.3矩阵键盘的接口设计
2.4程序的编写和调试
2.5键盘输入的处理和应用
三、单片机控制的矩阵键盘的应用
3.1家电控制系统中的使用
3.2工控设备中的应用
3.3智能家居中的应用
3.4安防系统中的应用
3.5医疗设备中的应用
四、单片机控制的矩阵键盘的优缺点
4.1优点:
4.1.1结构简单,易于实现
4.1.2使用方便,操作灵活
4.1.3成本低廉,适合大规模生产
4.2缺点:
4.2.1键盘数量限制
4.2.2受到干扰可能导致误触发
五、单片机控制的矩阵键盘的发展趋势
5.1多功能键盘的设计
5.2无线键盘与蓝牙技术的结合
5.3舒适性与人机工程学的结合
5.4智能化与技术的应用
总结:
单片机控制的矩阵键盘是一种常见的输入方式,具有结构简单、易于实现和使用方便等优点。

本文对其原理、设计和应用进行
了详细阐述。

随着技术的不断发展,矩阵键盘在功能、无线化、舒适性和智能化方面也有了较大的进步和应用。

相信在未来,单片机控制的矩阵键盘将继续发挥重要作用,并与其他技术相结合,满足人们对输入设备的更高要求。

矩阵键盘原理

矩阵键盘原理

距阵键盘矩阵键盘是单片机编程中所使用的键盘.1.矩阵式键盘的结构与工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。

行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

具体的识别及编程方法如下所述。

2、矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

下面给出一个具体的例子:图仍如上所示。

8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机矩阵键盘原理
介绍
在嵌入式系统中,矩阵键盘是一种常见的输入装置。

51单片机是广泛使用的一种
微控制器,结合矩阵键盘可以实现各种应用。

本文将详细介绍51单片机矩阵键盘
的原理及其工作方式。

什么是矩阵键盘?
矩阵键盘是将一组按钮布置成矩阵形式,以减少输入引脚的数量。

每个按钮在矩阵键盘中都会被分配一个坐标,通过扫描行和列,可以确定用户按下的是哪个按钮。

51单片机的输入输出结构
51单片机具有强大的输入输出能力,可以连接各种外设。

在使用矩阵键盘时,通
常使用IO口进行输入和输出操作。

矩阵键盘的接线方式
将矩阵键盘与51单片机连接时,需要将键盘的行和列引脚分别连接到单片机的IO 口。

通过对行进行扫描,再根据列的输入状态判断按钮是否按下。

这种接线方式可以大大减少所需的IO口数量。

矩阵键盘的扫描原理
矩阵键盘的扫描原理是通过不断扫描行并读取列的状态来判断按钮是否按下。

具体步骤如下: 1. 将所有行引脚设为输出,输出高电平。

2. 逐个扫描行,将当前行引脚设为低电平。

3. 读取所有列引脚的状态,如果有低电平表示有按钮按下。

4. 如果有按钮按下,则根据行和列的坐标确定按下的按钮。

51单片机矩阵键盘的实现
以下是使用51单片机实现矩阵键盘的基本步骤: 1. 将行和列引脚连接到单片机的IO口。

2. 初始化IO口的状态。

3. 在主程序中进行循环扫描,根据扫描结果执行相应的操作。

优化矩阵键盘的扫描速度
为了提高矩阵键盘的扫描速度,可以采用以下优化方法: 1. 使用硬件定时器来定时扫描行,减少CPU的负载。

2. 使用中断方式处理按键事件,从而减少程序中的轮询操作。

3. 将矩阵键盘的行和列布局进行优化,减少扫描的时间复杂度。

利用矩阵键盘实现密码输入
矩阵键盘广泛应用于密码输入功能。

通过将矩阵键盘与51单片机结合,可以实现密码的输入、验证等功能。

以下是一个简单的密码输入的实现步骤: 1. 设置一个密码数组用于存储密码。

2. 使用矩阵键盘获取用户输入的密码,并依次存储到临时数组中。

3. 在输入完成后,将临时数组与密码数组进行比较,判断是否输入正确。

利用矩阵键盘还可以实现更多有趣的功能,如控制LED灯的亮灭、控制电机的转动等。

小结
51单片机矩阵键盘原理是一种常见的输入方式,通过对行和列的扫描,可以准确判断用户按下的按钮。

本文详细介绍了51单片机矩阵键盘的原理、接线方式、扫描方法以及实现密码输入的示例。

希望读者通过本文的学习,能够充分理解并应用51单片机矩阵键盘的原理。

相关文档
最新文档