基于FPGA的键盘扫描程序的设计

基于FPGA的键盘扫描程序的设计
基于FPGA的键盘扫描程序的设计

摘要

在现代电子工业的控制电路中,键盘扫描和显示电路对系统的调试和设置有着重要的作用。随着EDA技术的发展,基于FPGA的扫描键盘因其结构简单,能有效防止机械键盘按键抖动带来的数据错误等优点在许多电子设备中都得到了广泛的应用。

本文主要是设计一个基于FPGA的键盘扫描程序,该设计在EDA工具Quarutus II9.0上开发完成,以Creat-SOPC2000实验箱上的4*4矩阵键盘为硬件实体,设计键盘扫描程序,将程序划分为时序产生模块、键盘扫描模块、弹跳消除模块、键值译码模块四个模块,时序产生模块为键盘扫描和弹跳消除模块产生时钟信号,键盘扫描模块采用行扫描法对4*4矩阵键盘进行扫描,键值译码模块将所按键值译码为共阳极8位7段数码管的显示码,几个模块组合起来实现键盘扫描的设计要求。最后对程序进行仿真分析和硬件验证。仿真结果表明,该系统具有集成度高、稳定性好、设计灵活和设计效率高等优点。

关键词: FPGA,Quartus II,VHDL,键盘扫描

ABSTRACT

In the modern electronics industry controlling-circuit, the keyboard scanning and display circuit plays an important role in debugging and setting the system. With the development of EDA technology, FPGA-based scanning keyboard have been widely used in many electronic devices because of its simple structure, and it also can effectively prevent mechanical keyboard jitter caused by data errors.

This article primarily designed an FPGA-based keyboard scan procedures, this design is developed on the EDA tools—— Quarutus II9.0 and designed the keyboard scan program, using the Creat-SOPC2000 experimental box 4 * 4 matrix keyboard as the hardware entity .the program is divided into four modules as the timing generation module, a keyboard scanning module, bounce cancellation module and the decoding module. The timing generation module generates the clock signal for the keyboard scanning and bounce elimination module, the keyboard scanning module using the line scanning method to sweep the 4* 4 matrix keyboard, key decoder module decodes the key value for the common anode eight 7-segment display code. Several modules assembles together to meet the keyboard scanning design requirements. Finally, conducting simulation analysis by the program and verifying the hardware.Simulation results show that the system has many advantages such as high integration, good stability, high efficiency, flexible design and high design efficiency.

Keywords: FPGA,Quartus II,VHDL,keyboard scanning

目录

摘要.................................................................................................................... I ABSTRACT .......................................................................................................... I I 第1章绪论 (1)

1.1 课题的研究背景 (1)

1.2 课题的研究意义 (2)

1.3 本文的主要工作 (2)

第2章FPGA开发工具简介 (3)

2.1 FPGA概述 (3)

2.2 VHDL语言以及Quartus II应用 (3)

2.3 本章小结 (4)

第3章基于FPGA的键盘扫描程序的设计 (3)

3.1 键盘扫描程序的总体电路设计 (5)

3.1.1 矩阵式键盘扫描的工作原理 (6)

3.1.2 数码管的显示原理 (7)

3.2 键盘扫描电路各主要功能模块的设计 (8)

3.2.1 时序产生模块 (8)

3.2.2 键盘扫描模块 (9)

3.2.3 弹跳消除模块 (11)

3.2.4 键盘译码电路 (13)

3.2.5 键盘扫描程序的顶层文件设计 (15)

3.3本章小结 (16)

第4章键盘扫描程序的波形仿真及硬件验证 (17)

4.1 系统仿真 (17)

4.1.1 消抖电路仿真 (17)

4.1.2 键盘时钟信号仿真 (18)

4.1.3 键盘扫描信号仿真 (18)

4.1.4 键盘译码电路仿真 (19)

4.1.5 键盘扫描总体电路仿真 (21)

4.2引脚的锁定 (22)

4.3硬件验证 (23)

4.4本章小结 (25)

结论 (26)

参考文献 (27)

附录 (28)

致谢 (32)

第1章绪论

1.1 课题的研究背景

在现代计算机与电子系统中,一般都采用通用式的标准键盘将所需的数据和指令等信息通过键盘输入到计算机和电子系统,以此来实现人机之间的接口交互。但是,在各种嵌入式系统(如微波炉、手机、电风扇等)中的键盘按键个数有限,一般为几个到十几个左右,而标准键盘则一般在一百多个左右,并且每个按键都有其各自的功能含义。所以针对每一种电子设备对其键盘进行扫描程序的设计时,必须结合工程的实际情况以及设备自身的各种资源,使所设计的键盘能够很好地融合到系统中,成为其重要的组成部分。

在数字电路中,如果将每个按键的输出信号连接到编码器对应的输入端,通过编码逻辑在编码器的输出端得到每个按键对应的键值,利用编码器实现按键键值的直接编码,这种键盘在早期称为编码键盘。但是,这类键盘有许多缺点如按键数量较多时编码逻辑的成本就会相对变高.直接编码的方法也具有很大的局限性,编码逻辑一旦固定就难以改变。现代数字电路中,一般当按键数量较多时,我们采用扫描的方式来产生键值。用矩阵的形式连接按键,使每个按键位于行、列的相交点上,通过输入扫描信号确定所按按键的行值和列值,即位置码也称扫描码,再通过查表或译码的方式将位置码转换为按键码值,采用这类方式扫描的,我们习惯称其为“非编码键盘”。在执行键盘扫描的过程中,因大多数键盘采用的都是机械开关,所以按键在闭合时往往会出现一些难以避免的机械性抖动,输出信号随之也发生跳变,其跳变宽度一般在10 ms一20 ms之间。若不对其进行处理,则系统很有可能会将其误认为多次按键。因此在系统中须设置硬件延时电路,按键输入在经过一定时间的延迟后方可读取键值,即键盘系统中常出现的去抖电路。还有一种情况是当前面按键键值还没输出但已近有新的按键按下时,后按的键值就会覆盖前面的键值,造成数据的丢失。这时可以在系统中设置一个控制信号,确保前一按键的键值输出后才允许后一键值的产生,又或设置一组寄存器来保存按键的键值,然后系统依序对其进行处理。这类扫描键盘的优点在于不需要主机担负扫描任务,而是由软件程序完成,其次也可通过更改程序来改变按键的功能定义。

基于FPGA的键盘扫描程序,由芯片中的键盘扫描程序对键盘进行扫描,按键时,系统通过时钟模块启动扫描程序,依次对每行键值赋值来扫描每行,再通过键盘每列的输出来确定按键位置,这种扫描方法被称为逐行扫描法,当有键按下时首先获得此键的列值,然后逐行扫描就可以判断按键所在的行值,由行、列的值可以得出按键的键值。

此外,还需在键盘扫描程序的中加入延时程序,以消除机械键盘按键抖动所带来的影响。如果键盘的扫描频率设置过低,则在扫描显示的过程中,会出现按键显示迟缓,甚至乱码等现象。因此在实际的设计中,需根据设计要求及系统的硬件规格选择合适的扫描平率。现代数字设备中的键盘大多采用这样的键盘扫描方法[1-6]。

1.2 课题的研究意义

从计算机时代开始以来,数字系统设计就存在两个大的分类,即系统硬件设计和系统软件设计。早期的数字系统设计人员也因此被分为两个族群:硬件设计人员和软件设计人员,他们都只从事自己的工作领域,很少涉足对方的领域,尤其是软件设计人员。但是,随着数字技术和硬件系统的发展,这两个领域开始互相有所合作。在硬件描述语言HDL(Hardware Description Language)出现后,数字系统的设计已无软硬件之分。设计人员可以用HDL语言来描述系统的硬件构成及其行为,并通过仿真确定其运用到系统硬件上时是否可行,设计出符合要求的硬件系统。不仅如此,利用HDL语言来设计系统硬件同传统的硬件设计方法相比,具有其独特的优势,它为系统的硬件设计带来了深远的影响,是硬件设计领域的一次重要的变革。

传统的键盘扫描是以硬件电路来确定键盘的变化,特定的硬件电路只能应用于特定的键盘,因此它存在这样一些缺点:不能根据实际应用的改变而变化,形式固定。本文所采用的技术方案能克服上述所讲的技术缺点,该键盘扫描程序是由软件控制完成,不需要改变硬件电路,就可以适用于多种不同类型的键盘。整个系统设计是自动化过程,减少了工作量,主要把精力放在创造性的方案和概念构思上,提高了工作效率,缩短了产品的研制周期。

1.3 本文的主要工作

本设计主要是以计算机为设计平台,综合运用EDA软件工具开发环境,使用硬件描述语言VHDL,采用自顶而下的设计方法,把系统由上至下的分成几个模块设计,最后达到系统的要求,然后在Quartus II9.0上通过编程、调试、编译、仿真,从而实现键盘扫描的设计。第二章介绍了键盘扫描的基本特点和工作原理,查找有关可编程逻辑器件、VHDL语言的相关资料,掌握一定的理论知识,熟悉Quartus II软件的使用。第三章先对键盘扫描做出总体的设计方案,然后对键盘扫描进行分模块设计,再对每个模块做出详细的分析。第四章根据第三章所做的工作,对程序编译,然后进行仿真,对仿真出的结果进行详细的分析,仿真完把程序下载到实验箱上进行测试。最后对设计做出总结。

第2章 FPGA开发工具简介

2.1 FPGA概述

FPGA现在已经取代ASIC,实现其功能。通常ASIC包含三种:全定制,半定制(包括标准单元和阵列),和可编程器件。对于前面两种,您需要支付的费用项目不能重复使用的NRE,主要用于芯片流片,在分析工程开销,成本一般是10000美元以上,数以万计的。如果不成功,返工,甚至多次返工的成本,成本将上升。高成本,高风险,但通常的需求,各种ASIC的成本,NRE费用分配给每一个产品的价格太高,用户通常是不能接受的。然而可编程逻辑器件PLD是可以解决上述问题的可编程逻辑器件,是一种新型的ASIC,它有着操作灵活,易于使用,投资风险小和开发迅速的突出优势,非常适合产品的前期开发,研究样本开发或小批量的产品。FPGA是一种新型的PLD,有着PLD所具有的优点,而且其规模比一般的PLD规模要大。

FPGA主要特点有:用户不需要投片生产,就能得到合用的芯片;FPGA可做其它全定制或半定制ASIC电路的中试样片;其内部有丰富的触发器和I/O引脚;是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一; FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活[7-9]。

2.2 VHDL语言以及Quartus II应用

VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982 年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特

征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。一个完整的VHDL程序通常包括实体(Entity)、结构体(Architecture)、配置 (Configuration)、程序包集合(Package)和库(Library)5个部分。前4部分是可分别编译的源设计单元。库用来存放已经编译的实体、结构体、配置和程序包集合[10-12]。

Quartus II支持多种设计输入形式,如:原理图、VHDL、VerilogHDL以及AHDL (Altera Hardware Description Language)等,是一种综合性PLD开发软件。由于其内嵌带自有的仿真器和综合器,因而能够完成从输入设计到配置硬件的整个PLD设计流程。而且它还支持Altera的IP核和可编程系统(SOPC)在Altera 的片上开发,具有LPM宏功能的模块库,用户可以使用这些成熟的功能模块,让FPGA的设计工作变得更简单。同时,Quartus II支持很多第三方的EDA工具,因而用户可以使用自己熟悉的第三方EDA工具来进行设计工作。此外,Quartus II 集合了Matlab/Simulink与DSP Builder等优秀的EDA工具,各种DSP应用系统在其平台上能够很快得以实现;Quartus II是一个综合性的开发平台,集嵌入式软件开发、系统级设计和可编程逻辑设计于一体[13-15]。

2.3 本章小结

本章主要介绍了基于FPGA键盘扫描程序的开发工具,简单地概述了FPGA,主要讲述了FPGA的原理及FPGA的设计流程,另外还概述了VHDL语言的一些基本知识,最后简单地介绍了Quartus II软件。

第3章基于FPGA的键盘扫描程序的设计

本次设计根据键盘扫描程序的设计思路提出了系统的整体电路框图,对硬件实体部分即本设计中4*4矩阵键盘的扫描原理和8位7段数码管的显示方式进行了简单概述,根据整体的电路构架和硬件的实现原理编写键盘扫描程序,将系统进行模块化设计,主要分为时序产生模块设计、键盘扫描模块设计、弹跳消除模块设计、键盘译码模块设计,用VHDL硬件描述语言分别编写各模块的程序,在QuartusII中为VHDL语言程序分别建立项目,在编译、仿真通过,证实逻辑功能正确后,在File菜单下选择Create/Update 项中的Create Symbol Files for Current File即可为此实体生成一个后缀为.bsf的组件符号文件,以后就可以在图形编辑器中调用此组件了。用Quartus II图形编辑器将各模块联系起来,形成顶层文件即本次设计的主体。模块化的设计方法能明确设计思路,也便于调试和修改。

3.1 键盘扫描程序的总体电路设计

根据设计思路提出键盘扫描程序的总体电路设计图,如图3.1所示,主要由4*4矩阵键盘、键盘扫描电路、时序产生电路(即分频电路)、弹跳消除电路、键盘译码电路、8位7段数码管显示电路构成。整体的工作原理为,通过对系统时钟提供的频率进行分频,分别为键盘扫描电路和弹跳消除电路提供时钟信号,键盘扫描电路通过由键盘扫描时钟信号控制不断产生的键盘扫描信号对键盘进行行扫描,同时弹跳消除电路实时的对键盘的按键列信号进行采集、并将采集到的按键列信号传送到键盘译码电路进行译码,译出与之对应的键码,译出的键码将通过数码管显示电路相对应的8段7位数码管显示出来,得到最终的按键结果,完成本次设计的电路设计部分。

图3.1 键盘扫描的电路框图

3.1.1 矩阵式键盘扫描的工作原理

KY0(00) 1110KY1(01) 1101KY2(10) 1011键盘扫描信号经提升电阻至VCC

KX3KX2KX1KX0

图3.2 4*4矩阵式键盘的面板配置

矩阵式键盘是一种常用的电子输入装置,在平常的生活中,矩阵式键盘在通信设备如手机,信息终端如计算机,家用电器如油烟机等各式电子产品上都具有很重要的作用。图3.2是一个4*4矩阵式键盘的面板配置图。

键盘上上的每个按键都是一个机械开关,当按键被按下时,则该键的电路便会输出低电平即赋值0,反之,如果没有按下按键则输出高电平即赋值1。键盘的扫描由行信号KY0—KY3控制开始进行行扫描,变化的顺序依次为1110—1101—1011—0111—1110。每一次扫描一行,依次进行循环。例如现在的行扫描信号为1011,表示目前正在扫描9、0、A 、B 这一行的按键,如果这行当中没有按键按下的话,则KX3—KX0输出为1111;反之如果是9键按下,则由KX3—KX0输出为0111。

根据上面所述原理,我们可得到各按键的位置与码值的关系如表3.1和3.2所示。

表3.1 按键位置与数码的关系

表3.2 按键位置与数码的关系

若从KX3—KX0读出的值皆为1时,代表该列没有按键按下,则不进行按键译码的动作,反之,如果有按键按下时,则应将KX3—KX0读出的值送至译码电路进行译码。

3.1.2 数码管的显示原理

数码管的显示数据的方式有静态显示和动态显示之分。所谓静态显示,就是将被显示的数据的BCD码通过各自的4—7/8显示译码器译码后,分别接到显示译码器的显示驱动端a—g(p),而公共端COM则根据数码管的类型(共阴/共阳)分别接GND/VCC。所谓动态显示,就是将被显示的数据的BCD码按照一定的变化频率,在不同的时刻周期性地分别送到一个数据总线上,再通过一个公共的4—7/8显示译码器译码后,接到多个显示译码的公共显示驱动端口a—g(p)上,同时,在不同的时刻周期性的选通对应的数码管的公共端口COM。

本设计采用的是共阳极数码管,采用的显示方式是静态显示,其电路中只用到一个数码管,当有键按下时,数码管将显示出对应的键码值。其主要的VHDL程序如下:

---------数码管显示程序----------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity smgxs is

port(ym_in: in std_logic_vector(4 downto 0);

com0: out std_logic;

qout8: out std_logic_vector(7 downto 0));

end entity smgxs;

architecture art of smgxs is

signal qout8_s: std_logic_vector(7 downto 0);

begin

process(ym_in)is

begin

case ym_in is

when "00000"=>qout8_s<="11000000";----0

when "00001"=>qout8_s<="11111001";----1

when "00010"=>qout8_s<="10100100";----2

when "00011"=>qout8_s<="10110000";----3

when "00100"=>qout8_s<="10011001";----4

when "00101"=>qout8_s<="10010010";----5

when "00110"=>qout8_s<="10000010";----6

when "00111"=>qout8_s<="11111000";----7

when "01000"=>qout8_s<="10000000";----8

when "01001"=>qout8_s<="10010000";----9

when "01010"=>qout8_s<="10001000";----A

when "01011"=>qout8_s<="10000000";----B

when "01100"=>qout8_s<="11000110";----C

when "01101"=>qout8_s<="11000000";----D

when "01110"=>qout8_s<="10000110";----E

when "01111"=>qout8_s<="10001110";----F

when others=>qout8_s<="11111111";

end case;

end process;

qout8<=qout8_s;

com0<='1';

end architecture art;

3.2 键盘扫描电路各主要功能模块的设计

3.2.1 时序产生模块

本时序产生模块中使用了二种不同频率的工作脉冲波形,通过对系统时钟脉冲进行分频得到键盘扫描模块和键盘去抖模块的时钟信号。

当系统需要使用多种操作频率的时钟脉冲时,较为直接和简便的方法就是用一个自由计数器自由累加得到所需的各种频率。也就是建立一个N位计数器,N的大小根据电路的需求决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更多的频率变化,以便提供多种不同频率的时钟信号。若输入时钟为CLK,N位计数器的输出为Q[N-1.0],则Q(0)为CLK的2分频脉冲信号,Q(1)为CLK的4分频脉冲信号,Q(2)为CLK的8分频脉冲信号……Q(N-1)为CLK的2N分频脉冲信号。我们利用以上规律即可得到我们所需要频率的信号或信号序列。时序产生模块模块电路图如图3.4所示。xd_clk 输出信号和ym_clk输出信号分别为系统时钟clk的8分频和2分频,其中xd_clk信号用作弹跳消除取样电路的时钟信号,ym_out信号用作键盘扫描电路的时钟信号。时序产生模块原理图如图3.3所示。

图3.3 时序产生模块

时序产生模块VHDL描述如下:

--------------扫描时钟产生程序-------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity smsz is

port(clk: in std_logic;

ym_clk: out std_logic;

xd_clk: out std_logic);

end entity smsz;

architecture art of smsz is

signal clk_s: std_logic_vector(3 downto 0);

begin

process(clk)is

begin

if(clk'event and clk='1')then -----------上升沿

if(clk_s="1111")then

clk_s<="0000";

else

clk_s<=clk_s+1; -----------计数器分频

end if;

end if;

end process;

ym_clk<=clk_s(0);

xd_clk<=clk_s(2);

end architecture art;

3.2.2 键盘扫描模块

键盘扫描模块的主要功能是为键盘提供扫描信号(表 3.1中的行扫描信号KY0—KY3),行扫描信号由时钟控制按照顺序依次被赋值1110—1101—1011—0111。扫描时从KY0-KY3分别扫描四行按键,将行扫描信号赋值0111时即可对KY0这一行按键进行扫描;将扫描信号赋值1011时则扫描KY1这一行按键;将扫描信号赋值1101时扫描KY2这一

行按键;将扫描信号赋值1110时,检测KY3这一行的按键情况。通过行扫描信号的循环依次检查每一行是否有键按下,如果这行有按键按下则立刻进行对按键编码进行译码,且将译码的结果传送到数码管。键盘扫描模块模块图如图3.4所示。

图3.4 键盘扫描模块

键盘扫描模块VHDL描述如下:

------------扫描信号产生程序----------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity smxh is

port(clk: in std_logic;

q_out: out std_logic_vector(1 downto 0);

sm_out: out std_logic_vector(3 downto 0));

end entity smxh;

architecture art of smxh is

signal sm_s: std_logic_vector(3 downto 0);

signal q_s: std_logic_vector(1 downto 0);

begin

process(clk)is

begin

if(clk'event and clk='1')then

if(q_s="11")then

q_s<="00";

else

q_s<=q_s+1;

end if;

end if;

end process;

process(q_s)is

begin

case q_s is

when "00"=>sm_s<="1110"; ---------输出扫描信号为1110

when "01"=>sm_s<="1101"; ---------输出扫描信号为1101

when "10"=>sm_s<="1011"; ---------输出扫描信号为1011

when "11"=>sm_s<="0111"; ----------输出扫描信号为0111

when others=>sm_s<="1111";

end case;

end process;

sm_out<=sm_s;

q_out<=q_s;

end architecture art;

3.2.3 弹跳消除模块

由于本设计中的4*4矩阵键盘用的是机械开关,因此在按键按下的时刻会在触片上出现信号来回弹跳的现象,因为这种弹跳现象很可能会造成乱码现象,从而影响到按键结果的正确显示。

图3.5为弹跳现象造成的错误的抽样结果,从中可以看出虽然是只按键一次然后就马上松开,然而实际的按键信号却已跃变多次,通过取样信号的检查,就很有可能输出错误的编码。

按键信号

抽样信号

抽样结果

图3.5 弹跳现象产生错误的抽样结果

如果调整抽样频率(如图3.6所示),可以发现弹跳现象获得了改善。

按键信号

抽样信号

抽样结果

图3.6 调整抽样频率后得到的抽样结果

因此为系统加上此模块,能有效避免乱码现象的发生。另外,系统中弹跳消除模块的脉冲信号频率必须高于其他模块中的脉冲信号频率;一般情况下,扫描模块的工作频率为24Hz左右,而弹跳消除模块的工作频率则必须为128Hz左右,后者的工作频率要高于前者。

图3.7 弹跳消除电路的内部实现原理图

弹跳消除电路的实现原理如图3.7所示,按下按键时键盘的输入信号为D_IN,CLK 为此模块的时钟信号,也就是抽样信号,将D_IN通过两个D触发器延时后再用RS触发器处理。

RS触发器的前端连接和非门原理:

(1)通常人的按键速度维持在10次/秒左右,也就是说每次按键的时间在100ms 左右,所以按下的时间可估算为50ms,以取样信号CLK的周期为8ms计,则可以取样到6次。

(2)对于不稳定的噪声,在4ms以下则至多抽样一次。

(3)在触发器之前,接上AND-NOT之后,SR的组态如表3.3所示。

表3.3 RS触发器真值表

(1)D0为1,且D1也为1时,结果S=1,R=0,D_OUT才会输出1。这代表被取样的D_IN信号能被连续取样到两次1,此时认定它已经稳定地按下按钮。

(2)D0为0,且D1也为0时,结果S=0,R=1,D_OUT才会输出0。这代表被取样的D_IN信号能被连续取样到两次0,此时认定它已经稳定地放掉按钮。

(3)D0为1,且D1也为0时,结果S=0,R=0,D_OUT将维持先前的输出信号不变。D0=0,D1=1也是如此。

总之,必须取样到两次1才会输出1,两次0才会输出0.最后,由于D_OUT的信号输出时间宽度过长,所以输出必须再接一级微分电路后,才接到译码电路。

弹跳消除模块的VHDL描述如下:

--------D触发器程序---------

library ieee;

use ieee.std_logic_1164.all;

entity dcfq is

port(clk,d: in std_logic;

q: out std_logic);

end entity dcfq;

architecture art of dcfq is

begin

process(clk)

begin

if clk'event and clk='1' then ---------上升沿

q<=d;

end if;

end process;

end architecture art;

----------SR触发器--------

library ieee;

use ieee.std_logic_1164.all;

entity srcfq is

port(r,s: in std_logic;

q,qb: out std_logic);

end entity srcfq;

architecture art of srcfq is

signal q_s,qb_s: std_logic;

begin

process(r,s)is

begin

if(r='0' and s='1')then ----------RS触发器输出置‘1’

q_s<='1';

qb_s<='0';

elsif(r='1' and s='0')then -----------RS触发器输出置‘0’

q_s<='0';

qb_s<='1';

elsif(r='0' and s='0')then ------------RS触发器输出保存不变

q_s<=q_s;

qb_s<=qb_s;

end if;

q<=q_s;

qb<=qb_s;

end process;

end architecture art;

3.2.4 键盘译码电路

键盘译码电路的主要工作原理是:首先根据输入的键盘信号判断是否有键盘按下再,如果有键盘按下,将根据输入的键盘信号和扫描信号进行查表,根据查表可直接得

出相应的键盘的译码值。

矩阵式键盘中每个按键的键值参照下表(表3.4键盘参数表)。

表3.4 键盘参数表

键盘译码模块模块原理图如图3.8所示。

图3.8 键盘译码模块

键盘译码模块VHDL描述如下:

---------译码电路程序----------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity ymdl is

port(clk: in std_logic;

sm_in: in std_logic_vector(1 downto 0);

jm_in: in std_logic_vector(3 downto 0);

ym_out: out std_logic_vector(3 downto 0));

end entity ymdl;

architecture art of ymdl is

signal jm_s: std_logic_vector(5 downto 0);

signal ym_s: std_logic_vector(3 downto 0);

begin

process(clk)is

begin

jm_s<=sm_in & jm_in;

if(clk'event and clk='1')then

case jm_s is

when "000111"=>ym_s<="0001"; ------译码值1

when "001011"=>ym_s<="0010"; ------译码值2

when "001101"=>ym_s<="0011"; ------译码值3

when "001110"=>ym_s<="0100"; ------译码值4

when "010111"=>ym_s<="0101"; ------译码值5

when "011011"=>ym_s<="0110"; ------译码值6

when "011101"=>ym_s<="0111"; ------译码值7

when "011110"=>ym_s<="1000"; ------译码值8

when "100111"=>ym_s<="1001"; ------译码值9

when "101011"=>ym_s<="0000"; ------译码值0

when "101101"=>ym_s<="1010"; ------译码值A

when "101110"=>ym_s<="1011"; ------译码值B

when "110111"=>ym_s<="1100"; ------译码值C

when "111011"=>ym_s<="1101"; ------译码值D

when "111101"=>ym_s<="1110"; ------译码值E

when "111110"=>ym_s<="1111"; -------译码值F

when others=>ym_s<="XXXX";

end case;

end if;

end process;

ym_out<=ym_s;

end architecture art;

3.2.5 键盘扫描程序的顶层文件设计

设计好各个模块后,要使其相互联系起来要通过QUARTUS II的图形编辑器将各个模块按照一定的关系建立顶层文件jpsm.bdf,通过连线将各模块整合后,整体电路用VHDL 实现的总体的模块电路图如图3.9所示:

图3.9 键盘扫描程序的顶层文件图

3.3本章小结

本章首先是根据课题任务书和所查找的资料,给出本次设计的整体电路设计方案。然后对硬件部分如4*4矩阵键盘和8段7位数码管的原理进行阐述,再对键盘扫描程序的主要模块(时序产生模块、键盘扫描模块、弹跳消除模块、键盘译码模块)分别进行设计,将这几个模块进行编程和生成电路元件,并对其进行详细地分析。最后根据自己

的设计思路,将各模块的电路元件进行整合生成键盘扫描程序的顶层文件。

基于FPGA的键盘扫描电路 EDA课程设计

信息科学与技术学院 EDA 课程设计报告 题目名称:基于FPGA 的键盘扫描电路 学生姓名:王彪 学 号:2010508115 专业年级:电信10级(2)班 指导教师:钟福如老师 时 间: 2010.1.13

目录 1 课程设计综述—————————————————————— 2 1.1 课程设计的题目———————————————————— 2 1.2 题目要求——————————————————————— 2 2 方案选择———————————————————————— 2 3 整体电路的设计及分析——--——————————————— 3 3.1 顶层电路图—————————————————————— 3 3.2 各模块功能原理分析—————————————————— 4 4 心得体会——————————————————————— 12

1.课程设计综述 1.1 课程设计的题目 基于FPGA的键盘扫描电路。 1.3 题目要求 (1)、键盘按钮数为4,系统时钟10MHz。 (2)、能识别出所按按钮。 (3)、按钮被按下后,视为此按钮输入一次,若按钮长时间不松,(时限1S)后每隔0.5S 视为再次输入,直至按钮松开。 (4)、要求能对按钮按下时指令的抖动能正确处理。对持续时间小于50ms的输入不作响应。 (5)、各键设置不同优先级,多键同时按下时,视为优先级较高的按键被按下。2.方案选择 根据题目要求,需要4个按钮的键盘,通过查阅资料我选择通用的2*2行列式键盘,判断键盘中有无按键按下是通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。原理框图如下所示:

实验报告七-键盘扫描及显示实验

信息工程学院实验报告 课程名称:微机原理与接口技术 实验项目名称:键盘扫描及显示实验 实验时间: 班级: 姓名: 学号: 一、实 验 目 的 1. 掌握 8254 的工作方式及应用编程。 2. 掌握 8254 典型应用电路的接法。 二、实 验 设 备 了解键盘扫描及数码显示的基本原理,熟悉 8255 的编程。 三、实 验 原 理 将 8255 单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。实验具体内容如下:将键盘进行编号,记作 0~F ,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编号。 键盘及数码管显示单元电路图如图 7-1 和 7-2 所示。8255 键盘及显示实验参考接线图如图 7-3 所示。 图 7-1 键盘及数码管显示单元 4×4 键盘矩阵电路图 成 绩: 指导老师(签名):

图 7-2 键盘及数码管显示单元 6 组数码管电路图 图 7-3 8255 键盘扫描及数码管显示实验线路图 四、实验内容与步骤 1. 实验接线图如图 7-3 所示,按图连接实验线路图。

图 7-4 8255 键盘扫描及数码管显示实验实物连接图 2.运行 Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。 图 7-5 8255 键盘扫描及数码管显示实验程序编辑界面 3. 运行程序,按下按键,观察数码管的显示,验证程序功能。 五、实验结果及分析: 1. 运行程序,按下按键,观察数码管的显示。

矩阵键盘的工作原理和扫描确认方式

9.3.1 矩阵键盘的工作原理和扫描确认方式 来源:《AVR单片机嵌入式系统原理与应用实践》M16华东师范大学电子系马潮 当键盘中按键数量较多时,为了减少对I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。 图9-7 为一个 4 x 3 的行列结构,可以构成12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个16 键的键盘。很明显,在按键数量多的场合,矩阵键盘与独立式按键键盘相比可以节省很多的I/O 口线。 矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态,因此会大量占用MCU 的时间,所以较好的方式也是采用状态机的方法来设计,尽量减少键盘查询过程对MCU 的占用时间。 下面以图9-7 为例,介绍采用行扫描法对矩阵键盘进行判别的思路。图9-7 中,PD0、PD1、PD2 为3 根列线,作为键盘的输入口(工作于输入方式)。PD3、PD4、PD5、PD6 为4根行线,工作于输出方式,由MCU(扫描)控制其输出的电平值。行扫描法也称为逐行扫描查询法,其按键识别的过程如下。 √将全部行线PD3-PD6 置低电平输出,然后读PD0-PD2 三根输入列线中有无低电平出现。只要有低电平出现,则说明有键按下(实际编程时,还要考虑按键的消抖)。如读到的都是高电平,则表示无键按下。 √在确认有键按下后,需要进入确定具体哪一个键闭合的过程。其思路是:依

矩阵键盘设计实验报告

南京林业大学 实验报告 基于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。 7、检查验证结果。 六、实验具体内容 使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。 1、电路图

单片机矩阵键盘设计方案

1、设计原理 (1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。 (2)键盘中对应按键的序号排列如图14.1所示。 2、参考电路 图14.2 4×4矩阵式键盘识别电路原理图 3、电路硬件说明 (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。 4、程序设计内容 (1)4×4矩阵键盘识别处理。 (2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 5、程序流程图(如图14.3所示) 6、汇编源程序 ;;;;;;;;;;定义单元;;;;;;;;;; COUNT EQU 30H ;;;;;;;;;;入口地址;;;;;;;;;;

ORG 0000H LJMP START ORG 0003H RETI ORG 000BH RETI ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ORG 002BH RETI ;;;;;;;;;;主程序入口;;;;;;;;;; ORG 0100H START: LCALL CHUSHIHUA LCALL PANDUAN LCALL XIANSHI LJMP START ;;;;;;;;;;初始化程序;;;;;;;;;;

根据VHDL的键盘扫描及显示电路

广西工学院 EDA 课程设计 说明书 设计题目基于VHDL的键盘扫描 及显示电路 系别电控系 专业班级__________________ 学生姓名__________________ 学号__________________ 指导教师__________________ 日期__________________

基于VHDL的键盘扫描及显示电路一、工作原理: 可编程器件的KEY_HANG[3..0]行信号输出端不停循环输出“1110”“1101”“1011”“0111”。当没有键按下时可编程器件的KEY_LIE[3..0]列信号输入端检测到的是“1111”。当有按键按下时,如按下1,此时KEY_HANG[3..0]行信号输出为“0111”,即KEY_HANG[3..0]的3管脚为“0”,可由电路看出,此时输入端KEY_LIE[3..0]检测到的将是“0111”。KEY_LIE[3..0]的3管脚为0,可以在编写程序时,将输出信号KEY_HANG[3..0]与输入信号KEY_LIE[3..0]同时判断,比如可以认为当数据“KEY_HANG&KEY_LIE”为“01110111”时,可译码成数据1,。同理可得其他按键的编码。根据不同数据的编码译成不同的数据。 名称IO属性描述备注 clk in 输入时钟,1K和40K频 率 KEY_HANG[3..0]out矩阵键盘的扫描输入端口 KEY_LIE[3:0] in矩阵键盘的扫描输出端口START out 数据输出标志 DISP out 数码管译码显示译码7bit

DATA[6..0] 输出 DASP SEL[1..0] out数码管扫描输出2bit

单片机矩阵键盘扫描程序

#include #include #define uint unsigned int #define uchar unsigned char sbit E=P2^7; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^5; //1602数据/命令选择引脚 uint keyflag ; //键盘正在读取标志位,如果Keyflag为1 ,表示正在读取键盘,停止其他功能; char x,y,m,n,c; //Keyflag为0,读取键盘结束,恢复其他功能 char flag1=0; //频率范围10~1000Hz uchar Hrate = 0; //一个周期内高点平占据时间 uchar Lrate = 0; //一个周期内低电平占据时间 uint FREQ0; //定时器T0的计数变量// uint FREQ1; //定时器T1的计数变量// sbit P2_1=P2^0; //设置P2.1,作为信号输出口// uint disbuf[3]; uint figure=0; int sum2=0; int sum1=0; int flag=0; uint count=0; uint max=0; uint disbuf_temp=0; /******************************************************************** * 名称: 1602显示延时函数delay() * 功能: 延时,延时时间大概为5US。

* 输出: 无 ***********************************************************************/ void delay() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } /******************************************************************** * 名称: bit Busy(void) * 功能: 这个是一个读状态函数,读出函数是否处在忙状态 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ bit Busy(void) { bit busy_flag = 0; RS = 0; RW = 1; E = 1; delay(); busy_flag = (bit)(P0 & 0x80); E = 0; return busy_flag; } /******************************************************************** * 名称: wcmd(uchar del) * 功能: 1602命令函数 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ void wcmd(uchar del) { while(Busy()); RS = 0; RW = 0; E = 0; delay(); P0 = del; delay(); E = 1;

矩阵键盘电路设计

课程设计 题目矩阵键盘电路设计教学院计算机学院 专业计算机应用技术班级 姓名 指导教师 2010 年01 月12 日

前言.................................................................... 第一章需求分析......................................................... 功能描述......................................................... 功能分析......................................................... 第二章系统的原理及分析................................................. 用到的知识点的介绍,知识点使用的总体思路 第三章详细设计......................................................... 硬件设计 系统结构图,元器件的选择等 软件设计 所设计的软件关键模块的程序流程 第四章测试............................................................ 运行结果分析等 第五章总结............................................................. 参考文献................................................................ 附录 关键程序代码........................................................

基于FPGA的键盘扫描程序的设计

摘要 在现代电子工业的控制电路中,键盘扫描和显示电路对系统的调试和设置有着重要的作用。随着EDA技术的发展,基于FPGA的扫描键盘因其结构简单,能有效防止机械键盘按键抖动带来的数据错误等优点在许多电子设备中都得到了广泛的应用。 本文主要是设计一个基于FPGA的键盘扫描程序,该设计在EDA工具Quarutus II9.0上开发完成,以Creat-SOPC2000实验箱上的4*4矩阵键盘为硬件实体,设计键盘扫描程序,将程序划分为时序产生模块、键盘扫描模块、弹跳消除模块、键值译码模块四个模块,时序产生模块为键盘扫描和弹跳消除模块产生时钟信号,键盘扫描模块采用行扫描法对4*4矩阵键盘进行扫描,键值译码模块将所按键值译码为共阳极8位7段数码管的显示码,几个模块组合起来实现键盘扫描的设计要求。最后对程序进行仿真分析和硬件验证。仿真结果表明,该系统具有集成度高、稳定性好、设计灵活和设计效率高等优点。 关键词: FPGA,Quartus II,VHDL,键盘扫描

ABSTRACT In the modern electronics industry controlling-circuit, the keyboard scanning and display circuit plays an important role in debugging and setting the system. With the development of EDA technology, FPGA-based scanning keyboard have been widely used in many electronic devices because of its simple structure, and it also can effectively prevent mechanical keyboard jitter caused by data errors. This article primarily designed an FPGA-based keyboard scan procedures, this design is developed on the EDA tools—— Quarutus II9.0 and designed the keyboard scan program, using the Creat-SOPC2000 experimental box 4 * 4 matrix keyboard as the hardware entity .the program is divided into four modules as the timing generation module, a keyboard scanning module, bounce cancellation module and the decoding module. The timing generation module generates the clock signal for the keyboard scanning and bounce elimination module, the keyboard scanning module using the line scanning method to sweep the 4* 4 matrix keyboard, key decoder module decodes the key value for the common anode eight 7-segment display code. Several modules assembles together to meet the keyboard scanning design requirements. Finally, conducting simulation analysis by the program and verifying the hardware.Simulation results show that the system has many advantages such as high integration, good stability, high efficiency, flexible design and high design efficiency. Keywords: FPGA,Quartus II,VHDL,keyboard scanning

单片机课程设计4X4矩阵键盘显示

长沙学院 《单片机原理及应用》 课程设计说明书 题目液晶显示4*4矩阵键盘按键号 程序设计 系(部)电子与通信工程系 专业(班级)电气1班 姓名龙程 学号09 指导教师刘辉、谢明华、王新辉、马凌 云 起止日期— 长沙学院课程设计鉴定表

《单片机技术及应用》课程设计任务书系(部):电子与电气工程系专业:11级电子一班指导教师:谢明华、刘辉

目录 前言 .......................................................................................................................................... 错误!未定义书签。 一、课程设计目的 .................................................................................................................... 错误!未定义书签。 二、设计内容及原理 ................................................................................................................ 错误!未定义书签。 单片机控制系统原理 ...................................................................................................... 错误!未定义书签。 阵键盘识别显示系统概述 ................................................................................................ 错误!未定义书签。 键盘电路 ............................................................................................................................ 错误!未定义书签。 12864显示器 ................................................................................................................... 错误!未定义书签。 整体电路图 ........................................................................................................................ 错误!未定义书签。 仿真结果 ............................................................................................................................ 错误!未定义书签。 三、实验心得与体会 ................................................................................................................ 错误!未定义书签。 四、实验程序 ............................................................................................................................ 错误!未定义书签。参考文献 .................................................................................................................................... 错误!未定义书签。

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告 一、实验目的-------------------------------------------------------------1 二、实验要求-------------------------------------------------------------1 三、实验器材-------------------------------------------------------------1 四、实验电路-------------------------------------------------------------2 五、实验说明-------------------------------------------------------------2 六、实验框图-------------------------------------------------------------2 七、实验程序-------------------------------------------------------------3 八、键盘及LED显示电路---------------------------------------------14 九、心得体会------------------------------------------------------------- 15 十、参考文献--------------------------------------------------------------15

扫描式矩阵键盘课程设计

扫描式矩阵键盘课程设 计 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

4X4扫描式矩阵键盘课程设计课程设计名称: 4_4扫描式矩阵键盘设计 姓名: DUKE 班级:电子1008班 学号: 10086 成绩: 日期: 2014年1月6日 摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号

转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。 目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制---------------------------------------------------------------

实验二 矩阵键盘实验

实验二矩阵键盘实验 一、实验目的 (1)掌握矩阵键盘行列设计方法; (2)掌握矩阵键盘识别方法; (3)掌握矩阵键盘去抖原理; (4)掌握矩阵键盘控制LED或数码管的设计方法; 二、实验原理 电路图参考实验板电路。 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。 三、实验内容 1.编写程序,做到在键盘上每按一个数字键(0-F)用LED数码管将该代码显示出来。按其它键退出。 2.利用Proteus,设计4*4矩阵键盘硬件电路,并仿真实现。

实验四 键盘扫描及显示设计实验报告

实验四键盘扫描及显示设计实验报告 一、实验要求 1. 复习行列矩阵式键盘的工作原理及编程方法。 2. 复习七段数码管的显示原理。 3. 复习单片机控制数码管显示的方法。 二、实验设备 1.PC 机一台 2.TD-NMC+教学实验系统 三、实验目的 1. 进一步熟悉单片机仿真实验软件 Keil C51 调试硬件的方法。 2. 了解行列矩阵式键盘扫描与数码管显示的基本原理。 3. 熟悉获取行列矩阵式键盘按键值的算法。 4. 掌握数码管显示的编码方法。 5. 掌握数码管动态显示的编程方法。 四、实验内容 根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能: 1.扫描键盘输入,并将扫描结果送数码管显示。 2.键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。 实验具体内容如下: 将键盘进行编号,记作 0~F,当按下其中一个按键时,将该按键对应的编号在一个数码 管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数 码管上可以显示最近 4 次按下的按键编号。 五、实验单元电路及连线 矩阵键盘及数码管显示单元

图1 键盘及数码管单元电路 实验连线 图2实验连线图 六、实验说明 1. 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为 5~10ms。这是一个很重要的时间参数,在很多场合都要用到。 键抖动会引起一次按键被误读多次。为了确保 CPU 对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按

经典的矩阵键盘扫描程序

键盘是单片机常用输入设备,在按键数量较多时,为了节省I/O口等单片机资源,一般采取扫描的方式来识别到底是哪一个键被按下。即通过确定被按下的键处在哪一行哪一列来确定该键的位置,获取键值以启动相应的功能程序。 4*4矩阵键盘的结构如图1(实物参考见万用板矩阵键盘制作技巧)。在本例中,矩阵键盘的四列依次接到单片机的P1.0~P1.3,四行依次接到单片机的P1.4~P1.7;同时,将列线上拉,通过10K电阻接电源。 查找哪个按键被按下的方法为:一个一个地查找。 先第一行输出0,检查列线是否非全高; 否则第二行输出0,检查列线是否非全高; 否则第三行输出0,检查列线是否非全高; 如果某行输出0时,查到列线非全高,则该行有按键按下; 根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。 下面是具体程序:

void Check_Key(void) { unsigned char row,col,tmp1,tmp2; tmp1 = 0x10; //tmp1用来设置P1口的输出,取反后使 P1.4~P1.7中有一个为0 for(row=0;row<4;row++) // 行检测 { P1 = 0x0f; // 先将p1.4~P1.7置高 P1 =~tmp1; // 使P1.4~p1.7中有一个为0 tmp1*=2; // tmp1左移一位 if ((P1 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测 { tmp2 = 0x01; // tmp2用于检测出哪一列为0 for(col =0;col<4;col++) // 列检测 { if((P1 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列 { key_val =key_Map[ row*4 +col ]; // 获取键值,识别按键;key_Map为按键的定义表 return; // 退出循环 } tmp2*=2; // tmp2左移一位 } } } } //结束 这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。

键盘扫描电路

键盘扫描电路 设计:2014-4-1 1.电路名称:键盘扫描电路 2.电路概述:(包括遵循的依据或标准,实现的功能) 利用矩阵键盘方式,实现12位按键输入,供用户对电能表进行充值等操作,广泛应用于一体式预付费键盘表及分体式CIU等产品中。 3.工作参数及指标 参比温度23℃±2℃ 4.电路图 5.电路图的工作原理描述: 在上电模式下,程序SW1-SW4一直输出低电平,SW5-SW7检测高低电平,在没有按键被按下的情况下SW5-SW7都被上拉到高电平,当十二位按键中任意一位被按下时,SW1-SW4的低电平通过分压电阻使的SW5-SW7中某位由

高电平变为低电平,程序开始进入按键扫描,逐一使SW1-SW4输出低电平并结合SW-SW7的状态确认哪个按键被按下,程序扫描两次以防止误判。 在掉电模式下(适用于TDK654X系列芯片),由于TDK654X系列芯片进入低功耗后管脚无法控制,因此电路增加D1、D2两个双二级管,用于按键唤醒单片机,当低功耗模式下SW1-SW4无法输出低电平,此时键盘被按下时先通过D1、D2使PB脚电平由低到高变化唤醒单片机,单片机被唤醒后通过上电模式一样的程序扫描方式以确认具体是哪个按键被按下。 图一 图一中坐标1是PB口线的波形,坐标2是SW5口线的波形,在掉电情况下,当按一下S1按键,PB口产生一个3V的高电平脉冲(TDK芯片高电平为2V 以上),唤醒芯片程序初始化SW1-SW4,此时按键被按着因此SW5会有一个低电平脉冲,程序进入扫描后PB由于SW1-SW4轮流输出高的原因使PB持续高电平25ms左右,扫描完一轮后程序进入按键释放期150ms,SW1-SW4全部输出低,因此PB持续150ms低电平,然后程序进入第二轮扫描,由于SW1-SW4轮流输出高电平的原因,PB又会产生一个高电平,且高电平宽度宽度是SW5的4倍,扫描完两轮后又进入按键释放期,此时S1键被释放,程序按键处理完成进入低功耗模式,PB与SW5口线恢复到默认状态。

矩阵键盘键信号检测电路设计-EDA课程设计说明书

课程设计说明书 题目EDA技术与应用系(部) 专业(班级) 姓名 学号 指导教师 起止日期

EDA技术课程设计任务书系(部):专业:指导教师:

目录 引言 (5) 一、绪论 (5) 1.1 FPGA概况 (5) 1.2 此课题的研究意义 (6) 二、矩阵键盘接口电路的原理与总体设计 (6) 2.1 矩阵键盘接口电路的原理 (6) 2.2 总体设计 (8) 三、各模块的设计及仿真 (8) 3.1 键盘扫描电路 (8) 3.2 键盘译码电路和按键标志位产生电路 (11) 3.3 时钟产生模块 (16) 3.4 键盘接口电路顶层电路实现 (18) 四、硬件测试 (19) 五、实验设备 (19) 六、总结 (20) 参考文献 (20)

矩阵键盘键信号检测电路设计 引言 人类文明已进入到高度发达的信息化社会。信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,Electronic Design Automation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。 此设计主要利用VHDL硬件描述语言在EDA平台Quartus II上设计一个4×4阵列键盘扫描电路,将行扫描信号输入阵列键盘,读取列信号的值,输出按键编码,从而判断出按键按下的位置。并且进行模拟仿真,下载到EDA实验箱进行硬件验证。 一、绪论 1.1 FPGA概况 早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(E2PROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。 其后出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与—或”表达式来描述,所以PLD能以乘积和的形式完成大量的组合逻辑功能。 这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。 PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和E2PROM技术。还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。PLA器件既有现场可编程的,也有掩膜可编程的。在PAL的基础上又发展了一种通用阵列逻辑(GAL、Generic ArrayLogic),如GAL16V8、GAL22V10等。它采用了EPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。 为了弥补这一缺陷,20世纪80年代中期,Altera和Xilinx分别推出了类似于PAL结构的扩展型

04陈阳 基于VHDL的键盘扫描及显示电路.

课程设计(论文) 题目名称基于VHDL的键盘扫描及显示电路课程名称专业课程设计III 学生姓名陈阳 学号1041301004 系、专业信息工程系、电子信息工程 指导教师王少杰 2013年11月05日

运VHDL硬件描述语言和图形设计综合方法,实现了4×4键盘扫描电路的程序设计,通过运用QuartusⅡ软件平台生成电路符号,建立波形文件,设置输入端口,实现模拟仿真,得到仿真波形图。 FPGA/ CPLD 在数字系统设计中的广泛应用,影响到了生产生活的各个方面。在FPGA/ CPLD 的设计开发中,VHDL 语言作为一种主流的硬件描述语言,具有设计效率高, 可靠性好, 易读易懂等诸多优点。作为一种功能强大的FPGA/ CPLD 数字系统开发环境,Altera 公司推出的Quart us Ⅱ,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用V HDL 语言进行FPGA/ CPLD 设计提供了极大的便利。矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7 段数码管将按键数值进行显示也是一种常用的数据显示方式。在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。 关键字:VHDL QuartusⅡ;数码管;FPGA/ CPLD;译码器

摘要..................................................... I 第2章方案设计 (1) 1.1 题目分析 (1) 2.2 矩阵键盘及显示电路设计路 (1) 2.3 EDA技术的基本特征 (1) 第3章电路设计 (2) 2.1矩阵键盘及显示电路的实现 (2) 2.2矩阵键盘及显示电路的电路符号 (2) 2.3数码管显示译码模块设计 (2) 第4章程序设计 (4) 3.1键盘扫描模块程序、原理图及仿真波形 (4) 3.2整体电路程序 (9) 第5章仿真及结果 (11) 第6章结束语 (12) 参考文献......................................... . (13)

相关文档
最新文档