VHDL数码管扫描显示驱动电路
VHDL --计数显示电路

实验二计数显示电路一设计要求:设计一个输出为3位BCD码的计数显示电路。
该计数显示电路由三个模块构成:(1)十进制计数器(BCD_CNT)(2)七段显示译码器电路(DEC_LED)(3)分时总线切换电路(SCAN)。
二设计思路及原理:根据逻辑图采用层次化的设计方法,电路原理如图所示。
图1电路原理图长度为0~999的三位BCD码加法计数器,输出数据总线的宽度为12位。
将12位二进制数据总线经过分时总线切换电路模块,分时后的4位8421BCD送到七段显示译码器电路,计数值译为对应的编码,并在LED数码管上显示出对应的十进制数。
LED数码管共有七个输入端(a~g),三个数码管采用扫描显示方法,按个位、十位、百位的次序依次显示12位二进制的低四位、中间四位和高四位。
图2是源程序的RTL级电路图。
整个设计分十进制计数器模块(BCD_CNT)、分时总线切换电路模块(SCAN)和七段显示译码器电路模块(DEC_LED)构成。
总的输入为十进制计数器时钟clk,异步复位清零信号reset,分时总线切换电路时钟CL。
在reset信号为0期间,在每个clk的上升沿计数器将加1。
在每个cl的上升沿将会改变对三个数码管的扫描选通。
总的输出为数码管选通信号sel(三位),输出到七段数码管的数据信号ledout(七位)。
图2为了检验系统的正确与否,这里还添加了四个输出:十进制计数器输出c1(四位)、c2(四位)、c3(四位),分时总线切换电路一个输出q(四位),它是对计数器输出c1、c2、c3进行分时输出。
分时选通个、十、百位的数码管并将相应要显示的数据输出到七段显示译码器电路(DEC_LED),由此实现数码管的动态扫描显示。
三实验步骤及VHDL源代码:(1)十进制计数器电路(BCD_CNT)模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity BCD_CNT isport(clk,reset:in std_logic;c1,c2,c3:out std_logic_vector(3 downto 0));end BCD_CNT;architecture cnt of BCD_CNT issignal cn1,cn2,cn3:std_logic_vector(3 downto 0);begincnt1:process(clk,reset)beginif(reset='1') then cn1<="0000";elsif(clk'event and clk='1') thenif(cn1<9) then cn1<=cn1+1;else cn1<="0000";end if;end if;end process cnt1;c1<=cn1;cnt2:process(cn1(3),reset)beginif(reset='1') then cn2<="0000";elsif(cn1(3)'event and cn1(3)='0') thenif(cn2<9) then cn2<=cn2+1;else cn2<="0000";end if;end if;end process cnt2;c2<=cn2;cnt3:process(cn2(3),reset)beginif(reset='1') then cn3<="0000";elsif(cn2(3)'event and cn2(3)='0') thenif(cn3<9) then cn3<=cn3+1;else cn3<="0000";end if;end if;end process cnt3;c3<=cn3;end cnt;(2)分时总线切换电路(SCAN)模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity SCAN isport( c1,c2,c3:in std_logic_vector(3 downto 0);cl:in std_logic;q:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end SCAN;architecture one of SCAN issignal cnt:std_logic_vector(1 downto 0);signal q_temp:std_logic_vector(3 downto 0);signal sel_temp:std_logic_vector(2 downto 0);beginp1:process(cl)beginif(cl'event and cl='1') thenif(cnt<2) then cnt<=cnt+1;else cnt<="00";end if;end if;end process p1;end one;(3)七段显示译码器电路(DEC_LED)模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity DEC_LED isport( q:in std_logic_vector(3 downto 0);ledout:out std_logic_vector(6 downto 0));end DEC_LED;architecture one of DEC_LED isbeginprocess(q) --七段译码电路begincase q iswhen "0000" => ledout<="0111111"; --根据七段数码管亮灭正确为ledout赋值when "0001" => ledout<="0000110";when "0010" => ledout<="1011011";when "0011" => ledout<="1001111";when "0100" => ledout<="1100110";when "0101" => ledout<="1101101";when "0110" => ledout<="1111101";when "0111" => ledout<="0000111";when "1000" => ledout<="1111111";when "1001" => ledout<="1101111";when others => null;end case;end process;end one;四仿真结果编译结束后,新建一个”Vector Waveform File”,根据程序中的输入和输出的信号,分别’insert node or bus ’进行设置。
VHDL数码管动态扫描

北京邮电大学数电实验报告实验名称:数码管扫描显示控制器设计与实现学院:信息与通信工程姓名:班级:学号:班内序号:一.实验目的1.掌握VHDL语言的语法规范,掌握时序电路描述方法;2.掌握多个数码管动态扫描显示的原理和设计方法.二.实验所用仪器及元器件1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板三.实验任务及要求1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。
2.用VHDL语言设计并实现六个数码管滚动显示电路。
(选作)(1)循环滚动,始终点亮6个数码管,左出右进。
状态为:012345-123450-234501-345012-450123-501234-012345四.实验设计思路及过程1.实验原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
八位数码管扫描显示电路的设计

《EDA技术及应用》课程设计报告题目:八位数码管扫描显示电路的设计院(系):机电与自动化学院专业班级:电气自动化技术学生姓名:学号:指导教师:20 年6月10日至20 年6月23日华中科技大学武昌分校4、课程设计使用设备(1)EDA及SOPC综合实验平台;(2)导线若干;(3)PC机;(4)Quartus II开发工具软件。
目录摘要................................................................1.课程设计题目及要求 (1)1.1设计题目 (1)1.2L E D显示器的动态扫描驱动电路 (1)1.3设计方案论证 (1)2.L E D显示器动态扫描驱动电路各单元电路设计 (3)2.1计数器与译码器的设计 (3)2.2一位共阳极L E D动态驱动电路设计 (4)2.3七段数码管的设计 (5)3.L E D显示器动态扫描系统设计 (7)3.1整体电路图及工作原理 (7)3.2V H D L程序设计 (7)3.3电路参数计算 (10)4.Q u a r t u s运行调试 (12)4.1时序仿真 (12)4.2硬件逻辑验证 (13)4.3调试结果分析 (13)4.4调试中出现的问题及解决方法 (14)5.设计总结 (15)6.参考文献 (16)摘要本文通过一个3-8译码器电路,将输入的4位2进制数转换为与LED显示对应的8位段码,位码就是LED的显示使能端,对于共阳级的LED而言,高电平使能。
要使8个数码管动态扫描显示,就是把所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
使用Quartus II6.0软件设计一个VHDL程序并对设计方案进行仿真,再硬件调试经检测输出正确的设计要求结果。
关键词:动态扫描Quartus II6.0 VHDLAbstractIn this paper, through a 3-8 decoder circuit, the input of four hexadecimal number into 2 and eight LED display the corresponding section of code, a codeis the LED display can make side, for the LED with Yang level, high level canmake. To makeeight digital tube dynamic scans showed that is all the samesegment digital tube connected in parallel, through the gating signal time-sharing control public side, the digital tube loop light multiple digital tube, and use the eye of the phenomenon of persistence of vision, as long as the scanning frequency is more than 50 hz, will see the flicker phenomenon. Using Quartus II6.0 a VHDL program design and the software design simulation, and hardware debugging through testing output correct design requirementsKey words: dynamic scanning Quartus II6.0 VHDL1. 课程设计题目及要求1.1设计题目八位数码管扫描显示电路的设计设计主要内容:本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
实验四 译码扫描显示电路VHDL输入设计

实验二:计数器动态扫描实验一实验目的熟悉译码扫描动态显示的工作原理、设计过程和实现方法。
二实验内容与要求学习用VHDL设计译码扫描动态显示电路,完成编译、综合、适配、仿真和实验箱上的硬件测试。
三实验平台(1)硬件:计算机、GX-SOC/SOPC-DEVLABCycloneII EP2C35F672C8核心扳(2)软件:Quartus II四实验原理通过动态扫描一组4BIT 的输入,有控制开关控制数据的流向,即在哪个数码管上显示,在允许的条件产生后,扫描记录响应位置上的输入数据(开关选择),将结果动态地显示在共阴数码管上。
在能满足人眼要求的一定的扫描频率下,对数据进行动态显示。
五程序--显示电路--显示电路整合--ledscan.vhd 4 digit bcd-to-7 segment scan displaylibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledscan isport(clk : in std_logic; --synchronousenable : in std_logic; --scan clockdata_bcd :in std_logic_vector(3 downto 0);--input bcdctrl : in std_logic_vector(2 downto 0);---ctrl the order of inputi.e. bcd_dataledseg : out std_logic_vector(6 downto 0);--output to 7 segmentledcom : out std_logic_vector(5 downto 0));--7 segment enableend ledscan;architecture behavior of ledscan issignal com_clk : std_logic_vector(2 downto 0);signal bcd_led : std_logic_vector(3 downto 0);signal data2show : std_logic_vector(23 downto 0);component comcounport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output count end component;component com_encodeport(com_clk : in std_logic_vector(2 downto 0);--input countledcom : out std_logic_vector(5 downto 0));--output encodeend component;component bcd_muxport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data : in std_logic_vector(23 downto 0);--input display databcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end component;component bcd_7segport(bcd_led : in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end component;begininput_control:process(clk)beginif (clk'event and clk='1') thenif ctrl="000" thendata2show(3 downto 0)<=data_bcd;-- first value to showelsif ctrl="001" thendata2show(7 downto 4)<=data_bcd;-- 2nd value to showelsif ctrl="010" thendata2show(11 downto 8)<=data_bcd;-- 3rd value to showelsif ctrl="011" thendata2show(15 downto 12)<=data_bcd;-- 4th value to showelsif ctrl="100" thendata2show(19 downto 16)<=data_bcd;-- 5th value to showelsif ctrl="101" thendata2show(23 downto 20)<=data_bcd;-- 6th value to showelsedata2show<="000000000000000000000000";end if;end if;end process ;u0: comcoun port map (clk=>clk,enable=>enable,comclk=>com_clk);-- 7 segment com scan counteru1: com_encode port map(com_clk=>com_clk,ledcom=>ledcom);-- 7 segment com scan counter--u1: com_encode port map (com_clk,ledcom); --7 segment com encode u2: bcd_mux port map (com_clk=>com_clk,bcd_data=>data2show,bcd_led=>bcd_led);--multiplexeru3: bcd_7seg port map (bcd_led=>bcd_led,ledseg=>ledseg); --bcd to7 segment encoderend behavior;--七段显示扫描电路--comcoun.vhd 7 segment com scan counterlibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend comcoun;architecture behavior of comcoun issignal q : std_logic_vector(2 downto 0);--internal counted signal beginfscan:process(clk)beginif (clk'event and clk='1') thenif (enable='1') thenif q>=6 thenq<="000";--initial counterelseq<=q+1;--countingend if;end if;end if;end process fscan;comclk<=q; --output internal countend behavior;--计数译码电路 -- 6 共阴--com_encode.vhd 7 segment com encoderlibrary ieee ;use ieee.std_logic_1164.all;entity com_encode isport(com_clk :in std_logic_vector(2 downto 0);--input countledcom :out std_logic_vector(5 downto 0));--output encodeend com_encode;architecture behavior of com_encode isbeginledcom<="000001" when com_clk="001" else"000010" when com_clk="010" else"000100" when com_clk="011" else"001000"when com_clk="100" else"010000"when com_clk="101" else"100000";end behavior;--bcd_mux.vhd multiplexer of bcd-selectionlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_mux isport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data :in std_logic_vector(23 downto 0);--input display data bcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end bcd_mux;architecture behavior of bcd_mux isbeginbcd_led<=bcd_data(3 downto 0) when com_clk="001" elsebcd_data(7 downto 4) when com_clk="010" elsebcd_data(11 downto 8) when com_clk="011" elsebcd_data(15 downto 12)when com_clk="100" elsebcd_data(19 downto 16)when com_clk="101" elsebcd_data(23 downto 20)when com_clk="110" else"----";end behavior;--bcd对应七段显示器编码电路--bcd_7seg.vhd bcd to 7 segment encoderlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end bcd_7seg;architecture behavior of bcd_7seg isbeginwith bcd_led selectledseg<="0111111" when "0000",--0"0000110" when "0001",--1"1011011" when "0010",--2"1001111" when "0011",--3"1100110" when "0100",--4"1101101" when "0101",--5"1111101" when "0110",--6"0100111" when "0111",--7"1111111" when "1000",--8"1101111" when "1001",--9"1110111" when "1010",--A"1111100"when "1011",--b"0111001"when "1100",--c"1011110" when "1101",--d"1111001"when "1110",--E"1110001" when "1111",--F"0000000" when others;end behavior;六引脚定义及代码图2-1引脚定义代码:# Copyright (C) 1991-2008 Altera Corporation# Your use of Altera Corporation's design tools, logic functions # and other software and tools, and its AMPP partner logic# functions, and any output files from any of the foregoing# (including device programming or simulation files), and any# associated documentation or information are expressly subject # to the terms and conditions of the Altera Program License# Subscription Agreement, Altera MegaCore Function License# Agreement, or other applicable license agreement, including,# without limitation, that your use is for the sole purpose of# programming logic devices manufactured by Altera and sold by# Altera or its authorized distributors. Please refer to the# applicable agreement for further details.# Quartus II: Generate Tcl File for Project# File: ACOUNT10.tcl# Generated on: Tue Nov 03 11:40:42 2009# Load Quartus II Tcl Project packagepackage require ::quartus::projectset need_to_close_project 0set make_assignments 1# Check that the right project is openif {[is_project_open]} {if {[string compare $quartus(project) "ACOUNT10"]} {puts "Project ACOUNT10 is not open"set make_assignments 0}} else {# Only open if not already openif {[project_exists ACOUNT10]} {project_open -revision ACOUNT10 ACOUNT10} else {project_new -revision ACOUNT10 ACOUNT10}set need_to_close_project 1}# Make assignmentsif {$make_assignments} {set_global_assignment -name FAMILY "Cyclone II"set_global_assignment -name DEVICE EP2C35F672C8set_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.0set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:03:58 NOVEMBER 03, 2009"set_global_assignment -name LAST_QUARTUS_VERSION 8.0set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_palaceset_global_assignment -name DEVICE_FILTER_PACKAGE FBGAset_global_assignment -name DEVICE_FILTER_PIN_COUNT 672set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85set_global_assignment -name VHDL_FILE com_encode.vhdset_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Topset_global_assignment -name PARTITION_COLOR 14622752 -section_id Top set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"set_global_assignment -name VHDL_FILE comcoun.vhdset_global_assignment -name VHDL_FILE COUNT10a.vhdset_global_assignment -name VHDL_FILE bcd_7seg.vhdset_global_assignment -name VHDL_FILE clkgen.vhdset_global_assignment -name VHDL_FILE ACOUNT10.vhdset_global_assignment -name VECTOR_WAVEFORM_FILE warefare.vwfset_global_assignment -name INCREMENTAL_VECTOR_INPUT_SOURCE warefare.vwfset_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Topset_location_assignment PIN_P25 -to clkset_location_assignment PIN_F6 -to Clrset_location_assignment PIN_B22 -to enset_location_assignment PIN_H23 -to LEDCOM[5]set_location_assignment PIN_G26 -to LEDCOM[4]set_location_assignment PIN_G25 -to LEDCOM[3]set_location_assignment PIN_G24 -to LEDCOM[2]set_location_assignment PIN_G23 -to LEDCOM[1]set_location_assignment PIN_P18 -to LEDCOM[0]set_location_assignment PIN_F26 -to LEDSEG[6]set_location_assignment PIN_F25 -to LEDSEG[5]set_location_assignment PIN_J20 -to LEDSEG[4]set_location_assignment PIN_J21 -to LEDSEG[3]set_location_assignment PIN_F23 -to LEDSEG[2]set_location_assignment PIN_F24 -to LEDSEG[1]set_location_assignment PIN_E25 -to LEDSEG[0]set_location_assignment PIN_B21 -to EN6# Commit assignmentsexport_assignments# Close projectif {$need_to_close_project} {project_close}}七仿真图2-2 创建VHDL文件图2-3 PIN口设置图2-4 创建VERILOG文件图2-5 运行八导入程序图2-7 下载图2-8 实验结果。
刘增辉-vhdl实验报告-实验4 七段数码管译码扫描显示

长安大学 电子科学与技术系 刘增辉
type led_addr_type is array(natural range<>)of std_logic_vector(7 downto 0); constant led_addr_table:led_addr_type(0 to 7):=("00000001", "00000010", "00000100", "00001000", "00010000", "00100000", "01000000", "10000000"); begin process(clk) variable count:integer range 0 to 7:=0; begin if(clk'event and clk='1')then count:=count+1; led_addr<=led_addr_table(count); if(data_control(count)='1')then seg7_data<=seg7_data_table(count); else seg7_data<=seg7_data_table(8); end if; end if; end process; end architecture struct;
clk:时钟输入端,此信号是串行扫描 的同步信号。 data_control[7..0]: 个分别控制数码管 8 显示的输入信号; led_addr[7..0]:对 8 个数码管进行串行 扫描的输出控制信号; seg7_data[6..0]:驱动 7 段数码管各显 示段的输出信号;
vhdl共阴极数码显示电路

VHDL共阴极数码显示电路一、引言数字显示电路是现代电子设备中常见的基础电路之一,它能将数字信号转换为人们可以直观理解的数字显示形式。
在数字显示电路中,共阴极数码显示电路是一种常见且重要的设计方式。
本文将深入探讨VHDL共阴极数码显示电路的设计原理及实现过程。
二、设计原理1. 共阴极数码管共阴极数码管是一种常见的数字显示器件,它由多个发光二极管(LED)组成。
每个数码管有7个LED芯片,用于显示0-9的数字。
共阴极数码管在数码显示电路中通过编码器和驱动器来驱动。
2. VHDL编程语言VHDL(VHSIC Hardware Description Language)是一种用于描述数字电路和系统设计的硬件描述语言。
VHDL具有强大的描述能力,可以将电路的结构和功能以类似代码的方式进行描述。
在设计共阴极数码显示电路时,可以使用VHDL语言进行编程。
三、设计过程1. 数码管驱动器设计数码管驱动器是实现数码管显示的关键组件,它通过有效的时间分配控制数码管的亮灭。
数码管驱动器可以使用有限状态机来实现,通过组合电路和时钟信号进行运行控制。
2. VHDL编程实现利用VHDL编程语言,可以将数码管驱动器的功能进行描述和实现。
首先需要定义数码管的输入和输出信号,包括时钟信号、使能信号和数据输入信号。
然后利用VHDL语言的结构体和组合逻辑运算符来实现数码管驱动器的状态转换和输出控制。
3. 时序约束设计在VHDL编程中,由于电路的运行速度和时钟频率的要求,需要进行时序约束设计。
通过设置时序约束,可以保证电路在不同条件下的稳定工作。
时序约束包括时钟延迟、数据传输延迟和时钟周期等方面的约束。
4. 仿真和验证在进行VHDL编程后,需要利用仿真工具进行电路的仿真和验证。
通过对电路进行不同输入条件和时钟频率下的仿真,可以验证电路的正确性和稳定性。
如果仿真结果符合预期,则可以进入下一阶段的电路实现。
四、实例应用共阴极数码显示电路在实际应用中有广泛的应用场景。
数码管动态扫描VHDL程序设计

END IF; END PROCESS; END a;
仿真结果:
三、同步时钟CLK频率计算
CLK频率计算: 根据人的视觉暂留现象,一个数码管 所要显示的字符只要在一秒内点亮24次以 上,则感觉上该数码管没有熄灭一样。若8 只数码管要出现这种效果,要求在一秒内 每只数码管要闪亮24次以上。 则CLK频率应为24X8=192Hz以上, 为了减少闪烁现象,达到较好的显示效果, 取CLK频率为1024Hz,每秒内每个数码管 显示次数为128次。 CLK1=CLK; CLK2= CLK;
ARCHITECTURE a OF disp_data2 IS SIGNAL NUM1: INTEGER RANGE 7 DOWNTO 0; SIGNAL num2: INTEGER RANGE 8 DOWNTO 0; SIGNAL q0,q1,q2,q3,q4,q5,q6,q7:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN WR<='1'; process(clk) begin if clk'event and clk='1' then if num1<=7 then num1<=num1+1; else num1<=0; end if; end if; end process;
(2)自左至右点亮数码管,每次只点亮一个,最后全息灭,再 重复以上动作,每次变化时间间隔为1秒。 (3) 先中间两个点亮,再依次向外点亮;全亮后,再依次向中 间熄灭;重复上述步骤,每次变化时间间隔为1秒。
一、七段显示器动态扫描电路设计框图
双口RAM A00 地 址 线 数据线 WR A0 A1 A2 a b c d e f g c1 RD读 clk1 clk2 CLK 扫描控制器 c2 c3 c4 c5 c6 c7 c8
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的缩写,中文译为电子设计自动化,是现代电子设计技术的有力工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
静态显示
library ieee;
use ieee.std_logic_1164.all;
entity bcd_seg is
port(
a,b,c,d:in std_logic;
seg:out std_logic_vector(7 downto 0)
);
end entity bcd_seg;
architecture one of bcd_seg is
signal bcd:std_logic_vector(3 downto 0);
begin
bcd<=a&b&c&d;
process(bcd)
begin
case bcd is
when "0000"=>seg<="00111111";
when "0001"=>seg<="00000110";
when "0010"=>seg<="01011011";
when "0011"=>seg<="01001111";
when "0100"=>seg<="01100110";
when "0101"=>seg<="01101101";
when "0110"=>seg<="01111101";
when "0111"=>seg<="00000111";
when "1000"=>seg<="01111111";
when "1001"=>seg<="01101111";
when others=>null;
end case;
end process;
end architecture one;
动态显示
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bcd_seg is
port(
clk:in std_logic;
a,b,c,d:in std_logic;
com:out std_logic_vector(2 downto 0);
seg:out std_logic_vector(7 downto 0)
);
end entity bcd_seg;
architecture one of bcd_seg is
signal cnt:std_logic_vector(2 downto 0);
signal bcd:std_logic_vector(3 downto 0);
begin
process(clk)
begin
if clk'event and clk='1' then
if cnt="111" then
cnt<="000";
else
cnt<=cnt+'1';
end if;
end if;
end process;
com<=cnt;
bcd<=a&b&c&d;
process(bcd)
begin
case bcd is
when "0000"=>seg<="00111111";
when "0001"=>seg<="00000110";
when "0010"=>seg<="01011011";
when "0011"=>seg<="01001111";
when "0100"=>seg<="01100110";
when "0101"=>seg<="01101101";
when "0110"=>seg<="01111101";
when "0111"=>seg<="00000111";
when "1000"=>seg<="01111111";
when "1001"=>seg<="01101111";
when "1010"=>seg<="01110111";
when "1011"=>seg<="01111100";
when "1100"=>seg<="00111001";
when "1101"=>seg<="01011110";
when "1110"=>seg<="01111001";
when "1111"=>seg<="01110001";
end case;
end process;
end architecture one;。