第10章行列式(矩阵式)键盘接口
- 格式:ppt
- 大小:5.00 MB
- 文档页数:82
矩阵键盘的工作原理矩阵键盘是一种常见的输入设备,它的工作原理是通过矩阵排列的按键和电路来实现输入信号的传输。
在我们日常生活中,矩阵键盘被广泛应用于计算机、手机、电子游戏机等设备中,它的工作原理对于我们了解和使用这些设备都至关重要。
矩阵键盘的工作原理主要包括按键输入、行列扫描和编码传输三个部分。
首先,当我们按下键盘上的某一个按键时,按键会闭合对应的电路,产生一个电信号。
这个电信号会被传送到键盘的控制电路中,进行处理和编码。
控制电路会根据按键的位置,将按键所在的行和列进行扫描,确定按键的具体位置。
然后,控制电路会将按键的位置信息转换成数字编码,通过数据线传输给计算机或其他设备,完成按键输入的过程。
矩阵键盘的按键排列采用了行列交叉的矩阵结构,这种结构可以大大减少按键和控制电路之间的连接线,使得键盘的布线更加简洁和紧凑。
在实际应用中,矩阵键盘的按键数量可以很大,但是由于采用了矩阵结构,所以只需要相对较少的引脚就可以完成对所有按键的扫描和编码,这样就大大降低了成本和复杂度。
值得一提的是,矩阵键盘的工作原理也决定了它的一些特点。
首先,由于采用了矩阵排列,所以在按下多个按键的情况下,可能会出现按键冲突的现象。
这是因为在矩阵键盘中,每一个按键都对应着一个唯一的行列交叉点,当同时按下多个按键时,就会出现多个交叉点闭合的情况,这就导致了按键冲突。
为了解决这个问题,矩阵键盘通常会采用一些消抖和排除冲突的算法,来确保按键输入的准确性和稳定性。
另外,矩阵键盘的工作原理也决定了它的扩展性和灵活性。
通过改变矩阵的行列排列方式,可以实现不同大小和形状的键盘设计,满足不同设备的需求。
同时,矩阵键盘的按键编码方式也可以根据实际情况进行定制,使得键盘可以适配不同的输入接口和通信协议。
总的来说,矩阵键盘的工作原理是通过矩阵排列的按键和电路来实现输入信号的传输。
它的工作原理决定了键盘的特点和应用范围,同时也为我们使用这些设备提供了便利和效率。
矩阵键盘的使用流程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.按键反应迟缓:可能是键盘连接出现问题,重新连接一次或者更换连接线尝试,或者检查计算机的处理器负载情况。
FPGA学习心得——矩阵键盘1、行列式键盘概述为了减少键盘与单片机接口时所占用I/O口线的数目,在键数较多时,通常都将键盘排列成行列矩阵式,行列式键盘又叫矩阵式键盘。
用带有I/O口的线组成行列结构,按键设置在行列的交点上。
例如用2*2的行列结构可以构成4个键的键盘,4*4的行列结构可以构成有16个键的键盘。
这样,当按键数量平方增长时,I/O口线只是线性增长,这样就可以节省I/O口线。
2、行列式键盘原理教研室已有薄膜矩阵键盘,其实物图如图所示。
其电路原理图如下图所示。
由行列式键盘的原理可以知道,要正确地完成按键输入工作必须有按键扫描电路产生keydrv3~keydrv0信号。
同时还必须有按键译码电路从keydrv3~keydrv0信号和keyin3~keyin0信号中译码出按键的键值。
此外,一般还需要一个按键发生标志信号用于和其他模块接口,通知其它模块键盘上有按键动作发生,并可以从键盘模块中读取按键键值。
由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟信号。
因此得到键盘接口电路的结构如图2所示。
图2 键盘接口电路结构图行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。
因此,为了解决这些问题,程序中使用不同的进程分别实现键盘扫描信号的产生、键盘去抖以及键盘的译码。
3、源程序[plain]view plaincopy1.----------------------------------------------------------------------------------2.-- Company:3.-- Engineer:4.--5.-- Create Date: 08:46:57 07/31/20126.-- Design Name:7.-- Module Name: MatrixKeyboard - Behavioral8.-- Project Name:9.-- Target Devices:10.-- Tool versions:11.-- Description:12.--13.-- Dependencies:14.--15.-- Revision:16.-- Revision 0.01 - File Created17.-- Additional Comments:18.--19.----------------------------------------------------------------------------------20.library IEEE;e IEEE.STD_LOGIC_1164.ALL;e IEEE.STD_LOGIC_ARITH.ALL;e IEEE.STD_LOGIC_UNSIGNED.ALL;24.25.---- Uncomment the following library declaration if instantiating26.---- any Xilinx primitives in this code.27.--library UNISIM;28.--use UNISIM.VComponents.all;29.30.entity MatrixKeyboard is31. Port ( Clk : in STD_LOGIC;32. Reset : in STD_LOGIC;33. KeyIn : in STD_LOGIC_VECTOR (3 downto 0);34. KeyScan : out STD_LOGIC_VECTOR (3 downto 0);35. LED : out STD_LOGIC_VECTOR (3 downto 0)36. );37.end MatrixKeyboard;38.39.architecture Behavioral of MatrixKeyboard is40.41.Signal Clk_scan : STD_LOGIC := '0';42.Signal Clk_5ms : STD_LOGIC := '0';43.Signal Clk_2ms : STD_LOGIC := '0';44.Signal Key_Scan : STD_LOGIC_VECTOR(3 downto 0);45.Signal Key_Decode : STD_LOGIC_VECTOR(7 downto 0);46.47.Type State_Key is(st_key1,st_key2,st_key3,st_key4);48.Signal Current_Key : State_Key := st_key1;49.50.Type State_Scan is(st_scan1,st_scan2,st_scan3,st_scan4);51.Signal Current_Scan : State_Scan := st_scan1;52.53.begin54.55. Proc_Clk_5ms : process(Clk)56. variable cnt_clk : integer range 0 to 250000 := 0;57. begin58. if(rising_edge(Clk)) then59. if(cnt_clk < 125000) then60. cnt_clk := cnt_clk + 1;61. Clk_scan <= '0';62. elsif(cnt_clk < 249999) then63. cnt_clk := cnt_clk + 1;64. Clk_scan <= '1';65. else66. cnt_clk := 0;67. end if;68. Clk_5ms <= Clk_scan;69. end if;70. end process Proc_Clk_5ms;71.72. Proc_Clk_2ms : process(Clk)73. variable cnt_clk : integer range 0 to 100000 := 0;74. begin75. if(rising_edge(Clk)) then76. if(cnt_clk < 50000) then77. cnt_clk := cnt_clk + 1;78. Clk_2ms <= '0';79. elsif(cnt_clk < 99999) then80. cnt_clk := cnt_clk + 1;81. Clk_2ms <= '1';82. else83. cnt_clk := 0;84. end if;85. end if;86. end process Proc_Clk_2ms;87.88.89. Proc_Scan:process(Clk_5ms)90. begin91. if(rising_edge(Clk_5ms)) then92. case Current_Scan is93. when st_scan1 =>94. Key_Scan <= "1110";95. Current_Scan <= st_scan2;96. when st_scan2 =>97. Key_Scan <= "1101";98. Current_Scan <= st_scan3;99. when st_scan3 =>100. Key_Scan <= "1011";101. Current_Scan <= st_scan4;102. when st_scan4 =>103. Key_Scan <= "0111";104. Current_Scan <= st_scan1;105. end case;106. end if;107.108. end process Proc_Scan;109.110. KeyScan <= Key_Scan;111. Key_Decode <= Key_Scan & Keyin;112.113. Proc_Keyboard:process(Clk_2ms,Reset)114. variable cnt_btn : integer range 0 to 50000 := 0;115. begin116. if(Reset = '1') then117. LED <= x"1";118. Current_Key <= st_key1;119. elsif(falling_edge(Clk_2ms)) then120. case Current_Key is121. when st_key1 => --Check whether any keys are p ressed122. if((Keyin and "1111") = "1111") then123. Current_Key <= st_key1;124. else125. Current_Key <= st_key2;126. end if;127. when st_key2 => --keys debouncing128. if((Keyin and "1111") = "1111") then129. Current_Key <= st_key1;130. else131. case Key_Decode is132. when "11101110" => LED <= "0001";133. when "11101101" => LED <= "0010";134. when "11101011" => LED <= "0011";135. when "11100111" => LED <= "1010";136. when "11011110" => LED <= "0100";137. when "11011101" => LED <= "0101";138. when "11011011" => LED <= "0110";139. when "11010111" => LED <= "1011";140. when "10111110" => LED <= "0111";141. when "10111101" => LED <= "1000";142. when "10111011" => LED <= "1001";143. when "10110111" => LED <= "1100";144. when "01111110" => LED <= "1110";145. when "01111101" => LED <= "0000";146. when "01111011" => LED <= "1111";147. when "01110111" => LED <= "1101";when others => null;148. end case;149. end if;150. Current_Key <= st_key3;151. when st_key3 => --Check whether the pressed keys a re released152. if((Keyin and "1111") /= "1111") then153. Current_Key <= st_key3;154. else155. Current_Key <= st_key4;156. end if;157. when st_key4 => --keys debouncing158. if((Keyin and "1111") /= "1111") then159. Current_Key <= st_key3;160. else161. LED <= x"0";162. Current_Key <= st_key1;163. end if;164. end case;165. end if;166. end process Proc_Keyboard;167.168.end Behavioral;169.薄膜键盘矩阵键盘4x4 ,单片机开发配件,机械手按键。
行列式矩阵键盘工作原理行列式矩阵键盘是一种常见的电子键盘输入设备,它的工作原理涉及到行列式和矩阵的相关知识。
在本文中,我们将详细介绍行列式矩阵键盘的工作原理。
一、行列式和矩阵的基本概念行列式是线性代数中的一种重要概念,它是一个由数按照一定规则排列成的方阵,并且可以通过一系列的运算得到一个标量值。
矩阵是由数按照一定规则排列成的矩形阵列,是线性代数中的另一个重要概念。
二、行列式矩阵键盘的结构和原理行列式矩阵键盘通常由多个按键组成,每个按键都与一个特定的数字或字符相关联。
按下某个按键时,键盘会发送一个信号给计算机,告诉它哪个按键被按下。
这个信号是通过行列式矩阵键盘的结构和原理实现的。
行列式矩阵键盘的结构通常由多行多列的按键组成,每个按键都有一个独特的行列位置。
键盘的每一行和每一列都与计算机的输入接口相连。
当按下某个按键时,该按键所在的行和列会形成一个连通电路,通过这个电路可以识别出按下的是哪个按键。
行列式矩阵键盘的工作原理是基于行列式和矩阵的特性。
通过设置每个按键的行列位置,可以将键盘的输入映射为一个矩阵。
每个按键的行列位置可以用一个数字来表示,这个数字就是矩阵中的一个元素。
当按下某个按键时,可以通过行列位置得到该按键的数字或字符,并将其发送给计算机。
三、行列式矩阵键盘的扫描过程行列式矩阵键盘的扫描过程是指键盘不断地检测按键的状态,以便及时响应用户的输入。
这个过程通常包括两个步骤:行扫描和列扫描。
行扫描是指逐行检测按键的状态。
键盘会依次选取每一行,并检测该行中的所有按键是否被按下。
如果有按键被按下,键盘会记录下该按键的行列位置,并将其发送给计算机。
如果没有按键被按下,键盘会继续进行下一行的扫描。
列扫描是指逐列检测按键的状态。
键盘会依次选取每一列,并检测该列中的所有按键是否被按下。
如果有按键被按下,键盘会记录下该按键的行列位置,并将其发送给计算机。
如果没有按键被按下,键盘会继续进行下一列的扫描。
通过不断地进行行扫描和列扫描,行列式矩阵键盘可以实时监测按键的状态,并将按下的按键发送给计算机进行处理。
矩阵键盘程序设计矩阵键盘程序设计概述矩阵键盘是一种常见的输入设备,常用于电子产品和计算机系统中。
它由多个按键组成,采用矩阵排列的方式连接到计算机系统中。
在本篇文章中,我们将讨论矩阵键盘的程序设计。
程序设计步骤步骤一:硬件连接,我们需要将矩阵键盘与计算机系统进行连接。
通常情况下,矩阵键盘的每一行和每一列都通过引脚与计算机系统中的GPIO(通用输入输出)引脚相连接。
步骤二:引脚控制接下来,我们需要使用程序控制GPIO引脚的输入输出状态。
对于矩阵键盘而言,我们通常会将一行的引脚设置为输出,将一列的引脚设置为输入,然后将输出引脚设置为高电平,输入引脚设置为上拉或下拉电阻。
步骤三:按键扫描在第二步的基础上,我们可以进行按键的扫描操作。
具体方法是,先将某一行的引脚设置为低电平,然后读取每一列的引脚状态。
如果某一列引脚为低电平,则表示该按键被按下。
步骤四:按键处理一旦我们检测到某个按键被按下,就可以执行相应的按键处理操作。
这可能包括记录按键信息、执行某些特定的功能或触发一些事件。
步骤五:循环扫描,我们需要将以上步骤放入一个循环中进行不断的扫描。
这样可以实现对整个矩阵键盘的实时检测和响应。
示例代码下面是一个简单的矩阵键盘程序设计的示例代码,使用C语言编写:cinclude <stdio.h>include <wiringPi.h>define ROWS 4define COLS 4int rows[ROWS] = { 2, 3, 4, 5 };int cols[COLS] = { 6, 7, 8, 9 };char keyMap[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'', '0', '', 'D'}};void init() {wiringPiSetup();for (int i = 0; i < ROWS; i++) {pinMode(rows[i], OUTPUT);digitalWrite(rows[i], HIGH);}for (int i = 0; i < COLS; i++) {pinMode(cols[i], INPUT);pullUpDnControl(cols[i], PUD_UP);}}char getKey() {while (1) {for (int i = 0; i < ROWS; i++) {digitalWrite(rows[i], LOW);for (int j = 0; j < COLS; j++) {if (digitalRead(cols[j]) == LOW) { return keyMap[i][j];}}digitalWrite(rows[i], HIGH);}}}int mn() {init();while (1) {char key = getKey(); printf(\。
矩阵式键盘实验报告矩阵键盘设计实验报告南京林业大学实验报告基于AT89C51单片机4x4矩阵键盘接口电路设计课程院系班级学号姓名指导老师机电一体化设计基础机械电子工程学院杨雨图2013年9月26日一、实验目的1、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
2、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
3、掌握利用Keil51软件对程序进行编译。
4、用Proteus软件绘制“矩阵键盘扫描”电路,并用测试程序进行仿真。
5、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
二、实验要求通过实训,学生应达到以下几方面的要求:素质要求1.以积极认真的态度对待本次实训,遵章守纪、团结协作。
2.善于发现数字电路中存在的问题、分析问题、解决问题,努力培养独立工作能力。
能力要求1.模拟电路的理论知识2.脉冲与数字电路的理念知识3.通过模拟、数字电路实验有一定的动手能力4.能熟练的编写8951单片机汇编程序5.能够熟练的运用仿真软件进行仿真三、实验工具1、软件:Proteus软件、keil51。
2、硬件:PC机,串口线,并口线,单片机开发板四、实验内容1、掌握并理解“矩阵键盘扫描”的原理及制作,了解各元器件的参数及格元器件的作用。
2、用keil51测试软件编写AT89C51单片机汇编程序3、用Proteus软件绘制“矩阵键盘扫描”电路原理图。
4、运用仿真软件对电路进行仿真。
五.实验基本步骤1、用Proteus绘制“矩阵键盘扫描”电路原理图。
2、编写程序使数码管显示当前闭合按键的键值。
3、利用Proteus软件的仿真功能对其进行仿真测试,观察数码管的显示状态和按键开关的对应关系。
4、用keil51软件编写程序,并生成HEX文件。
5、根据绘制“矩阵键盘扫描”电路原理图,搭建相关硬件电路。
6、用通用编程器或ISP下载HEX程序到MCU。
矩阵键盘编程键盘结构与类型独立式按键键盘由若干独立式按键组成。
独立式按键指每个按键作为一位占用一根I/O口线,直接用I/O口线构成单个按键电路。
独立式按键键盘可分为中断方式和查询方式两种。
独立式按键键盘优点是配置灵活,软件结构简单,操作速度快;缺点是按键多时I/O口浪费较大,故只在按键数目不多时采用。
行列式键盘(矩阵式键盘)用I/O口线组成行、列结构,按键设置在行列的交点上。
在按键较多时可节省I/O口线,如4×8行列结构可构成32个键的键盘。
行列式键盘键输入过程及接口软件应解决的任务键开关状态的可靠输入主要应解决抖动问题。
对按键编码以便识别对按键编码,使不同的按键有不同的键值或键号。
按键状态的输入方式有中断方式与查询方式两种。
编制键盘程序检测有无按键按下、去抖动、按键信息的逻辑处理、输出确定的键号等。
行列式键盘(矩阵式键盘)及接口程序设计行列式键盘的结构及键值赋值方法键盘行线的一端经上拉电阻接+5v电源,另一端接单片机的输入口(因而各输入口均被钳位于高电平)。
各列线的一端接单片机的输出口,另一端悬空。
按键设置在行列线的交点上,行、列线分别连接到按键的两端,按键按下则相应交点的行列线接通。
由图可见,矩阵式键盘接口的设计思想是把键盘既作为输入设备又作为输出设备对待的。
为了让CPU能识别是哪个按键被按下,必须给每个按键都分配一个键号(一般以十进制数表示)。
例如,4×4列矩阵式键盘共16个按键,键号依次按顺序排列为0~15。
对行列式键盘的每个按键,还有一个更重要的概念:键值或者说键码。
键值是一个可表征按键状态的8位数据,不同的按键有不同的键值。
按键后根据键值便能转到相应的键处理子程序,实现键盘的数据输入功能或命令处理功能。
同一个按键的键值和键号可以相同,也可以不相同,这主要取决于键盘的结构与采用的编码方法。
对行列式键盘来说,识别被按键的位置也就是找出被按键所在行和列的坐标值。
对于4行×4列行列式键盘,被按键所在行和列的坐标值为两个4位数据;而对于8行×8列行列式键盘,则为两个8位数据。
简述行列式键盘的电路原理
行列式键盘是一种普通的输入设备,它在很多电子产品中都是很常见的。
它采用行列电路设计,由一横排线和一竖排线组成。
横线用来接收用户输入的信号,竖线用来传输信号,通过横竖线的相交,来达到用户目的。
行列式键盘的电路原理很简单,主要包括行端电路和列端电路两部分,其中:
行端电路:行端电路采用上拉模式,每根线上拉到电源电压VCC 上,行线的输出端接一个电阻(一般为10KΩ),如果按键按下,由
按键对应的端口拉低,使其输出电压低于VCC,这时就达到了按下按键的效果。
列端电路:列端电路采用下拉模式,每根线线拉低到地之后,再通过一个可控制管来动态控制输出低电压电平,输出电平低于VCC时,就达到了按下按键的效果。
当某个按键按下时,其对应的行线输出电平低于VCC,而其对应的列线输出的是VCC的电压,当两者的电压汇聚时,就可以通过检测这个汇聚点的电压来判断该按键已经被按下。
- 1 -。