用6个IO口实现的5×5按键矩阵的原理图

合集下载

用6个IO口实现的5×5按键矩阵的原理图

用6个IO口实现的5×5按键矩阵的原理图

键盘键盘输入作为最常用的输入设备仍有其不可替代的作用。

下面首先对传统键盘作一个简单的介绍。

(1) 传统键盘的介绍键盘的结构通常有两种形式:线性键盘和矩阵键盘。

在不同的场合下,这两种键盘均得到了广泛的应用。

线性键盘由若干个独立的按键组成,每个按键的一端与微机的一个I/O口相连。

有多少个键就要有多少根连线与微机的I/O口相连,因此,只适用于按键少的场合。

矩阵键盘的按键按N行M列排列,每个按键占据行列的一个交点,需要的I /O口数目是N+M,容许的最大按键数是N×M。

显然,矩阵键盘可以减少与微机接口的连线数,简化结构,是一般微机常用的键盘结构。

根据矩阵键盘的识键和译键方法的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。

① 非编码键盘非编码键盘主要用软件的方法识键和译键。

根据扫描方法的不同,可以分为行扫描法、列扫描法和反转法3种。

② 编码键盘编码键盘主要用硬件来实现键的扫描和识别,通常使用8279专用接口芯片,在硬件上要求较高。

(2) 新型键盘的硬件和软件实现有些特殊情况下,在组成一个最小的单片机系统的过程中,由于通用的I/O 口有限,而又需要大量的按键输入,这就要求一种新的键盘结构,即用尽量少的I/O口实现尽可能多的键盘输入。

经过分析,实际上用N+1个I/O口,辅以适当的接口电路,是可以实现N×N个按键的。

现以6个端口实现5×5的按键为例来叙述。

如图1.3所示为用6个I/O口来实现25个按键的示意图。

图1.3 用6个I/O口实现的5×5按键矩阵的示意图具体的物理实现电路如图1.4所示。

由图1.3和图1.4可见,硬件部分分为两块:一块是普通键盘矩阵,另外一块是中断和接口电路,主要由相应数目的二极管和电阻组成。

具体对6个I/O口的情况,实现5×5的按键矩阵的中断和接口电路(图1.4)共需要10只二极管、12只电阻和1只三极管。

10只二极管按其在电路中所起的作用可分为两组:第一组包括D6、D7、D8、D9和D10,用于保证按键信息的单一流向;第二组包括D1、D2、D3、D4和D5,它们在电路上对NPN三极管的基极构成“或”的逻辑关系,对单片机进行初始化。

【Easy CPLD570】Verilog实现4x4矩阵按键检测

【Easy CPLD570】Verilog实现4x4矩阵按键检测

Verilog实现4x4矩阵按键检测1 原理图4x4的矩阵按键,8个IO,检测原理是IO63、66、67、68作为输出信号,轮流赋值高电平,IO59、60、61、62作为输入信号,检测对应的按键按下。

比如,在IO68赋值高电平时,检测到IO59信号为高电平,则表示按键K1被按下。

拨码开关用于测试。

2 CPLD代码module key_array (clk_24m,reset_n,Hline, //输出4bit按键赋高电平信号。

Vline, //输入4bit按键检测信号。

ledline, //测试使用LED点灯信号switch //测试使用按键表现选择信号,因只有8个LED,而按键有16个,通过此信号来选择是表现K1-K8,还是K9-K16。

);input wire clk_24m;input wire reset_n;output wire [3:0] Hline;input wire [3:0] Vline;output reg [7:0] ledline;input wire switch;/****************************************************************************** 24M时钟分频,用于内部控制及计数等。

******************************************************************************/ reg [14:0] count_div1;wire condition_732; //732 Hz时钟信号。

always @ (posedge clk_24m or negedge reset_n)beginif(reset_n == 1'b0)count_div1 <= 15'h0000;elsecount_div1 <= count_div1 + 15'h0001;end/****************************************************************************** condition_732:732Hz时钟信号,高电平持续一个24MHz时钟周期,其余时间为低电平。

4×5矩阵键盘驱动程序

4×5矩阵键盘驱动程序

4×5矩阵键盘驱动程序一、工作原理及接口电路4×5矩阵键盘有4条列线,5条行线共20个按键。

每个按键对应不同键值,键盘扫描采用外部中断扫描方式,本系统中键盘为无源结构,键盘工作时不依靠任何外部电源。

4×5矩阵键盘结构图如图2-10 所示。

图2-10 4×5矩阵键盘结构图1)4×5矩阵键盘结构及按键抖动消除当键盘中按键数量较多时为减少I/O口的占用,通常将按键排列成矩阵形式,如图2-12所示。

在矩阵式键盘中,每条行线和列线在交叉处不直接连通,而是通过一个机械弹性开关加以连接。

这样5条列线(R0~R4)和4条行线(L0~L3)就可以构成20个按键的矩阵键盘。

键盘采用了无源结构,工作是不依靠任何外部电源。

由于机械弹性开关的机械触点的弹性作用,一个按键开关在闭合时并不会马上稳定的闭合,在断开时也不会马上断开,因而机械开关在闭合及断开瞬间均伴有一连串的抖动,如图2-11所示。

图2-11 按键时的抖动抖动的时间长短由按键开关机械特性及按键的人为因素决定,一般为5ms~20ms。

按键抖动如果处理不当会引起一次按键被误处理多次,所以消除抖动是必要的。

消除抖动的有硬件处理和软件处理两种方法。

当按键较多一般采用软件消抖方式。

软件消抖原理为当检测出按键闭合后执行一个延时程序(产生5ms~20ms的延时),待前沿抖动消失后再次检测按键的状态,如果按键仍保持闭合状态则可确认为有键按下。

当检测到按键释放并执行延时程序,待后沿抖动消失后才转入按键的处理程序。

1)矩阵键盘的工作原理从4×5矩阵键盘的4条列线和5条行线分别引出9条端线接于单片机的9个I/O口,由于键盘采用了无源结构所以行列线的电平由单片机I/O口的电平决定。

进入按键处理程序后先使4条列线全为低电平,5条行线全为高电平,为读行线状态做准备,没有按键时这种状态不会被改变。

当键盘上的某个按键闭合时,则该键所对应的行线和列线被短路。

5IO实现5x5按键扫描

5IO实现5x5按键扫描

---------------------------------------------------------------最新资料推荐------------------------------------------------------5IO实现5x5按键扫描用 N 个 IO 口实现 N*N 个按键 201 0-09-1 3 1 9:04:1 2|分类:51 单片机 | 标签:键盘扫描 |字号订阅前不久在一个无线控制项目中要用到较多的按键,为了控制设备的小巧,用了一个 1 6 脚的单片机,将其他外围接上后发现 IO 口不够用了。

在群聊时有人提到用 2 个 IO 口实现 4个按键,下面是接法接法 1 接法 2 于是将其进行改造,有了下面的接法以下是扫描程序头文件名:key.h #ifndef __key_H__ #define __key_H__ /*********键盘接口**********/ sbit L1 = P1 ; sbit L2 = P1 ; sbit L3 =P1 ; sbit L4 = P1 ; sbit L5 = P1 ; unsigned char key; //键值 void delay () //延时 5ms,作去抖动用 { unsignedchar a,b; for(b = 1 9;b 0;b--) for(a = 1 30;a0;a--); } unsigned char keyscan () //扫描程序,返回键盘编号 { /****依次将 Ln 置 1 ,检测其他行****/ L2 = L3 = L4 =L5 = 1 ;L1 = 0; if(L2==0) { delay (); if(L2==0){ L1 = 1 ; //释放人工置低的线 if(L2==0) key =22; else key = 1 ; } } if(L3==0) { delay ();1 / 3if(L3==0) { L1 = 1 ; if(L3==0) key = 23; else key = 2; } } if(L4==0) { delay (); if(L4==0) { L1 = 1 ; if(L4==0) key = 24; else key =3; } } if(L5==0) { delay (); if(L5==0) { L1= 1 ; if(L5==0) key = 25; else key = 4; } }L1 = L3 = L4 = L5 = 1 ;L2 = 0; if(L1 ==0) { delay ();if(L1 ==0) { L2 = 1 ; if(L1 ==0) key = 21 ; else key = 20; } } if(L3==0) { delay (); if(L3==0) { L2 = 1 ; if(L3==0) key = 23; else key =5; } } if(L4==0) { delay (); if(L4==0) { L2 =1 ; if(L4==0) key = 24; else key = 6; } }if(L5==0) { delay (); if(L5==0) { L2 = 1 ; if(L5==0) key = 25; else key = 7; } } L1 = L2= L4 = L5 = 1 ;L3 = 0; if(L1 ==0) { delay (); if(L1 ==0) { L3 = 1 ; if(L1 ==0) key = 21 ; else key =1 8; } } if(L2==0) { delay (); if(L2==0) { L3= 1 ; if(L2==0) key = 22; else key = 1 9; } }if(L4==0) { delay (); if(L4==0) { L3 = 1 ; if(L4==0) key = 24; else key = 8; } } if(L5==0) { delay (); if(L5==0) { L3 = 1 ; if(L5==0) key = 25; else key = 9; } } L1 = L2 = L3 = L5 = 1 ;L4= 0; if(L1 ==0) { delay (); if(L1 ==0) { L4 = 1 ;---------------------------------------------------------------最新资料推荐------------------------------------------------------if(L1 ==0) key = 21 ; else key = 1 5; } }if(L2==0) { delay (); if(L2==0) { L4 = 1 ; if(L2==0) key = 22; else key = 1 6; } }if(L3==0) { delay (); if(L3==0) { L4 = 1 ; if(L3==0) key = 23; else key = 1 7; } }if(L5==0) { delay (); if(L5==0) { L4 = 1 ; if(L5==0) key = 25; else key = 1 0; } } L1 =L2 = L3 = L4 = 1 ;L5 = 0; if(L1 ==0) { delay (); if(L1==0) { L5 = 1 ; if(L1 ==0) key = 21 ; else key = 1 1 ; } } if(L2==0) { delay (); if(L2==0) { L5 = 1 ; if(L2==0) key = 22; else key = 12; } } if(L3==0) { delay (); if(L3==0) { L5 =1 ; if(L3==0) key = 23; else key = 1 3; } }if(L4==0) { delay (); if(L4==0) { L5 = 1 ; if(L4==0) key = 24; else key = 1 4; } } return key; //返回键的编号 } #endif3 / 3。

51单片机按键电路

51单片机按键电路

51单片机键盘接口电路(含源程序)键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。

一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

按钮开关的抖动问题组成键盘的按钮有触点式和非触点式两种,单片机中应用的一般是由机械触点组成的。

在下图中,当开&lt;键盘结构图>图1图2关S未被按下时,P1。

0输入为高电平,S闭合后,P1。

0输入为低电平。

由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,P1。

0输入端的波形如图2所示。

这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。

前面我们讲到中断时曾有个问题,就是说按钮有时灵,有时不灵,其实就是这个原因,你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。

为使CPU能正确地读出P1口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:硬件办法和软件办法。

单片机中常用软件法,因此,对于硬件办法我们不介绍。

软件法其实很简单,就是在单片机获得P1。

0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。

0口,如果仍为低,说明S1的确按下了,这实际上是避开了按钮按下时的抖动时间。

而在检测到按钮释放后(P1。

0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。

不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。

当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。

5位阵列乘法器

5位阵列乘法器

5位阵列乘法器一、简介五位阵列乘法器是一种常见的数字电路,用于实现两个五位二进制数的乘法运算。

该乘法器采用了阵列的结构,通过并联和串联多个基本电路单元,可以进行高效的乘法运算。

二、原理五位阵列乘法器的原理基于二进制乘法运算规则。

在二进制乘法中,每一位上的数相乘得到一个部分积,最后将所有部分积相加即可得到最终结果。

例如,对于5位二进制数A和B:A = a4 a3 a2 a1 a0B = b4 b3 b2 b1 b0其部分积P(i,j)为:P(i,j) = ai bj (i+j)其中i和j表示A和B中对应位的位置。

三、电路结构五位阵列乘法器由多个基本电路单元组成,包括与门、异或门、全加器等。

这些单元按照一定的规律排列组合形成了一个阵列结构。

具体来说,该电路包括以下几个部分:1.输入端:包括两个5位二进制数A和B。

2.预处理模块:将输入信号转换成适合计算的形式。

3.主要计算模块:采用阵列结构进行乘法运算。

4.后处理模块:将计算结果转换成正确的形式并输出。

四、电路设计五位阵列乘法器的电路设计需要考虑多个因素,包括电路结构、信号处理、时序控制等。

以下是一个基于Verilog语言的五位阵列乘法器电路设计示例:1.输入端:module multi5 (A, B, P);input [4:0] A, B;output [9:0] P;2.预处理模块:wire [9:0] AB[4:0], BB[4:0];assign AB[0] = {5'b0, A};assign BB[0] = {5'b0, B};genvar i;for (i = 1; i < 5; i = i + 1) beginassign AB[i] = {AB[i-1][8:0], 1'b0};assign BB[i] = {BB[i-1][8:0], 1'b0};end3.主要计算模块:wire [9:0] P[4:0];genvar i, j;for (i = 0; i < 5; i = i + 1) beginfor (j = 0; j < 5; j = j + 1) beginif ((i+j) <= 8) beginand #(10) and_gate (.a(AB[i]), .b(BB[j]), .p(P[i+j]));endendend4.后处理模块:assign P[9] = P[8][0];assign P[8] = {P[8][1:0], P[7][0]};assign P[7:0] = {P[7:1], 1'b0};assign P = P[9:0];endmodule五、应用场景五位阵列乘法器广泛应用于数字信号处理、通信系统、图像处理等领域。

微机接口自测题(最新版)

微机接口自测题(最新版)

微机接口技术自测题1一、单选题1.数据的输入输出指的是()进行数据交换。

A.CPU与存储器B.CPU与外设C.存储器与外设D.内存与外存2.在给接口编址的过程中,如果有5根地址线没有参加译码,则可能产生()个重叠地址。

A.52B.5C.25D.103.8086在执行IN AL,DX指令时,DX寄存器的内容输出到()上。

A.数据总线B.地址总线C.存储器D.寄存器4.ISA总线的数据宽度为()位。

A.64 B.32C.16 D.85.8086中断向量表的大小为()字节。

A.256 B.1024C.2k D.64k6.软中断INT n(n=10H~FFH)的优先级排列原则是()。

A.n值愈小级别越高B.无优先级别C.n值愈大级别越高D.随应用而定7.8255A工作在方式2(双向选通I/O)时,()。

A.只能作输入接口B.只能作输出接口C.作输入口或作输出口D.同时可作输入口、输出口8.DMAC8237A接口芯片的端口个数为()。

A.16 B.8C.4 D.29.PC机中两片级联的中断控制器8259A实际可管理的外部中断源至多有()个。

A.13 B.14C.15 D.1610.当外设的输出信号为模拟电压时,需在输入通道中设计一个()。

A.A/D转换器B.D/A转换器C.定时器/计数器D.传感器11.使多路模拟信号共用一个A/D转换器时,需使用()。

A.采样保持器B.多路模拟开关C.传感器D.滤波电路12.用8255的PA口和PC口的低4位接一个键盘阵列,最多可识别()个按键。

A.6 B.8C.16 D.3213.A/D转换器对信号的转换过程所包括的一般步骤依次是()。

A.量化,采样,保持和编码B.采样,保持,量化和编码C.采样,保持,编码和量化D.采样,量化,保持和编码14.串行通信适用于()微机间的数据传送。

A.不同类型B.同类型C.近距离D.远距离15.两台微机间进行串行通信时,波特率应设置为()。

单片机按键电路的原理

单片机按键电路的原理

单片机按键电路的原理单片机按键电路是通过连接按键和单片机的电路,实现按键输入功能。

按键电路主要由按键、上拉电阻(或下拉电阻)和单片机的IO口组成。

下面详细介绍按键电路的原理。

按键通常是一个开关,也称为按钮或键盘。

按键电路可以分为正常闭合型和正常断开型两种类型。

正常闭合型按键在未按下时闭合,按下时打开;正常断开型按键则相反。

我们首先以正常闭合型按键为例进行说明。

按键电路的核心部分是一个按键元件。

按键元件通常由固定触点和可移动触点组成,当按下按键时,固定触点和可移动触点之间会发生电子触点闭合或断开的状态变化。

按键元件的两端分别连接到电路的正极和负极。

为了确保按键电路的稳定性,通常会在按键两端添加一个上拉电阻。

上拉电阻的一端连接到电源的正极,另一端连接到按键的一个端口,起到拉高按键端口电平的作用。

当按键未按下时,上拉电阻会将按键端口拉高为高电平状态。

这样在按键未按下时,按键端口的电平就稳定在高电平状态上。

单片机的IO口是可以设置为输入模式和输出模式的。

当我们将IO口设置为输入模式时,可以检测到与该IO口连接的外部电路中的信号变化。

为了检测到按键的状态变化,在按键端口和单片机IO口之间通常还会添加一个电容。

这个电容的作用是消除按键在按下和释放的瞬间可能产生的干扰信号,保证按键信号的稳定性。

当按键未按下时,单片机IO口可以通过读取按键端口的电平状态来判断按键的状态,如果IO口读取到的电平为高电平,则表示按键未按下;如果IO口读取到的电平为低电平,则表示按键被按下。

当按键被按下时,就可以在程序中根据按键的状态进行相应的处理。

需要注意的是,单片机IO口只能接受一个电平信号的输入,为了检测到多个按键的状态变化,可以采用矩阵式按键电路。

矩阵式按键电路通过将多个按键连接在一个按键矩阵上,然后将按键矩阵的行线和列线连接到单片机的IO口上,这样通过扫描行线和读取列线的电平状态,就可以检测到多个按键的状态变化。

以上就是单片机按键电路的原理。

4×4矩阵按键模拟编程及控制仿真(汇编+C语言)

4×4矩阵按键模拟编程及控制仿真(汇编+C语言)

4×4矩阵按键模拟编程及控制仿真(汇编+C语言)4×4矩阵按键模拟编程及控制仿真(中级实验)实验介绍:利用单片机控制一组矩阵按键(4×4)以及一个数码管,当按键按下后,数码管会显示按下按键的序号。

共16个按键,序号从0开始,一直到F。

(矩阵按键较独立按键更节省I/O口,例如在本例中,共有16个按键,仅仅需要8个I/O 口,而采用独立按键则需要16个I/O 口。

在I/O口使用较多,且按键较多的情况下可以采用。

但是矩阵按键的程序要比独立按键复杂。

)实验目的:通过本次实验,理解矩阵按键的结构以及工作原理。

能够根据使用需求,独立设计矩阵按键的电路图,能够编程实现对矩阵按键的控制。

通过与独立按键的对比,理解矩阵按键与独立按键的硬件及软件的区别。

通过对比的方式,理解各自的优缺点。

仿真原理图:使用Proteus仿真软件搭建仿真原理图如下图所示。

图1图2使用仿真软件Proteus搭建的原理图参考如图1所示。

(注意事项:一般情况下,采用矩阵按键的形式来控制单片机时,按键数量较多,所以在摆放按键的时候要成行成列的防止,一方面是比较美观,另外一方面是便于编程控制。

另外矩阵按键电路比较复杂,电路连线往往比较多,为了让电路看起来更加简洁,可以采用“Terminal Label”的方式进行连线。

如图2所示,电路连接简化很多。

)编程思路:对于独立按键,编程过程较为简单,按照顺序逐个编写就行。

主要分为两种编程控制方法:按键扫描的方式以及中断的方式。

按键扫描的方式需要实时扫描每个按键是否按下。

编程时,首先通过单片机实时判断第一个按键是否按下,如果按下就执行相应的程序。

只要编制出来第一个按键的程序,其他按键的程序基本相同,只要稍作修改即可。

也可以使用中断的方式实现,这种方式一般需要配合外部的电路来实现。

掌握外部中断控制的读者,可以使用。

矩阵按键的编程思路一般为:实时判断按键的按下情况,首先将连接每一行按键的单片机引脚设置为低电平(每一列按键的单片机引脚设置为输入状态即高电平),判断哪一列按键有按下。

第5章 IO端口 矩阵键盘

第5章 IO端口 矩阵键盘

char scankey() { char key4H=0,key4L=0; TRISC=0xF0; PORTC=0x00; NOP(); //asm("nop") NOP(); key4H=PORTC; key4H=key4H&0xF0; if(key4H!=0xF0) // key pressed { TRISC=0x0F; PORTC=0x00; NOP(); NOP(); key4L=PORTC; key4L=key4L&0x0F;
第5章 IO端口 矩阵键盘
1 为什么要使用矩阵键盘
2 理解矩阵键盘扫描原理
3 熟悉矩阵键盘编程
硬件电路
Vdd PIC 16F877
RC0 D0ຫໍສະໝຸດ 12 5 83 6 9
C D E
RC4 RC5 RC6
行线RC4-7
4 7
A
0
B
F
RC7
RC0 RC1 RC2 RC3 RC7 D7
列线RC3-0
保护电阻: 100Ω×8
软件设计思路
键盘矩阵电路的任务就是2条: ①检测是否有键按下; ②识别按键的“键值”。 采用“反转扫描法”可以同时完成两项任务: ①先让“行线”全部输出“0”,在列线上得到“列码”。 (如果有按键操作时,读入的列值必然至少有1个“0”)
②再将所获的列码从列线输出,获取“行码”。
③将得到4位行码与列码组合得到 “位置码”。
键盘电路
应当注意:所谓的“反转扫描法”实际上是利用处理器的 高速扫描与低速的按键操作所形成的“时间差”,从按键 按下开始到获取整个行值、列值时,按键实际上还没有松 开。
键盘电路
键盘位置码表
RC3~RC0(列码) 0x07 RC4 ≀ RC7 0xE0 0xD0 0xB0 0x70 1 4 7 A 0x0B 2 5 8 0 0x0D 3 6 9 B 0x0E C D E F

4 4 矩阵键盘工作原理

4 4 矩阵键盘工作原理

4 4 矩阵键盘工作原理
矩阵键盘是一种常见的输入设备,它通常用于计算机、手机等电子设备上。

其工作原理如下:
1. 矩阵排列:矩阵键盘由多行多列的按钮组成,形成一个矩阵结构。

每个按钮都有一个唯一的位置,行和列分别编号,以便识别用户按下的按钮。

2. 状态扫描:矩阵键盘使用一个扫描线(即行线)和一个检测线(即列线)来扫描按钮的状态。

扫描线一次只能激活一行按钮,而检测线会检测每一列的按钮状态。

通过激活不同的行和检测每一列的状态,可以确定用户按下的是哪个按钮。

3. 按钮编码:每个按钮被按下或释放时,状态会以电信号的形式传递给控制器。

这些状态信号经过编码后,被转换为可以识别的二进制数据。

4. 数据传输:编码后的数据会通过连接线路传输给计算机或其他设备,进行进一步的处理。

计算机通过解析接收到的数据,可以确定用户按下的具体按钮。

总结:矩阵键盘的工作原理是通过扫描行和检测列的方式,识别用户按下的按钮,并将其状态通过编码后传输给设备。

这样,设备可以根据接收到的数据来确定用户的输入。

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
#defineucharunsignedchar
sbitKey=P3;//按键
sbitLed=P1;//Led灯
voiddelay(uintz);
/********主函数********/
voidmain()。

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;

第6讲 矩阵式键盘设计

第6讲 矩阵式键盘设计

矩阵式键盘设计
软件去抖
在检测到有按键按下时
执行一个10ms左右( 执行一个10ms左右(具体 10ms左右 时间应视所使用的按键进 行调整)的延时程序后; 行调整)的延时程序后; 再确认该键电平是否仍保 持闭合状态电平, 持闭合状态电平,若仍保 持闭合状态电平, 持闭合状态电平,则确认 该键是处于闭合状态。 该键是处于闭合状态。
矩阵式键盘设计
矩阵式键盘电路
R1
10k
R2
10k
R3
10k
R4
10k
VCC GND
C1
30pF
X1
C2
30pF 19
C3
10uF
U1
XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
1. 2. 3. 4.
矩阵式键盘设计
求按键的键值
对键盘的列线进行扫描,P0.4~P0.7循环输出 对键盘的列线进行扫描,P0.4~P0.7循环输出 1110、1101、1011和0111, 次读P0 P0口 若低4 1110、1101、1011和0111,依次读P0口,若低4位 全为1 则断定该列上没有键按下; 全为1,则断定该列上没有键按下; 否则,该列上就有键按下,并且就是行线为0 否则,该列上就有键按下,并且就是行线为0,列 线为0的交叉点,行号和列号按公式: 线为0的交叉点,行号和列号按公式:rol*4+col 计算得到按下键的键值。 计算得到按下键的键值。 例如,P0.4~P0.7输出1101时 P0口的低四位读 输出1101 例如,P0.4~P0.7输出1101时,P0口的低四位读 入的值为1011,不全为1,就可以断定有键按下, 入的值为1011,不全为1 就可以断定有键按下, 1011 并且是第 交叉点的键。于是, 并且是第2行和第1列交叉点的键。于是,该键的 4+1=9。 键值= 键值=2×4+1=9。按照相同的方法可以得到所有键 的键值。 的键值。如:return(rol*4+col);

(完整版)单片机6位密码锁设计(汇编语言源程序配Proteus电路图)

(完整版)单片机6位密码锁设计(汇编语言源程序配Proteus电路图)

单片机6位密码锁设计(汇编语言源程序配Proteus电路图)硬件设计基于AT89C51为核心的单片机控制的电子密码锁设计。

本设计能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。

设计的电路框如图1。

图一电路的功能单元设计1.单片机AT89C51组成基本框图单片机引脚 介绍P0 AT89C51 CPU程序存储器 ROM并行接口串行接口 数据存储器 RAM中断系统定时器/计数器时钟电路 P3P1 P2TxD INT0 RxDINT1T0 T1外中断内中断2.单片机外围电路设计(1)单片机复位电路:采用按键手动复位方式中的电平复位方式,复位电平是通过使RST端经电阻与VCC电源接通而实现的。

(2)单片机时钟电路:AT89C51内部有时钟电路,需外接石英晶体和微调电容,本设计的晶振频率为11.0592MHz。

3.矩阵键盘的设计本设计中用到4*4的键盘。

键盘扫描方式,键盘的列线与P1口的低4位相接,行线与P1口的高3位相接。

首先使P1.0为低电平“0”,其余三根列线为高电平“1”,读行线状态。

如果行线都为高电平状态,则P1.0这列上没键按下,如果读出的行线不全为高电平状态,则为低电平的行线与P1.0相交的键处于闭合状态。

如果P1.0上没有键闭合,接着使P1.1为低电平,其余列线为高电平,用同样的方法检查P1.1这列上有没有按键闭合。

一直到使P1.3为低电平扫描完成。

这一过程称为一次扫描过程。

由于按键是利用机械触电的合、断原理,存在弹性的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使电压信号波动,为了保证CPU对键的稳定闭合仅作一次键输入处理,必须采用消除抖动影响。

本设计采用软件办法,在检测到有键按下时,执行一个延时程序后,确认该键是否保持闭合状态电平。

若仍保持闭合状态电平,则确认该键处于闭合状态,从而消除抖动影响。

若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理如表1。

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

键盘
键盘输入作为最常用的输入设备仍有其不可替代的作用。

下面首先对传统键盘作一个简单的介绍。

(1) 传统键盘的介绍
键盘的结构通常有两种形式:线性键盘和矩阵键盘。

在不同的场合下,这两种键盘均得到了广泛的应用。

线性键盘由若干个独立的按键组成,每个按键的一端与微机的一个I/O口相连。

有多少个键就要有多少根连线与微机的I/O口相连,因此,只适用于按键少的场合。

矩阵键盘的按键按N行M列排列,每个按键占据行列的一个交点,需要的I /O口数目是N+M,容许的最大按键数是N×M。

显然,矩阵键盘可以减少与微机接口的连线数,简化结构,是一般微机常用的键盘结构。

根据矩阵键盘的识键和译键方法的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。

① 非编码键盘
非编码键盘主要用软件的方法识键和译键。

根据扫描方法的不同,可以分为行扫描法、列扫描法和反转法3种。

② 编码键盘
编码键盘主要用硬件来实现键的扫描和识别,通常使用8279专用接口芯片,在硬件上要求较高。

(2) 新型键盘的硬件和软件实现
有些特殊情况下,在组成一个最小的单片机系统的过程中,由于通用的I/O 口有限,而又需要大量的按键输入,这就要求一种新的键盘结构,即用尽量少的I/O口实现尽可能多的键盘输入。

经过分析,实际上用N+1个I/O口,辅以适当的接口电路,是可以实现N×N个按键的。

现以6个端口实现5×5的按键为例来叙述。

如图1.3所示为用6个I/O口来实现25个按键的示意图。

图1.3 用6个I/O口实现的5×5按键矩阵的示意图
具体的物理实现电路如图1.4所示。

由图1.3和图1.4可见,硬件部分分为两块:一块是普通键盘矩阵,另外一块是中断和接口电路,主要由相应数目的二极管和电阻组成。

具体对6个I/O口的情况,实现5×5的按键矩阵的中断和接口电路(图1.4)共需要10只二极管、12只电阻和1只三极管。

10只二极管按其在电路中所起的作用可分为两组:第一组包括D6、D7、D8、D9和D10,用于保证按键信息的单一流向;第二组包括D1、D2、D3、D4和D5,它们在电路上对N
PN三极管的基极构成“或”的逻辑关系,对单片机进行初始化。

除了PORT6(要求其具有中断功能)以外,其余的I/O口均被置成高电平,这样当有键按下时,三极管的基极由低变高,三极管导通;集电极由高电平跳变成低电平,向单片机发出中断信号,从而启动键盘扫描程序。

按键的识别主要靠软件来实现,需要编写键盘扫描程序。

为了更好地说明键盘扫描的 过程,假设编号为S12的键(见图1.4)被按下,扫描程序已经启动,扫描的具体过程如表1.4所列。

图1.4 用6个I/O口实现的5×5按键矩阵的原理图
表1.4 键盘扫描过程
P1 P2 P3 P4 P5 P6 说明
OH I I I I I PORT1被置成高电平输出,其他端口作为输入H L L L L H H读入各端口的值,为100001,与编码表进行
比较,经判断没有键按下,继续下一步
I OH I I I I PORT2被置成高电平输出,其他端口作为输入L H H L L L PORT2和PORT3与S12相连,此时均为高电平,
读入各端口的值为011000,与编码表比较,可
以判断有键按下并且键值惟一
说明:P-PORT,O-输出,I-输入,H-高电平,L-低电平。

相关文档
最新文档