基于VHDL的键盘扫描电路设计
vhdl 4x4键盘扫描程序
WHEN "0100" =>
dyp_tmp <= "1100100";
WHEN "0101" =>
dyp_tmp <= "1001000";
BEGIN
row <= scan_key;
--dyp <= dyp_tmp;
ledct<="000001";
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk = '1')THEN
div_cnt <= div_cnt + 1;
WHEN "0110" =>
dyp_tmp <= "0001000";
WHEN "0111" =>
dyp_tmp <= "1100011";
WHEN "1000" =>
WHEN "0001" =>
dyp_tmp <= "1100111";
WHEN "0010" =>
dyp_tmp <= "0010010";
WHEN "0011" =>
key_code <= "1101";
WHEN "1011" =>
key_code <= "1110";
键盘扫描及计算器VHDL仿真
简易计算器设计——EDA实验报告一、实验内容实验要求:完成个位数的加减乘运算,输入用矩阵键盘,输出用数码管显示,每输入一次数据要显示在数码管上。
矩阵键盘共16个按键,用其中10个做个位数的输入,用3个分别做加减乘运算,用其中1个做等于操作,各位数的运算结果最多两位,用动态扫描数码管显示运算结果。
二、小组成员三、实现方法系统组成及连接原理如图所示,主要由由七个功能模块组成:分频模块(为键盘扫描模块和防抖模块提供时钟)、键盘扫描驱动模块(依次置零)、键盘按键值编码模块、键盘编码值防抖模块、运算模块,数码管显示驱动模块、动态扫描驱动模块。
1.分频模块由于FPGA实验板的原始时钟频率高达33.8688MHz,所以不能直接接入设计模块中使用,就需要用到分频模块。
将33.8688MHz分频到4KHz和10Hz来使用,一个用于行驱动扫描时钟,一个用于防抖模块。
所以,采用写一个可变分频元件来调用。
元件视图:主要代码如下(完整代码见附录,下同):architecture RTL of freq_division iscomponent fredivn isgeneric(n:positive);Port ( clkin:in STD_LOGIC;clkout:out STD_LOGIC);end component;beginU1:fredivngeneric map(n=>3)port map(clkin=>clk,clkout=>clkout_kb);end RTL;仿真结果如下图:达到预期的目的2.行驱动模块(依次对行置零):键盘扫描的原理就是检测行列信号然后判断出具体是按下了哪一个按键。
所以,对行依次置零,当置零频率较快时,按下某一个按键后,一定能得到某一列的信号输出为零,如下图:当行信号为1110时,若按下了0键,就会得到1110的列信号,立马就快可以译码出按键值,若按下4键、8键、C键则都不会有输出。
实验二 键盘扫描实验
实验二键盘扫描实验一、实验目的 熟悉 VHDL 的语法和编译排错,重点掌握组合逻辑中显示译码器的设计。
附加学习 键盘和数码管显示控制。
二、实验内容 1. 设计一个 BCD 码到 LED 的七段译码器,非 BCD 值时仅 G 段亮(输出为“—” ) 。
2. 下载验证键盘显示实验。
3. 改写程序,将学号的数据固定地显示在 1-8 位数码管上。
4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。
三、实验步骤 1. 用文本输入法,在键盘显示程序的译码部分,分别用三种语法填写 BCD 到 LED 的译 码器。
三种语法为 When else、With select、Case,建议使用模板。
每一种都需编 译通过提交程序。
2. 选一种语法,编译,绑定引脚,下载验证结果。
3. 改写程序,将 0--7 的数据固定地显示在 1-8 位数码管上。
编译、下载验证结果。
4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。
编译、下载验证结果。
四、实验硬件图图 1 4x4 键盘图 2 数码管动态显示原理框图一种推荐的适配卡连线如下表所示: 输 信 号 CLK1 入 对应芯片引 入 名 端子名 端 子 名 PIN_A20 10HZ 功 能 时钟 输 信 号 出 名 对应芯片 引 入 功 端 子 名 端子名 PIN_C1 PIN_B1 PIN_C3 PIN_E5 PIN_B3 PIN_B4 PIN_A16 PIN_C17 PIN_A17 PIN_A18 PIN_A7 PIN_A8 PIN_A9 PIN_A10 C D E F G H C1 C2 C3 C4 R1 R2 R3 R4 键盘行 能 段选 段选 段选 段选 段选 段选 键盘列LED_SEG[2] LED_SEG[3] LED_SEG[4]LED_BIT[0] PIN_G4 LED_BIT[1] PIN_E3 LED_BIT[2] PIN_D2 LED_BIT[3] PIN_C2 LED_BIT[4] PIN_B2 LED_BIT[5] PIN_C4 LED_BIT[6] PIN_E6 LED_BIT[7] PIN_A3 LED_SEG[0] PIN_G3 LED_SEG[1] PIN_E4BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7 BIT8 A B位选 1 位选 2 位选 3 位选 4 位选 5 位选 6 位选 7 位选 8 段选 段选LED_SEG[5] LED_SEG[6] LED_SEG[7] KEYCOL[0] KEYCOL[1] KEYCOL[2] KEYCOL[3] KEYROW[1] KEYROW[2] KEYROW[3] KEYROW[4]五、实验文件(需要填写译码部分) KEYSCAN 时钟扫描程序 文件名:KEYSCAN.VHD library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity KEYSCAN is port ( CLK1: in STD_LOGIC; KEYROW1,KEYROW2,KEYROW3,KEYROW4: in STD_LOGIC;--键盘行接口 KEYCOL: out STD_LOGIC_VECTOR (3 DOWNTO 0);--键盘列接口 LED_BIT: out STD_LOGIC_VECTOR (7 DOWNTO 0); --LED 位选接口 LED_SEG: out STD_LOGIC_VECTOR (7 DOWNTO 0)); --LED 段选接口 end KEYSCAN; architecture KEYSCAN_ARCH of KEYSCAN is SIGNAL SEG : STD_LOGIC_VECTOR (6 DOWNTO 0);--LED 段选 SIGNAL BIT : STD_LOGIC_VECTOR (2 DOWNTO 0);--LED 位选 SIGNAL NUM : STD_LOGIC_VECTOR (3 DOWNTO 0);--显示数字 SIGNAL COUNT : STD_LOGIC_VECTOR (4 DOWNTO 0);--计数脉冲 SIGNAL COUNT0 : STD_LOGIC; --计数脉冲最低位 LSB SIGNAL COL: STD_LOGIC_VECTOR (1 DOWNTO 0); --键盘列begin --计数器模块 PROCESS (CLK1) BEGIN IF CLK1'event AND CLK1 = '1' THEN COUNT <= COUNT+1; END IF; END PROCESS; --计数器模块 --键盘模块 COL <=COUNT(3 DOWNTO 2); KEYCOL <= "1110" WHEN COL = 0 ELSE "1101" WHEN COL = 1 ELSE "1011" WHEN COL = 2 ELSE "0111" WHEN COL = 3 ELSE "1111"; COUNT0 <= COUNT(0); PROCESS (count0,COUNT,KEYIN1,KEYIN2) BEGIN IF COUNT0'event and (COUNT0 = '1')THEN --分四行扫描 IF (KEYROW1 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "00"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); --COUNT(1 DOWNTO 0)只起分频延时的作用 ELSIF (KEYROW2 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "01"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW3 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "10"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW4 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "11"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); END IF; END IF; END PROCESS; --键盘模块--显示模块 BIT <= COUNT(4 DOWNTO 2); --位选扫描信号 LED_BIT <= "11111110" WHEN BIT = 0 ELSE "11111101" WHEN BIT = 1 ELSE "11111011" WHEN BIT = 2 ELSE "11110111" WHEN BIT = 3 ELSE "11101111" WHEN BIT = 4 ELSE "11011111" WHEN BIT = 5 ELSE "10111111" WHEN BIT = 6 ELSE "01111111" WHEN BIT = 7 ELSE "11111111"; --译码部分请填写完整 --pgfedcba --参考码表 0-f 十六进制 --3FH 06H 5BH 4FH --6FH 77H 7CH 39H --参考码表 0-f 二进制 --0111111 0000110 1011011 --1111111 1101111 1110111--位选扫描信号译码66H 6DH 7DH 07H 5EH 79H 71H 1001111 11111007FH1100110 1101101 1111101 0000111 0111001 1011110 1111001 1110001--译码部分完,输出到 LED 段选,同时选通位选端 LED_SEG(6 DOWNTO 0)<=SEG; LED_SEG(7) <= '0'; --显示模块 end KEYSCAN_ARCH; 六、实验注意事项 程序较大,结合电路理解很费时间,应事先预习。
使用可编程逻辑器件实现矩阵键盘扫描模块的设计
使用可编程逻辑器件实现矩阵键盘扫描模块的设计给出了CPLD 部分模块的VHDL 语言实现和仿真波形。
在矩阵键盘的扫描、编码、输出完全不需CPU 控制的前提下,实现标准键盘和矩阵键盘双键盘同时使用。
在基于PC104 的便携式野外测试设备的设计中,键盘是常用的输入设备。
对于便携式设备野外工作时,一般使用小型(4×4)矩阵键盘就能满足设备的信息输入需要;室内调试时,使用标准PS2 键盘更方便、灵活。
一般的做法是保留PC104 的键盘接口用于接标准键盘,利用扩展I/O接口完成小矩阵键盘的扫描和输入。
这样做虽然可以实现设备双键盘同时工作的功能,却需耗费大量的CPU 处理时间扫描矩阵键盘,造成CPU 处理其他信息的能力下降。
而本文设计的基于CPLD 的矩阵键盘扫描模块能够很好地解决上述问题。
1 矩阵键盘扫描原理图1 给出了4×4 矩阵键盘的电路图,在图1 中KX[3..0]为扫描码输入,KY[3..0]为扫描码输出。
键盘扫描开始时,首先置KX[3..0]=“0000”;键盘扫描码寄存器和键盘扫描码缓存器Kreg[15..0]和Kscan[15..0]置成“1111111111111111”(全1为没有键按下,有键按下时至少有一位为0),一旦有键按下,KY[3..0]输出不全为“0”的扫描码触发键盘扫描功能开始键盘扫描,扫描开始后,依次将KX3、KX2、KX1、KX0 置“0”,分别将对应的4 组KY[3..0]输入值保存于Kscan[15..12]、Kscan[11..8] 、Kscan[7..4] 、Kscan[3..0]中,而后比较Kscan 和Kreg 的大小,如果Kscan 小于Kreg,将Kscan 保存于Kreg 中,重复上述扫描过程直到Kscan[15..0]各位输出全为“1”时,说明按下的键全部抬起,Kreg[15..0]中的每一个为“0”的位对应一个按下的键,保留扫描过程中的Kreg 最小值就可以处理组合键。
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)第1章前言1.1EDA技术的介绍EDA是Electronic Design Automation的缩写,中文译为电子设计自动化,是现代电子设计技术的有力工具。
键盘扫描的VHDL实现
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jp isport(clk,start:in std_logic;kbcol:in std_logic_vector(3 downto 0); --行扫描信号kbrow:out std_logic_vector(3 downto 0); --列扫描信号seg7_out:out std_logic_vector(6 downto 0);--显示控制信号scan:out std_logic_vector(7 downto 0) --数码管地址选择控制信号);end jp;architecture one of jp issignal count,sta:std_logic_vector(1 downto 0);signal seg7:std_logic_vector(6 downto 0);signal dat:std_logic_vector(4 downto 0);signal fn:std_logic; --按键标志位,判断是否有键被按下beginscan<="00000001"; --只使用一个数码管显示--循环扫描计数器process(clk)beginif clk'event and clk='1'thencount<=count+1;end if;end process;--循环列扫描process(clk)beginif clk'event and clk='1'thencase count iswhen "00"=>kbrow<="0001";sta<="00";when "01"=>kbrow<="0010";sta<="01";when "10"=>kbrow<="0100";sta<="10";when "11"=>kbrow<="1000";sta<="11";when others=>kbrow<="1111";end case;end if;end process;--行扫描译码process(clk,start)beginif start='0'thenseg7<="0000000";elsif clk'event and clk='1'thencase sta iswhen "00"=>case kbcol iswhen "0001"=>seg7<="1111001";dat<="00011";when "0010"=>seg7<="1101101";dat<="00010";when "0100"=>seg7<="0110000";dat<="00001";when "1000"=>seg7<="1111110";dat<="00000";when others=>seg7<="0000000";dat<="11111";end case;when "01"=>case kbcol iswhen "0001"=>seg7<="1111000";dat<="00111";when "0010"=>seg7<="1011111";dat<="00110";when "0100"=>seg7<="1011011";dat<="00101";when "1000"=>seg7<="0110011";dat<="00100";when others=>seg7<="0000000";dat<="11111";end case;when "10"=>case kbcol iswhen "0001"=>seg7<="0011111";dat<="01011";when "0010"=>seg7<="1110111";dat<="01010";when "0100"=>seg7<="1111011";dat<="01001";when "1000"=>seg7<="1111111";dat<="01000";when others=>seg7<="0000000";dat<="11111";end case;when "11"=>case kbcol iswhen "0001"=>seg7<="1000111";dat<="01111";when "0010"=>seg7<="1001111";dat<="01110";when "0100"=>seg7<="0111101";dat<="01101";when "1000"=>seg7<="1001110";dat<="01100";when others=>seg7<="0000000";dat<="11111";end case;when others=>seg7<="0000000";end case;end if;end process;--产生按键标志位,用于存储按键信息fn<=not (dat(0) and dat(1) and dat(2) and dat(3) and dat(4));process(fn)beginif fn'event and fn='1'then --按键信息存储seg7_out <=seg7;end if;end process;end one;。
基于VHDL语言的键盘控制电路的设计报告
长沙理工大学 EDA技术与应用课程设计报告课题:基于VHDL语言的键盘控制电路的设计(24)学院:计算机与通信工程学院组员姓名及学号:段强强(200954080326)雷淑英(200954080301)胡超(200954080325)指导老师:单树民2011 年 10 月目录1、前言(写在前面) (2)2、项目工作的分类 (2)3、基于VHDL语言的键盘控制电路的设计思路 (3)4、设计的实现 (4)5、项目设计的总结及评价 (9)一、写在前面此次项目的计划、设计、以及实现的整个过程均由我组人员段强强、雷淑英、胡超三人通力合作,在此过程中虽然每个人的分工不同,耗时长短不同,但一切设计与实现均是在三人的共同参与下进行,三人齐心协力,努力为将项目做的更好的目标而努力。
同时,在项目的进行过程中,得到了老师和各位同学的热心帮助,在此对他们表示衷心的感谢。
二、项目工作的分类1、项目预备资料的收集与整理。
2、项目设计方案的斟酌与确定。
3、项目程序的设计与更改。
4、项目程序的仿真5、项目设计报告的书写与更改。
三、基于VHDL语言的键盘控制电路的设计思路1、此键盘为5*5的矩阵键盘,每个键的按下与否由这个键的行电平和列电平联合决定,当按下时为低电平“0”,没有按下时为高电平“1”。
行向量为y,列向量为x,长度都为5。
当有键按下时,检测x,y的值以确定哪个键按下。
将输入x,y并置作为判决条件,并对每一个键进行编码,送入输出变量s。
2、5*5键盘的25个键位分别为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,+,-,*,/,←,=,>,<,&。
x,y的值都为0000~11111,其中,x与y每次最多只能有一位为零方有效。
然后对25个键分别编码,以确定x,y的值变化时s相应的值。
3、此键盘前十个数字键不止有数字键的功能,同时在shift键的作用下还可以依次为以下10个键:!,^, (, ), _, [ , ], #, {, }。
VHDL独立按键扫描
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity key isport(A,B,C,D:in std_logic;--键盘模块的四个外接按键,编号依次是A、B、C、D clk_key:in std_logic;--时钟信号,作为消抖计时key_value:out std_logic_vector(1 downto 0);--输出按键值out_clk:out std_logic:='0'--键值传送脉冲信号,宽度为8个时钟信号周期_| |____);end entity;architecture art of key issignal key_value_1:std_logic_vector(1 downto 0);signal abcd:std_logic_vector(3 downto 0);beginabcd<=A&B&C&D;--------------------------------------------------------------------process(clk_key)variable counter: std_logic_vector(15 downto 0);variable state:integer range 4 downto 0;beginif rising_edge(clk_key)thencase state iswhen 0 => if (abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0') thenstate:=1;else state:=0;end if;when 1 => if counter>="1111111111111110" thenstate:=2;counter:="0000000000000000";else counter:=counter+1;state:=1;end if;when 2 => if abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0' thencase abcd iswhen "0111"=>key_value_1<="00";state:=3;when "1011"=>key_value_1<="01";state:=3;when "1101"=>key_value_1<="10";state:=3;when "1110"=>key_value_1<="11";state:=3;when others=>state:=0;end case;else state:=0;end if;when 3 => if (abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0')thenif counter>="0000000000000011"then -----------------------------------------counter:="0000000000000000";out_clk<='1';else counter:=counter+1;end if;state:=3;elsestate:=4;out_clk<='1';end if;when 4 => if counter>="0000000000000111" thenstate:=0;counter:="0000000000000000";out_clk<='0';else counter:=counter+1;state:=4;end if;end case;end if;end process;--------------------------------------------------------------------------------process(key_value_1)beginif clk_key'event and clk_key='0' thenkey_value<=key_value_1;end if;end process;end art;。
基于VHDL的矩阵键盘及显示电路设计
基于VHDL的矩阵键盘及显示电路设计摘要:为了有效防止机械式键盘按键抖动带来的数据错误,这里在Quartus ?开发环境下,采用VHDL 语言设计了一种能够将机械式4 ×4 矩阵键盘的按键值依次显示到8 个7 段数码管上的矩阵键盘及显示电路。
仿真结果表明,所设计的矩阵键盘及显示电路成功地实现了按键防抖和按键数据的准确显示。
以ACEX1K系列EP1K30QC208 芯片为硬件环境,验证了各项设计功能的正确性。
FPGA/ CPLD 在数字系统设计中的广泛应用,影响到了生产生活的各个方面。
在FPGA/ CPLD 的设计开发中,V HDL 语言作为一种主流的硬件描述语言,具有设计效率高, 可靠性好, 易读易懂等诸多优点。
作为一种功能强大的FPGA/ CPLD 数字系统开发环境,Altera 公司推出的Quart us ?,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用V HDL 语言进行FPGA/ CPLD 设计提供了极大的便利。
矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7 段数码管将按键数值进行显示也是一种常用的数据显示方式。
在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。
本文在Quart us ?开发环境下,采用V HDL语言设计了一种按键防抖并能连续记录并显示8 次按键数值的矩阵键盘及显示电路。
1 矩阵键盘及显示电路设计思路矩阵键盘及显示电路能够将机械式4 ×4矩阵键盘的按键值依次显示到8 个7段数码管上,每次新的按键值显示在最右端的第0 号数码管上,原有第0,6号数码管显示的数值整体左移到第1,7号数码管上显示,见图1 。
总体而言,矩阵键盘及显示电路的设计可分为4 个部分:(1) 矩阵键盘的行及列的扫描控制和译码。
该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。
VHDL扫面显示电路设计报告
电子科技大学学生姓名:学号:指导教师:一、实验室名称:实验报告二、实验项目名称:扫描显示电路设计三、实验原理:数码显示板上一共有8 个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要8 个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。
所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。
动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。
因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。
而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。
事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。
为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。
动态数码扫描显示的硬件电路设计要求是:对共阴数码管,将其公共端阴极接三八译码器的输出,三八译码器的输入为位选信号输入;将8 个(或更多)的数码管的相同段接在一起,然后引出。
原理图如下:四、实验目的:1、进一步熟悉用VHDL进行EDA设计方法;2、本实验与实验二的不同之处在八个数码管都要稳定地显示;3、进一步了解EDA实验箱的基本功能;五、实验内容:1、用VHDL设计一个扫描显示电路,使得八个数码管能同时显示(要求显示的值为自己的学号+100,如学号为1,则数码管显示101,多出的数码管全显示0),然后编译、仿真;2、下载该程序,验证程序是否正确。
3、请事先准备一个软盘或优盘,本实验程序需要保存,后面实验需要用到。
基于VHDL的键盘扫描及显示电路设计
取消所有断点。
断点设置完毕后,按F5键或点击Debug下的GO,程序将执行到断点处停止,这时寄存器窗口中sec的值便是定时时间(10ms),如图16所示。
在μV2仿真环境下可以真实地模拟单片机定时器的工作状态。
6.单片机串行通信的模拟仿真Keil C51的μV2调试器提供了对单片机串行通信的模拟仿真,当源程序编译通过后,鼠标单击菜单栏的Debug/Start DebugSession,进入模拟调试环境并选择Peripherals/Serial,打开Serial串口参数窗口,如图17所示,其中Mode栏里表示单片机的通信方式,“8 bit var ,baudrate”表示当前的通信格式是8位,速率可变。
SBUF栏内的数值即为单片机发送的数据,Baudrate栏中的Audrate框里的数值为通信速率,IRQ代表中断标志TI或RI。
当然你也可以在命令栏中键入“SBUF”来随时观察SBUF缓存器的数据,如图18。
一般情况下在命令栏中键入“SBUF”看到的是单片机的发送数据,如果要给单片机发送数据,并观察数据运行结果,可采用“SIN”指令。
假设发到单片机的数据是01H,如果你想模拟这个过程,可以在命令栏中键入“SIN=0X01”,这时单片机通过串口收到的数据即是“01H”,然后可以在μV2环境下采图18图17用单步或其它方式调试程序,可一目了然地看到单片机串口参数的变化过程。
在μV2下通过这种调试程序的方法可以准确地模拟通信口的发送和接收数据的全过程。
总之, Keil公司的μVision2内嵌的单片机软件仿真器可以真实地模拟单片机的工作过程及状态,在许多场合下甚至可以不使用硬件仿真器,仅仅通过在μV2下的模拟调试便可以完成一个中小规模的单片机项目的调试工作,提高了单片机的开发效率。
◆VHDL语言是一种标准硬件描述语言,本文介绍的是用VHDL来对键盘扫描电路进行描述的设计。
矩阵式键盘是一种常见的输入装置,在日常生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。
基于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 DATA[6..0]out 数码管译码显示译码7bit输出DASP SEL[1..0] out数码管扫描输出2bit二、设计思路:1.循环输出行信号,检测列信号输入,将行列信号相并。
2.译键值。
3.去抖动。
在译没一个键值后,为了防止抖动,加了一个计算环节,一旦检测到列信号后,译码,紧跟着进入计数环节,此时键抖动不会进入其他环节,这样可以防止抖动。
4.数码管译码、循环显示。
基于VHDL的矩阵键盘及显示电路设计
基于VHDL的矩阵键盘及显示电路设计作者:张喜凤, 屈宝鹏来源:《现代电子技术》2010年第16期摘要:为了有效防止机械式键盘按键抖动带来的数据错误,这里在Quartus Ⅱ开发环境下,采用VHDL语言设计了一种能够将机械式4×4矩阵键盘的按键值依次显示到8个7段数码管上的矩阵键盘及显示电路。
仿真结果表明,所设计的矩阵键盘及显示电路成功地实现了按键防抖和按键数据的准确显示。
以ACEX1K系列EP1K30QC208芯片为硬件环境,验证了各项设计功能的正确性。
关键词:VHDL; 键盘; 按键防抖; 数码管中图分类号:TN710-34; TP332.1+2 文献标识码:A 文章编号:1004-373X(2010)16-0014-03Design of the Matrix Keyboard and Display Circuit Based on VHDLZHANG Xi-feng,QU Bao-peng(Electronics Engineer Department of Shaanxi Ins titute of Technology, Xi’an 710300,China)Abstract:The application of the FPGA/CPLD becomes more and more extensive in the design of digital system, and it has affected our life deeply. The data inputted by matrix keyboard and displayed by digital tube, the design is applied widely in electron equipments. In order to avoid the data mistakes resulted by the key-press shake, a matrix keyboard and display circuit which can display the key-press input data produced by 4×4 matrix keyboard in turn with 8 word 7-seg display was designed with the language of VHDL in the environment of Quartus Ⅱ. The simulation results indicate that the matrix keyboard and display circuit designed in this paper realized the key-press anti-shake and exact display. Finally, validity of whole designed functions was validated with the EP1K30QC208 chip of ACEX1K series.Keywords:VHDL; keyboard; anti-shake; digital tube收稿日期:2010-03-12FPGA/CPLD在数字系统设计中的广泛应用,影响到了生产生活的各个方面[1-4]。
矩阵式键盘扫描与键码检测(VHDL)
《现代数字系统设计》实验题目:矩阵式键盘扫描与键码检测要求:当按下某键时,在LED 上显示该键的键码。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jianpan isport( clk : in std_logic;hang: in std_logic_vector(3 downto 0);lie: buffer std_logic_vector(3 downto 0);show_out : out std_logic_vector(7 downto 0));end jianpan;architecture jpdisplay of jianpan issignal a,b: std_logic_vector (1 downto 0);signal show: std_logic_vector (7 downto 0);signal clk_1k : std_logic;beginprocess (clk)variable cou : integer :=0 ;beginif rising_edge(clk) thenif( cou= 9999 ) thencou:= 0;clk_1k <= not clk_1k;elsecou := cou+1;end if;end if;end process;process(clk_1k)beginif(clk_1k'event and clk_1k='1') thenif(a="11")then a<="00";else a<=a+1;end if;end if;end process;process(clk_1k)begincase a iswhen "00"=>lie<="0001";b<="00";when "01"=>lie<="0010";b<="01";when "10"=>lie<="0100";b<="10";when "11"=>lie<="1000";b<="11";when others=>show<="00000000";end case;end process;process(clk_1k)begincase b iswhen "00" =>case hang iswhen "0001"=>show<="00111111"; --0when "0010"=>show<="00000110"; --1when "0100"=>show<="01011011"; --2when "1000"=>show<="01001111"; --3when others=>show<="00000000";end case;when "01" =>case hang iswhen "0001"=>show<="01100110"; --4when "0010"=>show<="01101101"; --5when "0100"=>show<="01111101"; --6when "1000"=>show<="00000111"; --7when others=>show<="00000000";end case;when "10" =>case hang iswhen "0001"=>show<="01111111"; --8when "0010"=>show<="01101111"; --9when "0100"=>show<="01110111"; --awhen "1000"=>show<="01111100"; --bwhen others=>show<="00000000";end case;when "11" =>case hang iswhen "0001"=>show<="00111001"; --cwhen "0010"=>show<="01011110"; --dwhen "0100"=>show<="01111001"; --ewhen "1000"=>show<="01110001"; --fwhen others=>show<="00000000";end case;when others=> show<="00000000";end case;show_out <= show;end process;end jpdisplay;。
基于VHDL的键盘扫描电路设计教材
毕业论文(设计)题目:基于VHDL的键盘扫描电路设计系:机电工程系学生姓名:专业:电子信息工程班级:指导教师:起止日期: 2012.10.15——2013.01.06 2013年1 月6 日基于VHDL的键盘扫描电路设计(东海科学技术学院机电工程系,浙江舟山 316000)摘要随着科技的发展,时代的进步,生活的需要,在我们生活的很多地方领域,都有键盘的应用,而且它的应用非常广,当然键盘扫描的方法也有很多种。
键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可以使仪器设备的操作变得更为简单、方便、快捷,很大程度上提高系统综合性能。
随着信息产业和微电子技术的发展,很多系统设计技术已经成为信息产业最热门的技术之一,在很多地方上都有应用,比如航空航天、医疗保健、通讯、广播、工业、测量测试等很多热门领域。
并且随着工艺的进步和技术的发展,向更广泛的应用领域扩展。
本次设计主要是运用VHDL硬件描述语言和图形设计综合方法,在MAX+PLUSⅡ软件平台的环境下建立波形文件,生成电路符号,设置输入端口,实现程序的模拟仿真,得到仿真波形图,才完成了键盘扫描电路的程序设计。
这个电路设计是一个关于小型的计算器的键盘按键电路的设计,主要由5个部分组成,它们分别为分频器电路、键盘扫描计数器电路、按键检测电路、按键抖动消除电路和键盘编码电路。
本次设计主要是设计一个4×4矩阵式的键盘扫描电路,它具有列扫描和行扫描的功能,有2个输入端口,分别为clk和col,同时也有2个输出端口,分别为row和bianma,按下按键的数据通过端口行、列线输入到FPGA芯片中去,FPGA芯片内部的扫描模块会将数据传送到编码器中进行编码,最终完成本次电路的设计。
在生活中是这种小型的计算器是非常常用的,虽然体型很小,但却被广泛的使用,很多其他的东西都是在这种小型的计算器的键盘的基础上设计的。
关键词:键盘扫描;VHDL;MAX+PLUSⅡ;仿真AbstractWith the development of science and technology, the progress of the times, the need of the life, we live in a lot of place fields, there are keyboard application, but its application is very wide, of course, the keyboard scanning method also has a lot of, the keyboard is the design of single-chip microcomputer system a main information input interface, a reasonable design, not only can save the design cost of system, it can make the equipment operation more simple, convenient, fast, greatly improve the overall system performance. With the development of information industry and the development of microelectronic technology, a lot of system design technology has become the information industry one of the hottest technologies, in many places have applications, such as aerospace, medical care, communication, broadcast, industrial, testing and many other hot areas. And with the technology progress and technology development, to the more widespread application domain expansion.The main design is the use of VHDL hardware description language and graphic design method in the MAX+PLUS software platform, established under the wave file, generating circuit symbols, set the input port, procedures to achieve the simulation, get the simulation waveform, to complete the keyboard scanning circuit design program. The circuit design is a small calculator keyboard circuit design, mainly is composed by 5 parts, which respectively as the divider circuit, keyboard scan counter circuit, key detection circuit, key jitter elimination circuit and keyboard coding circuit. The design is the design of a 4 x 4 matrix keyboard scanning circuit, it has a column scanning and scanning function, having 2 input ports, respectively CLK and col, but also has 2 output ports, respectively row and bianma, press the key data through the port line, line input to the FPGA chip, FPGA chip inside the scanning module can transmit data to the encoder for encoding, the final completion of the circuit design. In life is such a small calculator is very common, though very small in size, but it is widely used, many other things are in such a small calculator keyboard design based on.Key words:keyboard scan; VHDL ; MAX+PLUS Ⅱ;simulation目录第1章绪论 (1)1.1研究的意义和背景 (1)1.2键盘在国内外的发展状况 (1)1.3本课题研究的主要问题 (2)第2章键盘扫描电路总体设计 (3)2.1 设计工具的简介 (3)2.1.1VHDL硬件描述语言 (3)2.1.2MAX+PLUSⅡ的简介 (3)2.1.3FPGA芯片的介绍 (5)2.2键盘扫描电路的基本流程 (7)2.3键盘扫描电路的原理框图 (8)第3章键盘扫描电路的模块电路设计 (10)3.1分频器电路 (10)3.2键盘扫描计数器电路 (11)3.3按键检测电路 (12)3.4按键抖动消除电路 (13)3.5 键盘编码电路 (13)3.6 扫描电路总电路图 (14)第4章顶层设计 (16)4.1端口定义 (16)4.2仿真结果 (17)4.3电路符号 (17)第5章软件调试 (18)5.1 分频器电路中 (18)5.2键盘扫描计数器电路中 (19)5.3按键检测电路中 (20)5.4按键抖动消除电路中 (20)5.5键盘编码电路中 (21)总结 (23)致谢 (24)[参考文献] (25)附录 (26)第1章绪论1.1研究的意义和背景键盘与我们的生活息息相关,可以说是在我们的生活中是无处不在的,比如说手机键盘、电视机的键盘、电脑的键盘等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业论文(设计)题目:基于VHDL的键盘扫描电路设计系:机电工程系学生姓名:专业:电子信息工程班级:指导教师:起止日期: 2012.10.15——2013.01.06 2013年1 月6 日基于VHDL的键盘扫描电路设计(东海科学技术学院机电工程系,浙江舟山 316000)摘要随着科技的发展,时代的进步,生活的需要,在我们生活的很多地方领域,都有键盘的应用,而且它的应用非常广,当然键盘扫描的方法也有很多种。
键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可以使仪器设备的操作变得更为简单、方便、快捷,很大程度上提高系统综合性能。
随着信息产业和微电子技术的发展,很多系统设计技术已经成为信息产业最热门的技术之一,在很多地方上都有应用,比如航空航天、医疗保健、通讯、广播、工业、测量测试等很多热门领域。
并且随着工艺的进步和技术的发展,向更广泛的应用领域扩展。
本次设计主要是运用VHDL硬件描述语言和图形设计综合方法,在MAX+PLUSⅡ软件平台的环境下建立波形文件,生成电路符号,设置输入端口,实现程序的模拟仿真,得到仿真波形图,才完成了键盘扫描电路的程序设计。
这个电路设计是一个关于小型的计算器的键盘按键电路的设计,主要由5个部分组成,它们分别为分频器电路、键盘扫描计数器电路、按键检测电路、按键抖动消除电路和键盘编码电路。
本次设计主要是设计一个4×4矩阵式的键盘扫描电路,它具有列扫描和行扫描的功能,有2个输入端口,分别为clk和col,同时也有2个输出端口,分别为row和bianma,按下按键的数据通过端口行、列线输入到FPGA芯片中去,FPGA芯片内部的扫描模块会将数据传送到编码器中进行编码,最终完成本次电路的设计。
在生活中是这种小型的计算器是非常常用的,虽然体型很小,但却被广泛的使用,很多其他的东西都是在这种小型的计算器的键盘的基础上设计的。
关键词:键盘扫描;VHDL;MAX+PLUSⅡ;仿真AbstractWith the development of science and technology, the progress of the times, the need of the life, we live in a lot of place fields, there are keyboard application, but its application is very wide, of course, the keyboard scanning method also has a lot of, the keyboard is the design of single-chip microcomputer system a main information input interface, a reasonable design, not only can save the design cost of system, it can make the equipment operation more simple, convenient, fast, greatly improve the overall system performance. With the development of information industry and the development of microelectronic technology, a lot of system design technology has become the information industry one of the hottest technologies, in many places have applications, such as aerospace, medical care, communication, broadcast, industrial, testing and many other hot areas. And with the technology progress and technology development, to the more widespread application domain expansion.The main design is the use of VHDL hardware description language and graphic design method in the MAX+PLUS software platform, established under the wave file, generating circuit symbols, set the input port, procedures to achieve the simulation, get the simulation waveform, to complete the keyboard scanning circuit design program. The circuit design is a small calculator keyboard circuit design, mainly is composed by 5 parts, which respectively as the divider circuit, keyboard scan counter circuit, key detection circuit, key jitter elimination circuit and keyboard coding circuit. The design is the design of a 4 x 4 matrix keyboard scanning circuit, it has a column scanning and scanning function, having 2 input ports, respectively CLK and col, but also has 2 output ports, respectively row and bianma, press the key data through the port line, line input to the FPGA chip, FPGA chip inside the scanning module can transmit data to the encoder for encoding, the final completion of the circuit design. In life is such a small calculator is very common, though very small in size, but it is widely used, many other things are in such a small calculator keyboard design based on.Key words:keyboard scan; VHDL ; MAX+PLUS Ⅱ;simulation目录第1章绪论 (1)1.1研究的意义和背景 (1)1.2键盘在国内外的发展状况 (1)1.3本课题研究的主要问题 (2)第2章键盘扫描电路总体设计 (3)2.1 设计工具的简介 (3)2.1.1VHDL硬件描述语言 (3)2.1.2MAX+PLUSⅡ的简介 (3)2.1.3FPGA芯片的介绍 (5)2.2键盘扫描电路的基本流程 (7)2.3键盘扫描电路的原理框图 (8)第3章键盘扫描电路的模块电路设计 (10)3.1分频器电路 (10)3.2键盘扫描计数器电路 (11)3.3按键检测电路 (12)3.4按键抖动消除电路 (13)3.5 键盘编码电路 (13)3.6 扫描电路总电路图 (14)第4章顶层设计 (16)4.1端口定义 (16)4.2仿真结果 (17)4.3电路符号 (17)第5章软件调试 (18)5.1 分频器电路中 (18)5.2键盘扫描计数器电路中 (19)5.3按键检测电路中 (20)5.4按键抖动消除电路中 (20)5.5键盘编码电路中 (21)总结 (23)致谢 (24)[参考文献] (25)附录 (26)第1章绪论1.1研究的意义和背景键盘与我们的生活息息相关,可以说是在我们的生活中是无处不在的,比如说手机键盘、电视机的键盘、电脑的键盘等等。
按键就是一组排列好的不同功能的键,将外在的信号输入到终端,继而送入一个预定的系统中[1]。
键盘是最常见的计算机输入设备,它被广泛的应用在微型计算机和各种终端设备上,计算机操作者可以通过键盘向计算机输入各种指令、数据,指挥计算机的工作。
键盘扫描是单片机技术的一种基本处理方法,而键盘扫描的方法有很多种,说到键盘扫描相信大多数人第一反应差不多都是行列矩阵扫描,行列扫描法是什么呢?把按键键盘排列成n行、m列的n*m行列点乘矩阵,同时n行、m列的线分别连接到两个并行接口双向传送的连接线上去,这样情况下点阵上的按键一旦被按下,就说明按键所在的行列点阵信号已经接通。
按键作为一种普通的外部输入设备,在应用中是不可或缺的,它是控制者用来操作或是发布指令的一个传媒,是人机交互应用的结合点[2]。
按键所排列成的矩阵,需要用硬件或软件的方法轮转顺序地对其行、列分别进行扫描,以查询和确认是否有键按动。
如有键按动,键盘会向主机发送被按键所在的行列点阵的位置编码,这种现象叫做键扫描码。
这样,通过硬件或软件的方法对键盘分别进行列扫描、行扫描,就可以确定按下键的所在位置,输出并获得扫描位置码,任何矩阵键盘只要通过增加键盘的列或行就可以实现增加按键的数目。
1.2键盘在国内外的发展状况早在1714年,英、美、法、意、瑞士等国家的人相继发明了各种形式的打字机,最早的键盘是那个时候应用在那些技术还不成熟的打字机上的。
1868年的时候,美国人克里斯托夫·拉森·肖尔斯(Christopher Latham Sholes)获打字机模型专利并取得经营权经营,又在几年后设计出了现代打字机的实用形式和首次规范了键盘,即现在的“QWERTY”键盘。
后来他就被称为“打字机之父”。
直到1873年,肖尔斯又使用此布局的第一台商用打字机成功投放市场,这就为今天的键盘排列方式奠定了基础,1888年全美举行打字公开比赛,赢得冠军的是一位使用盲打技术的人,在美国也相继开始有了专门培养打字员的学校专门练习打字。