- 0
- 0
- 约1.26万字
- 约 70页
- 2023-05-27 发布于江苏
- 举报
9.1 键盘接口设计
9.2 LED驱动器设计
9.3 D/A接口设计
9.4 A/D接口设计
;教学目标;教学重点;键盘工作原理 ;在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。
硬件去抖动措施:在键数较少时,可采用硬件去抖
软件去抖动措施: 当键数较多时采用软件去抖。;矩阵式键盘的结构及原理 ;矩阵式键盘按键的识别 ;为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。采用键盘扫描后,再来观察8号键按下时的工作过程,当第0列处于低电平时,第2行处于低电平,而第1、2、3列处于低电平时,第2行却处在高电平,由此可判定按下的键应是第2行与第0列的交叉点,即8号键。 ;对于矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。如图9.2中的8号键,它位于第2行,第0列,因此,其键盘编码应为20H。采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。因此,可采用依次排列键号的方式对安排进行编码。以图9-2中的4×4键盘为例,可将键号编码为:01H、02H、03H…0EH、0FH、10H等16个键号。编码相互转换可通过计算或查表的方法实现。;矩阵式按键FPGA描述 ;library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity key is
Port ( clk : in std_logic;
keyin : in std_logic_vector(3 downto 0);
keyvalue : out std_logic_vector(3 downto 0);
keypressed : out std_logic;
keydrv : inout std_logic_vector(3 downto 0));
end key;
architecture Behavioral of key is;component keyscan
port(
clk_scan: in std_logic; --扫描时钟
key_drv: out std_logic_vector(3 downto 0)--扫描信号);
end component;
component clkgen
port(
clk : in std_logic;
clk_scan : out std_logic);
end component; ;component keydecoder
port( key_in: in std_logic_vector(3 downto 0); --键盘输入
key_drv: in std_logic_vector(3 downto 0);--键盘输出
clk: in std_logic; --全局时钟
clk_scan: in std_logic;--扫描时钟
keyvalue: out std_logic_vector(3 downto 0);--键盘的键值
key_pressed: out std_logic);
end component;
signal clk_scan:std_logic;
begin;keyscan1:keyscan
port map(clk_scan=clk_scan,
key_drv=keydrv);
clkgen1:clkgen
port map( clk=clk,
clk_scan=clk_scan);
keydecoder1:keydecoder
port map(
key_in=keyin,; key_drv=keydrv,
clk=clk,
clk_scan=clk_scan,
keyvalue=keyvalue,
key_pressed=keypressed);
end Behavioral;
;键盘扫描电路模块 ;library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_AR
原创力文档

文档评论(0)