4×4矩阵键盘的工作原理
- 格式:doc
- 大小:21.00 KB
- 文档页数:2
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()`函数来获取用户所按下的具体按键值。
矩阵键盘工作原理矩阵键盘是一种常见的计算机输入设备,它的工作原理是通过一组排列成矩阵的按键和电路来实现数据输入。
在我们日常使用的电脑键盘中,就采用了矩阵键盘的设计原理。
下面我们来详细了解一下矩阵键盘的工作原理。
首先,矩阵键盘由多个按键组成,这些按键通常被排列成矩阵的形式,每个按键都对应着一个电路。
当用户按下某个按键时,这个按键所在的电路就会被闭合,产生一个电信号。
这个信号会被传输到计算机的主板上,然后由主板进行识别和处理。
其次,矩阵键盘的工作原理是基于键盘扫描的。
在键盘扫描过程中,计算机会通过轮流地对每行和每列的电路进行检测,以确定哪些按键被按下。
具体来说,当用户按下某个按键时,它所在的行和列的电路就会连接起来,计算机就能够通过扫描检测到这个按键的存在。
然后,一旦计算机检测到有按键被按下,它就会根据按键所在的行和列的位置来确定这个按键的具体标识。
这个标识会被转换成相应的ASCII码或者其他编码方式,然后传输到计算机的操作系统中。
操作系统会根据接收到的编码来识别用户按下的是哪个按键,并进行相应的处理,比如在屏幕上显示相应的字符或者执行相应的功能。
最后,需要注意的是,矩阵键盘的工作原理是基于按键的电路连接来实现的。
因此,它对于多个按键同时按下的情况可能会存在一定的限制。
一般来说,矩阵键盘能够支持同时按下一定数量的按键,但是如果同时按下的按键超出了它的限制,就有可能会出现按键冲突的情况,导致计算机无法准确识别用户的输入。
总的来说,矩阵键盘是一种通过按键和电路排列成矩阵来实现数据输入的计算机输入设备。
它的工作原理是基于键盘扫描和按键电路连接来实现的,能够准确地识别用户的按键输入,并将输入的数据传输到计算机进行处理。
然而,需要注意的是,矩阵键盘在处理多个按键同时按下的情况时可能会存在一定的限制,需要用户在使用时注意避免按键冲突的情况发生。
单片机矩阵键盘实验实验报告一、实验目的本次实验的目的是掌握原理和方法,利用单片机识别矩阵键盘并编程实现键码转换功能,控制LED点亮显示。
二、实验原理矩阵键盘是一种由多路单向控制器输入行选择信号与列选择信号连接而形成的一一对应矩阵排列结构。
它广泛应用于电子游戏机、办公自动化设备、医疗仪器、家电控制及书籍检索机器等方面。
本次实验采用的矩阵键盘是一个4 x 4矩阵,用4段数码管显示按键编码,每个按键都可以输入一个代码,矩阵键盘连接单片机,实现一个软件算法来识别键码转化。
从而将键盘中的按键的按下信号转换成程序能够识别的代码,置于相应的输出结果中,控制LED点亮,从而可以实现矩阵键盘按键的转换功能。
三、实验方法1.硬件搭建:矩阵键盘(4行4列)与单片机(Atmel AT89C51)相连,选择引脚连接,并将数码管和LED与单片机相连以实现显示和点亮的功能。
2.程序设计:先建立控制体系,利用中断服务子程序识别和码值转换,利用中断服务子程序实现从按键的按下信号转换为程序能够识别的代码,然后将该代码段编写到单片机程序中,每次按下矩阵键盘按键后单片机给出相应的按键编码输出,用数码管显示,控制LED点亮。
四、实验结果经过实验,成功实现了矩阵键盘与单片机之间的连接,编写了中断服务子程序,完成了按键编码输出与LED点亮的功能。
实验完成后,数码管显示各种按键的编码,同时LED会点亮。
本次实验介绍了矩阵键盘的原理,论述了键码转换的程序设计步骤,并实验完成矩阵键盘与单片机的连接,实现用LED点亮以及数码管显示按键的编码。
通过本次实验,受益匪浅,使我对使用单片机编写算法与程序有了更深入的认识,同时丰富了课堂学习的内容,也使我更加热爱自己所学的专业。
矩阵键盘的工作原理矩阵键盘是一种常见的输入设备,它的工作原理是通过矩阵排列的按键和电路来实现输入信号的传输。
在我们日常生活中,矩阵键盘被广泛应用于计算机、手机、电子游戏机等设备中,它的工作原理对于我们了解和使用这些设备都至关重要。
矩阵键盘的工作原理主要包括按键输入、行列扫描和编码传输三个部分。
首先,当我们按下键盘上的某一个按键时,按键会闭合对应的电路,产生一个电信号。
这个电信号会被传送到键盘的控制电路中,进行处理和编码。
控制电路会根据按键的位置,将按键所在的行和列进行扫描,确定按键的具体位置。
然后,控制电路会将按键的位置信息转换成数字编码,通过数据线传输给计算机或其他设备,完成按键输入的过程。
矩阵键盘的按键排列采用了行列交叉的矩阵结构,这种结构可以大大减少按键和控制电路之间的连接线,使得键盘的布线更加简洁和紧凑。
在实际应用中,矩阵键盘的按键数量可以很大,但是由于采用了矩阵结构,所以只需要相对较少的引脚就可以完成对所有按键的扫描和编码,这样就大大降低了成本和复杂度。
值得一提的是,矩阵键盘的工作原理也决定了它的一些特点。
首先,由于采用了矩阵排列,所以在按下多个按键的情况下,可能会出现按键冲突的现象。
这是因为在矩阵键盘中,每一个按键都对应着一个唯一的行列交叉点,当同时按下多个按键时,就会出现多个交叉点闭合的情况,这就导致了按键冲突。
为了解决这个问题,矩阵键盘通常会采用一些消抖和排除冲突的算法,来确保按键输入的准确性和稳定性。
另外,矩阵键盘的工作原理也决定了它的扩展性和灵活性。
通过改变矩阵的行列排列方式,可以实现不同大小和形状的键盘设计,满足不同设备的需求。
同时,矩阵键盘的按键编码方式也可以根据实际情况进行定制,使得键盘可以适配不同的输入接口和通信协议。
总的来说,矩阵键盘的工作原理是通过矩阵排列的按键和电路来实现输入信号的传输。
它的工作原理决定了键盘的特点和应用范围,同时也为我们使用这些设备提供了便利和效率。
一、实验目的1.掌握4×4矩阵式键盘程序识别原理2.掌握4×4矩阵式键盘按键的设计方法二、设计原理(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号(2)键盘中对应按键的序号排列如图14.1所示三、参考电路740)this.width=740" border=undefined>图14.2 4×4矩阵式键盘识别电路原理图740)this.width=740" border=undefined>图14.1 4×4键盘0-F显示740)this.width=740" border=undefined>图14.3 4×4矩阵式键盘识别程序流程图四、电路硬件说明(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h五、程序设计内容(1)4×4矩阵键盘识别处理(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码矩阵的行线和列线分别通过两并行接口和CPU通信键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能六、程序流程图(如图14.3所示)七、汇编源程序;;;;;;;;;;定义单元;;;;;;;;;;COUNT EQU 30H;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100HSTART: LCALL CHUSHIHUA LCALL PANDUANLCALL XIANSHILJMP START ;;;;;;;;;;初始化程序;;;;;;;;;; CHUSHIHUA: MOV COUNT#00H RET;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;; PANDUAN: MOV P3#0FFHCLR P3.4MOV A P3ANL A#0FHXRL A#0FHJZ SW1LCALL DELAY10MSJZ SW1MOV A P3ANL A#0FHCJNE A#0EH K1MOV COUNT#0LJMP DKK1: CJNE A#0DH K2MOV COUNT#4LJMP DKK2: CJNE A#0BH K3 MOV COUNT#8 LJMP DKK3: CJNE A#07H K4 MOV COUNT#12K4: NOPLJMP DKSW1: MOV P3#0FFH CLR P3.5MOV A P3ANL A#0FHXRL A#0FHJZ SW2LCALL DELAY10MS JZ SW2MOV A P3ANL A#0FHCJNE A#0EH K5 MOV COUNT#1 LJMP DKK5: CJNE A#0DH K6 MOV COUNT#5 LJMP DKK6: CJNE A#0BH K7 MOV COUNT#9 LJMP DKK7: CJNE A#07H K8 MOV COUNT#13K8: NOPLJMP DKSW2: MOV P3#0FFH CLR P3.6MOV A P3ANL A#0FHXRL A#0FHJZ SW3LCALL DELAY10MS JZ SW3MOV A P3ANL A#0FHCJNE A#0EH K9 MOV COUNT#2 LJMP DKK9: CJNE A#0DH KA MOV COUNT#6 LJMP DKKA: CJNE A#0BH KB MOV COUNT#10 LJMP DKKB: CJNE A#07H KC MOV COUNT#14 KC: NOPLJMP DKSW3: MOV P3#0FFH CLR P3.7MOV A P3ANL A#0FHXRL A#0FHJZ SW4LCALL DELAY10MSJZ SW4MOV A P3ANL A#0FHCJNE A#0EH KDMOV COUNT#3LJMP DKKD: CJNE A#0DH KE MOV COUNT#7LJMP DKKE: CJNE A#0BH KF MOV COUNT#11LJMP DKKF: CJNE A#07H KG MOV COUNT#15KG: NOPLJMP DKSW4: LJMP PANDUAN DK: RET ;;;;;;;;;;显示程序;;;;;;;;;; XIANSHI: MOV A COUNT MOV DPTR#TABLE MOVC A@A+DPTRMOV P0 ALCALL DELAYSK: MOV A P3ANL A#0FHXRL A#0FHJNZ SKRET ;;;;;;;;;;10ms延时程序;;;;;;;;;;DELAY10MS: MOV R6#20D1: MOV R7#248DJNZ R7$DJNZ R6D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;DELAY: MOV R5#20LOOP: LCALL DELAY10MSDJNZ R5LOOPRET;;;;;;;;;;共阴码表;;;;;;;;;;TABLE: DB 3FH06H5BH4FH66H6DH7DH07H DB 7FH6FH77H7CH39H5EH79H71H ;;;;;;;;;;结束标志;;;;;;;;;;END八、C语言源程序#include<AT89X51.H>unsigned char code table[]={0x3f0x660x7f0x390x060x6d0x6f0x5e0x5b0x7d0x770x790x4f0x070x7c0x71};void main(void){ unsigned char i j k key;while(1){ P3=0xff; //给P3口置1//P3_4=0; //给P3.4这条线送入0//i=P3;i=i&0x0f; //屏蔽低四位//if(i!=0x0f) //看是否有按键按下//{ for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);if(i!=0x0f) //再次判断按键是否按下//{ switch(i) //看是和P3.4相连的四个按键中的哪个// { case 0x0e:key=0;break;case 0x0d:key=1;break;case 0x0b:key=2;break;case 0x07:key=3;break;}P0=table[key]; //送数到P0口显示//}}P3=0xff;P3_5=0; //读P3.5这条线//i=P3;i=i&0x0f; //屏蔽P3口的低四位//if(i!=0x0f) //读P3.5这条线上看是否有按键按下// { for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);i=P3; //再看是否有按键真的按下//i=i&0x0f;if(i!=0x0f){ switch(i) //如果有显示相应的按键//{ case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}P0=table[key]; //送入P0口显示//}}P3=0xff;P3_6=0; //读P3.6这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=8;break;key=9;break;case 0x0b:key=10;break;case 0x07:key=11;break;}P0=table[key];}}P3=0xff;P3_7=0; //读P3.7这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=12;break;case 0x0d:key=13;break;key=14;break;case 0x07:key=15;break;}P0=table[key];}}}}九、注意事项在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。
矩阵键盘的工作原理
矩阵键盘是一种常见的输入设备,它通常用于电子产品中,如计算器、电脑键盘、手机等。
它的工作原理是通过将按键排列成一个矩阵,通
过扫描矩阵来检测按键是否被按下。
矩阵键盘由行和列组成。
每个按键都与一个行和一个列相交叉。
当按
下某个按键时,该按键所在的行和列会连接在一起,形成一个电路。
这个电路就像一个开关一样,将信号传递给控制器。
控制器会扫描整个矩阵,检测哪些行和列连接在一起。
如果有某个按
键被按下,则对应的行和列会连接在一起,并且控制器能够检测到这
个电路。
控制器会根据检测到的电路来确定哪个按键被按下。
为了避免误操作或者多次触发同一个按钮,在每次扫描完整个矩阵后,需要加入去抖动处理。
去抖动处理是指通过软件或硬件方式对输入信
号进行滤波处理,使得输入信号稳定后再进行识别。
除了扫描和去抖动之外,还有其他的技术可以提高矩阵键盘的性能和
可靠性。
例如,可以使用多层矩阵来提高扫描速度和准确性。
还可以
使用反向按键识别技术来避免按键冲突。
总的来说,矩阵键盘的工作原理是通过将按键排列成一个矩阵,通过扫描矩阵来检测按键是否被按下。
控制器会扫描整个矩阵,检测哪些行和列连接在一起。
如果有某个按键被按下,则对应的行和列会连接在一起,并且控制器能够检测到这个电路。
为了避免误操作或者多次触发同一个按钮,在每次扫描完整个矩阵后,需要加入去抖动处理。
4×4矩阵键盘1.原理说明一般的4*4矩阵键盘(如图1)一般要8个I/O口(如图1),对于按键较多的硬件系统来说是很浪费的I/O口,本方案仅采用4个I/O和4个普通二极管就可以轻松实现4×4矩阵键盘,方案原理与普通4*4矩阵键盘类似,下面先分析普通矩阵键盘原理,再进一步改进为本方案。
原理如下B4口为低电平,A1~A4,B1~B3为高电平,单片机不停的扫描,假若有键按下如A1与B4交叉处按下则对应的A1被拉低为低电平,可以定义此键号为1,同理以此类推B3口为低电平,其余口为高电平,交叉处按键按下可定义其按键号,将按键号存储在寄存器中,可用查表方法并通过数码管显示按键号。
对于下图(图2)用4个I/O和4个普通二极管初始化PA0.0~PA0.3 均为高电平,在这里二极管作用是当IO口为低电平时可以导通,高电平时截止。
程序流程图如下图1图22.程序介绍如下void RCC_Configuration(void);{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_PP _ OUT;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);}GPIOSetBits(){GPIO_SetBits(GPIOA,GPIO_Pin_0);GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_3);}单片机不停的扫描程序,(右侧四个键单独来写),由于扫描速度是很快(微妙级)的,所以有足够的时间去显示每个按键的。
矩阵式键盘工作原理矩阵式键盘通常由多个按键组成一个矩阵结构。
每个按键都与矩阵的特定位置相对应,并且每个按键都有一个唯一的标识符。
矩阵式键盘通常由行和列构成,行与列之间通过导线相连。
矩阵式键盘的工作原理基于按键的位置,并且利用行与列之间的连线来检测按键是否被按下。
当按键未被按下时,矩阵式键盘的每个按键都将断开。
当按下一些按键时,按键的金属接点会触碰到与之相对应的导线,导致行与列之间形成电连接。
这导致通过电流流过,形成一个闭合电路。
这一电路可以被接收器感应到,并识别为一些按键被按下。
典型的矩阵式键盘电路由一个控制器和一个扫描矩阵组成。
控制器对行和列的导线进行扫描,确定按键是否被按下。
扫描矩阵是键盘上每个按键的布线结构,它允许控制器独立地访问每个按键。
控制器在扫描矩阵中的每个行导线上施加高电平信号,然后依次扫描每个列导线,以检测每一行上是否有按键被按下。
当控制器检测到一个按键被按下时,它将相应的行和列组合起来,以确定按下的按键的位置。
为了准确识别按键,矩阵式键盘电路通常采用消除键盘“反弹”的技术。
按键反弹是指按键被按下后,金属接点可能会在一段时间内反弹,导致多次电连接。
为了避免这种情况,电路通常会在检测到按键按下之后,延时一段时间再次检测。
矩阵式键盘的工作原理不仅适用于小型键盘,还适用于更大的键盘布局,如标准计算机键盘。
在这种情况下,矩阵式键盘可由多个矩阵组成,每个矩阵对应一个键盘的一部分。
整个键盘上的按键被编码为多个矩阵上的位置,并通过相应的扫描和检测进行识别。
总结起来,矩阵式键盘通过行和列之间的电连接来检测按键是否被按下。
控制器和扫描矩阵的结合使用,可以实现对键盘上多个按键的检测。
通过消除按键的反弹并进行适当的延时,矩阵式键盘可以提供准确和可靠的按键输入。
这使得它成为广泛应用于各种电子设备中的一种常见输入方式。
矩阵键盘实验报告佘成刚学号2010302001班级08041202时间2016.01.20一、实验目的1.学习矩列式键盘工作原理;2.学习矩列式接口的程序设计。
二、实验设备普中HC6800ESV20开发板三、实验要求要现:用4*4矩阵键盘,用按键形式输入学号,在数码管上显示对应学号。
四、实验原理工作原理:矩阵式由行线和列线组成,按键位于行、列的交叉点上。
如图所示,一个4*4 的行、列结构可以构成一个由16 个按键的键盘。
很明显,在按键数量较多的场合,矩阵式键盘与独立式键盘相比,要节省很多的I/0 口。
(1)矩阵式键盘工作原理按键设置在行、列交节点上,行、列分别连接到按键开关的两端。
行线通过下拉电阻接到GND 上。
平时无按键动作时,行线处于低电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。
列线电平如果为低,行线电平为高,列线电平如果为高,则行线电平则为低。
这一点是识别矩阵式键盘是否被按下的关键所在。
因此,各按键彼此将相互发生影响,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。
(2)按键识别方法下面以3 号键被按下为例,来说明此键是如何被识别出来的。
前已述及,键被按下时,与此键相连的行线电平将由与此键相连的列线电平决定,而行线电平在无键按下时处于高电平状态。
如果让所有列线处于高电平那么键按下与否不会引起行线电平的状态变化,始终是高电平,所以,让所有列线处于高电平是没法识别出按键的。
现在反过来,让所有列线处于低电平,很明显,按下的键所在行电平将也被置为低电平,根据此变化,便能判定该行一定有键被按下。
但我们还不能确定是这一行的哪个键被按下。
所以,为了进一步判定到底是哪—列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线处于高电平。
当第1 列为低电平,其余各列为高电平时,因为是键3 被按下,所以第1 行仍处于高电平状态;当第2 列为低电平,其余各列为高电平时,同样我们会发现第1 行仍处于高电平状态,直到让第4 列为低电平,其余各列为高电平时,因为是3 号键被按下,所以第1 行的高电平转换到第4 列所处的低电平,据此,我们确信第1 行第4 列交叉点处的按键即3 号键被按下。
5、4×4键盘矩阵按键实验一、实验目的及要求键盘实质上是一组按键开关的集合。
通常,键盘开关利用了机械触点的合、断作用。
键的闭合与否,反映在行线输出电压上就是呈高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,反之也可。
通过对行线电平高低状态的检测,便可确认按键按下与否。
为了确保CPU对一次按键动作只确认一次按键有效,还必须消除抖动。
当按键较多时会占用更多的控制器端口,为减少对端口的占用,可以使用行列式键盘接口,本实验中采用的4×4键盘矩阵可以大大减少对单片机的端口占用,但识别按键的代码比独立按键的代码要复杂一些。
在识别按键时使用了不同的扫描程序代码,程序运行时LED灯组会显示相应按键的键值0~15的二进制数。
本实验中P2端口低4位连接是列线,高4位连接的是行线。
二、实验原理(图)三、实验设备(环境):1、电脑一台2、STC-ISP(V6.85I)烧写应用程序3、Keil应用程序四、实验内容(算法、程序、步骤和方法):#include<STC15F2K60S2.h> //此文件中定义了STC15系列的一些特殊功能寄存器#include"intrins.h"#define uint unsigned int#define uchar unsigned charuchar code dsy_code[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0 F,0xff};uchar Pre_keyno=16,keyno=16;void delayMS(char x){uchar i;while(x--)for(i=0;i<120;i++) ;}void keys_scan(){uchar tmp;P2=0x0f;delayMS(5);tmp=P2^0x0f;switch(tmp){case 1:keyno=0;break;case 2:keyno=1;break;case 4:keyno=2;break;case 8:keyno=3;break;default:keyno=16;}P2=0xf0;delayMS(5);tmp=P2>>4^0x0f;switch(tmp){case 1:keyno+=0;break;case 2:keyno+=4;break;case 4:keyno+=8;break;case 8:keyno+=12;break;}}main(){P0=0x00;while(1){P2=0xf0;if(P2!=0xf0)keys_scan();if(Pre_keyno!=keyno){P0=~dsy_code[keyno];Pre_keyno=keyno;}delayMS(50);}}五、实验结论(结果):本实验实现了XXX功能,核心算法采用了XXX的方式,达到了预期目的。
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为0111 0111,即0X77。
当5键按下时,行线X1和列线Y1为低电平,其余行列线为高电平,于是可得到5键的位置码Y0Y1Y2Y3X0X1X2X3为1011 1011,即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 灯。
矩阵式键盘的结构及工作原理矩阵式键盘的结构与工作原理:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
具体的识别及编程方法如下所述。
矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下介绍一种“行扫描法”。
行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
下面给出一个具体的例子:图仍如上所示。
8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。
矩阵键盘原理
矩阵键盘是一种常见的电子设备输入方式,它采用了特殊的矩阵排列方式来实现按键的检测和输入功能。
矩阵键盘由一组按键(通常是按钮或开关)和一个矩阵电路组成。
按键按下时,通过矩阵电路将相应的信号发送到微控制器或其它输入设备,从而完成按键输入的操作。
矩阵键盘使用了行、列的交叉排列方式,将多个按键组织成一个矩阵状的结构。
每一行和每一列都连接到矩阵电路中的引脚。
当按键按下时,通过按下的行和列所在的引脚的连接,电流可以流过相应的按键,使得微控制器能够检测到按键按下的信号。
矩阵键盘的原理是利用了按键形成的矩阵结构的特点,通过行和列的扫描方式,实现简明高效的按键检测。
常用的实现方式是使用多路开关电路来连接按键和引脚,使得每个按键的状态可以被准确地检测到。
在矩阵键盘的工作过程中,微控制器通过逐行或逐列扫描的方式检测按键的状态。
当检测到按键按下时,微控制器会在相应的引脚上读取到低电平信号,从而确定按键被按下的位置。
矩阵键盘常用于计算机、电子设备以及各种控制系统中,它在输入效率和使用成本方面都有一定的优势。
通过合理设计矩阵的大小和按键的布局,可以满足不同应用场景的需求。
总体来说,矩阵键盘是一种可靠、经济且比较常见的输入方式。
矩阵键盘工作原理1.按键扫描:矩阵键盘是由多个按键组成的,这些按键被排列成一个矩阵的形式。
在进行按键扫描时,会依次逐行或逐列地检测按键的状态,看是否有按键被按下。
通常,每行和每列都会有一个针脚来连接按键。
当按下一个按键时,该按键所在的行和列之间就会出现电性连通,形成一个按键矩阵电路。
2.按键编码:在按键扫描中,通过检测按键的行列连通状态可以确定哪个具体的按键被按下。
然而,矩阵键盘的针脚数量有限,无法通过直接连接给每一个按键独立编码的方式来实现,因此需要对按键信号进行编码。
一种常用的编码方式是使用行列编码器。
行列编码器通过感知具体的按键被按下的行和列连通状态来判断该按键的位置,并将该按键位置信息转化为一个对应的码值。
这个码值可以被传递给设备控制器或处理器,进而被进一步处理。
行列编码器通常通过矩阵按键的行列针脚输入来判断按键连通状态,然后将结果输出给设备控制器或处理器。
在实际应用中,矩阵键盘一般采用扫描式工作方式,即按键的行和列依次进行扫描。
具体工作步骤如下:1.首先,设备控制器或处理器会向矩阵键盘的行线输出一个低电平信号,同时将列线设置为输入状态。
2.然后,设备控制器或处理器会逐列检测按键的状态。
当有按键被按下时,该行和列之间会有电性连通,此时检测到的列的状态会改变。
设备控制器或处理器会将该连通的行列位置信息传递给行列编码器进行编码。
3.接下来,设备控制器或处理器会依次递增行的编号,重复上述步骤进行按键扫描,并实时更新按键状态信息,直到按键扫描完成。
总结起来,矩阵键盘的工作原理即通过扫描按键的行和列连通状态来检测按键是否被按下,然后通过行列编码器将按键位置信息编码为一个码值,最后将该码值传递给设备控制器或处理器进行处理。
通过这样的工作原理,矩阵键盘可以实现多个按键的同时检测和编码,为用户提供方便、高效的输入方式。
应用电子专业4×4矩阵键盘控制LED原理及软硬件设计、仿真调试毕业论文目录1 引言 (1)2 4×4矩阵键盘控制LED工作原理及软硬件设计、仿真调试 (2)2.1 4×4矩阵式键盘识别显示系统概述 (2)2.2 4×4矩阵式键盘原理 (3)2.3 4×4矩阵式键盘控制LED显示方法 (4)2.3.1数码管动态扫描显示电路 (4)2.3.2 8位数码管显示程序的编程方法 (5)2.3.3任务说明 (6)2.3.4原理图绘制说明 (6)2.4电路设计及电路图 (8)2.4.1 4×4矩阵式键盘软件编程 (9)2.5 4×4矩阵式键盘软件仿真调试分析 (14)2.5.1Proteus仿真说明 (14)3结论 (19)4谢词 (20)5参考文献 (21)一引言本实验是在基于PROTUES平台下,运用 80C51芯片编写程序设计实现的矩阵式键盘。
通过对矩阵键盘的硬件电路的设计及对其进行程序汇编和运行,通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的识别。
用单片机的并行P1口连接4*4矩阵键盘,并以单片机的P1.0-P1.3口作键盘输入的列线,以单片机的P1.4-P1.7口作为键盘输入的行线,然后用P0.0-P0.6作输出线,通过电阻在显示器上显示不同的符号按键“0-F”[1]。
在硬件电路的基础上加上软件程序的控制来设计实现。
矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
矩阵式键盘又称行列键盘,它是用N条I/O线作为行线,N条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。
矩阵键盘工作原理
矩阵键盘是一种现代的键盘技术,它是一种利用矩阵形式实现的复杂电路技术。
矩阵键盘的工作原理是,当按下某个按键时,将按键所在行和列的信号连接起来,并通过控制器来识别按键的位置,从而实现对按键的控制。
矩阵键盘的电路原理是,它将每行的按键之间连接在一起,每列的按键之间连接在一起,当按下某个按键时,将按键所在行和列的信号连接起来,这样,控制器就可以识别到按键的位置。
由于每行和每列的按键都是相互独立的,因此按键的控制是非常精确的。
矩阵键盘的优点是,它可以有效减少键盘的接口数量,减少电路板上的接口,提高键盘的密度,提高按键的可靠性,并且可以实现多功能按键。
它的缺点是,键盘的故障率较高,如果键盘中的某个按键出现故障,整个键盘都会受到影响。
总之,矩阵键盘是一种先进的键盘技术,它的工作原理是将每行的按键之间连接在一起,每列的按键之间连接在一起,通过控制器识别按键的位置,从而实现对按键的控制。
它具有节省接口、提高可靠性的优点,但是由于故障率较高,它的使用也存在一定的风险。
矩阵式键盘工作原理
矩阵式键盘的工作原理是基于矩阵电路的设计。
该键盘由一组键开关组成,这些键开关呈现出行和列的网格状布局。
每个键开关都连接到一个行列交叉点。
在键盘上按下某个按键时,该按键对应的行列交叉点位置会发生变化。
这种变化可以通过键盘控制器或芯片中的扫描电路进行检测。
扫描电路会按顺序扫描每个行和列的交叉点,检测到键按下的时候会产生一个电信号。
当键盘的控制器检测到有按键按下时,它会将该按键的信息发送到计算机。
计算机接收到按键信息后,会根据键盘映射表将按键转换为对应的字符或功能。
这样,用户通过按下键盘上的按键,就能够输入字符或执行特定的功能。
整个矩阵式键盘的工作原理可以归纳为以下几个步骤:
1. 初始化:键盘控制器配置为扫描矩阵键盘。
2. 扫描:控制器按顺序扫描每个行和列的交叉点,检测到按键按下的时候产生一个电信号。
3. 检测:键盘控制器检测到按键按下的电信号后,将其转换为对应的按键信息。
4. 传输:键盘控制器将按键信息传输给计算机。
5. 转换:计算机根据键盘映射表将按键信息转换为对应的字符或功能。
6. 执行:计算机执行输入的字符或功能。
通过这样的工作原理,用户可以通过按下矩阵式键盘上的按键,实现对计算机的输入操作。
4×4矩阵键盘的工作原理与编程
51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。
一、硬件工作原理的简单介绍
该实验使用的8位数码管显示电路和4×4矩阵键盘电路。
现将这二部分的电路工作原理进行简单的介绍:
1、4×4矩阵键盘的工作原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
图1为矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。
图1矩阵键盘电路
图2按键排列
2、数码管动态扫描显示电路
在ME300B开发系统中,采用了8位数码管动态扫描显示。
它将所有数码管的8个段线相应地并接在一起,并接到AT89S51的P0口,由P0口控制字段输出。
而各位数码管的共阳极由AT89S51的P2口控制Q20-Q27来实现8位数码管的位输出控制。
这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。
即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
图3数码管电路
数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。
在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。
见图3
二、演示程序的编程方法
1、4×4矩阵键盘的编程方法:
1.1、先读取键盘的状态,得到按键的特征编码。
先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。
再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。
将两次读取结果组合起来就可以得到当前按键的特征编码。
使用上述方法我们得到16个键的特征编码。
举例说明如何得到按键的特征编码:
假设“1”键被按下,找其按键的特征编码。
从P1口的高四位输出低电平,即P1.4-P1.7为输出口。
低四位输出高电平,即P1.0-P1.3为输入口。
读P1口的低四位状态为“1101”,其值为“0DH”。
再从P1口的高四位输出高电平,即P1.4-P1.7为输入口。
低四位输出低电平,即P10-P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。
将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。
用同样的方法可以得到其它15个按键的特征编码。
1.2、根据按键的特征编码,查表得到按键的顺序编码。
将用上述方法得到的16个按键的特征编码按图2按键排列的顺序排成一张特征编码与顺序编码的对应关系表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它所在的位置就是对应的顺序编码。
1.3、矩阵键盘键值查找程序的具体编程
这个演示程序的主要功能有:
1、识别键盘有无按键按下,若无键按下返回。
2、如果有键按下,找出具体的按键值(顺序码)。
三、演示程序的功能
当你按下矩阵键盘中的任何一个键,蜂鸣器响一声,并在数码管上显示相应的键值。
图4为ME300B开发系统的实际演示图片。
图4ME300B开发系统显示键值“E”
编程的具体细节请参阅ME300B光盘中的数码管显示键值演示程序。