VHDL数码管扫描显示驱动电路
- 格式:doc
- 大小:30.00 KB
- 文档页数:2
实验二计数显示电路一设计要求:设计一个输出为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 ’进行设置。
北京邮电大学数电实验报告实验名称:数码管扫描显示控制器设计与实现学院:信息与通信工程姓名:班级:学号:班内序号:一.实验目的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设计译码扫描动态显示电路,完成编译、综合、适配、仿真和实验箱上的硬件测试。
三实验平台(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共阴极数码显示电路一、引言数字显示电路是现代电子设备中常见的基础电路之一,它能将数字信号转换为人们可以直观理解的数字显示形式。
在数字显示电路中,共阴极数码显示电路是一种常见且重要的设计方式。
本文将深入探讨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的键盘扫描及显示电路课程名称专业课程设计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、掌握利用EDA软件和VHDL语言设计较复杂时序逻辑电路的方法;二、实验原理实验参考程序:LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_Unsigned.ALL;ENTITY Dynamic_Disp ISPORT(Clock:IN Std_Logic;En:OUT Std_Logic_Vector(0 to 7); --分别接到八个数码管的公共端Disp:OUT Std_Logic_Vector(0 to 6)); --接数码管的7个控制端END ENTITY Dynamic_Disp;ARCHITECTURE behav OF Dynamic_Disp ISSIGNAL Counter:Integer Range 0 to 7;BEGINPROCESS(Clock)V ARIABLE Num:Integer Range 0 to 9;BEGINIF rising_edge(Clock) THENIF Counter=7 THENCounter<=0;ELSECounter<=Counter+1;END IF;Num:=Counter;CASE Counter ISWHEN 0=>En<="01111111";WHEN 1=>En<="10111111";WHEN 2=>En<="11011111";WHEN 3=>En<="11101111";WHEN 4=>En<="11110111";WHEN 5=>En<="11111011";WHEN 6=>En<="11111101";WHEN 7=>En<="11111110";WHEN OTHERS=>En<="111111";END CASE;CASE Num ISWHEN 0 =>Disp<="1111110";WHEN 1 =>Disp<="0110000";WHEN 2 =>Disp<="1101101";WHEN 3 =>Disp<="1111001";WHEN 4 =>Disp<="0110011";WHEN 5 =>Disp<="1011011";WHEN 6 =>Disp<="1011111";WHEN 7 =>Disp<="1110000";WHEN 8 =>Disp<="1111111";WHEN 9 =>Disp<="1110011";WHEN OTHERS=>Disp<="0000000";END CASE;END IF;END PROCESS;END;常用的显示器件有发光二极管、数码管、液晶显示器等,其中最常用的是数码管。
基于VHDL的数字钟动态扫描显示电路设计七段数码管动态扫描VHDL 机构化设计元件例化配置原理图前言:随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA(Elect ron icDesign A u tom at ic)技术的应用引起电子产品及系统开发的革命性变革。
VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。
在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。
整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。
VHDL是美国国防部提出的一种经过标准化认证的硬件描述语言,使用VHDL语言进行硬件设计有如下特点:将一项工程设计(或称设计实体)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。
一、电路设计的基本原理()动态显示原理:N个LED数码管以静态方式显示时,需用到8×n条引出端线,通常器件输出端的引脚是有限的,因此对于多个LED数码管,可以考虑采用循环显示的动态扫描方法,即在一个数码管显示之后另一个数码管立即显示,利用人眼的视觉暂留特性,可以达到多个数码管同时显示的效果。
()数字钟动态扫描原理:对于六个数码管,可以假设6只LED数码管的七段a—g和小数点dp并接在一起,分别引出6个数码管的阴极A0—A5。
只要在A0—A5中某个管脚上输入低电平,而其余的均输入高电平,如A0=0,A1—A5=11111,则A0对应的数码管就显示数据,而A1—A5所对应的数码管不显示数据。
为了达到动态扫描的目的,我们在A0—A5管脚上轮流加入低电平,在点亮不同数码管的同时输入不同的数据,可在数码管上同时显示6位不同的数字,即将时间分隔为6个周期的循环,如下图。
vhdl共阴极数码显示电路VHDL共阴极数码显示电路数码显示器是一种常见的电子显示设备,它能够将数字信息以可视化的方式呈现给用户。
VHDL共阴极数码显示电路是一种使用VHDL 语言设计的共阴极数码显示器电路。
本文将详细介绍VHDL共阴极数码显示电路的原理和设计过程。
共阴极数码显示器是一种常见的数码显示器类型,它由多个共阴极数码管组成。
每个共阴极数码管由7个LED灯组成,可显示0到9的数字。
共阴极数码管的工作原理是,当给定特定的电压时,相应的LED灯会点亮,形成所需的数字。
其中,共阴极表示数码管的阴极端口是连接在一起的,而阳极端口则是分别连接的。
VHDL语言是一种用于描述数字系统的硬件描述语言,它可以对数字电路进行建模和仿真。
使用VHDL语言进行设计,可以使得电路的功能更加清晰明了,并且可以方便地进行验证和修改。
在设计VHDL共阴极数码显示电路时,首先需要定义输入和输出信号。
输入信号通常包括一个4位的二进制数,用于表示要显示的数字。
输出信号是连接到共阴极数码管的引脚,用于控制数码管的亮灭。
接下来,需要编写VHDL代码来描述共阴极数码显示电路的行为。
代码主要包括两部分:数码管驱动模块和顶层模块。
数码管驱动模块是用来控制数码管显示的核心模块。
它根据输入的二进制数,将对应的数字显示在数码管上。
在这个模块中,需要定义一个包含数字对应的真值表,以便根据输入的二进制数选择对应的数字。
顶层模块是将数码管驱动模块和输入输出信号连接起来的模块。
它负责接收输入信号,将其传递给数码管驱动模块,并将输出信号连接到数码管的引脚上。
设计完成后,可以使用VHDL仿真工具对设计的电路进行验证。
通过输入不同的二进制数,观察数码管上显示的数字是否与预期相符。
如果一切正常,可以将设计的电路下载到FPGA或其他可编程逻辑器件中进行实际的硬件测试。
VHDL共阴极数码显示电路具有简单、可靠、易于实现等优点。
它在数字电子系统中得到广泛应用,例如计数器、时钟、测量仪器等。
电子科技大学学生姓名:学号:指导教师:一、实验室名称:实验报告二、实验项目名称:扫描显示电路设计三、实验原理:数码显示板上一共有8 个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要8 个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。
所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。
动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。
因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。
而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。
事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。
为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。
动态数码扫描显示的硬件电路设计要求是:对共阴数码管,将其公共端阴极接三八译码器的输出,三八译码器的输入为位选信号输入;将8 个(或更多)的数码管的相同段接在一起,然后引出。
原理图如下:四、实验目的:1、进一步熟悉用VHDL进行EDA设计方法;2、本实验与实验二的不同之处在八个数码管都要稳定地显示;3、进一步了解EDA实验箱的基本功能;五、实验内容:1、用VHDL设计一个扫描显示电路,使得八个数码管能同时显示(要求显示的值为自己的学号+100,如学号为1,则数码管显示101,多出的数码管全显示0),然后编译、仿真;2、下载该程序,验证程序是否正确。
3、请事先准备一个软盘或优盘,本实验程序需要保存,后面实验需要用到。
取消所有断点。
断点设置完毕后,按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来对键盘扫描电路进行描述的设计。
矩阵式键盘是一种常见的输入装置,在日常生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。
广西工学院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.数码管译码、循环显示。
第26卷第1期Vol.26No.12005青岛建筑工程学院学报Journal of Qingdao Instituteof Architecture and Engineering基于V HDL 的扫描显示电路3范秋华 赵艳秋(青岛理工大学计算机系,青岛266033)摘 要:随着电子技术的发展,可编程逻辑器件应用越来越广泛,介绍了基于V HDL 的7段数码管显示电路,16×16点阵L ED 显示电路,循环彩灯控制电路.三种电路都可作为模块应用到其它电子设计中重复利用.关键词:数码管,硬件描述,彩灯中图分类号:TN141电子产品随着技术的进步,更新换代速度可谓日新月异.EDA (Elect ronic Design Automatic )技术的应用很好的适应了这一特点.通过设计和编程,由可编程逻辑器件构成的数字电路,取代了常规的组合和时序逻辑电路.实现了单片化,使体积,重量,功耗减小,提高了可靠性,使用灵活方便,同时还具有保密性,可重复编程性.目前EDA 技术在一般的数字系统,数字信号处理系统等领域获得广泛应用,它将成为今后电子设计的主流.V HDL 语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,应用越来越广泛.设计者的原始描述是非常简练的硬件描述,经过EDA 工具综合处理,最终生成付诸生产的电路描述或版图参数描述的工艺文件.整个过程通过EDA 工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会.下面介绍在美国AL TERA 公司的MA X +PL U SII 平台上使用V HDL 实现的三种扫描显示电路.1 七段字符显示电路在目前的产品中为节省成本广泛使用七段字符显示器即用十进制数码直观的显示数字系统的运行数图1 数码管外形图图2 数码管等效电路据.这种数码管(外形如图1所示)的每个线段都是一个发光二极管(LightEmitting Diode简称L ED ),可以由T TL 或CMOS 集成电路直接驱动.数码管又有共阴极、共阳极两种类型.以共阴极(等效电路如图2所示)为例.如果想显示数码0则令a =b =c =d =e =f =1,g =0,图1就会显示0.该译码过程由V HDL 程序完成,程序分两块.一块是延时程序,控制每个数码管亮的时间长短[3].由一个进程P1完成P1:PROCESS (CL K )3收稿日期:2003-12-31B EGINIF CL K ’EV EN TANDCL K =’1’t henR <=W (n );W <=W +1;T <=NO T R AND W (n );END IF ;END PROCESS ;信号W 的位数决定了时间长短,位数n 越大则时间越长,反之时间短.如果时钟选择1Mhz ,有8个数码管.考虑到人眼的视觉暂留特性(暂留时间一般为20ms ),则每个数码管的显示时间为2.5ms.应计(100111000100)2个数.则选n =12位,足以满足要求.另一块是显示译码程序,由一个进程P2完成.P2:PROCESS (t )B EGINIF t ’EV EN T AND t =’1’t henif s ="1010"t hens <="0000";else s <=s +1;end if ;case s iswhen "0000"=>q <="1111110";when "0001"=>q <="0110000";when "0010"=>q <="1101101";when "0011"=>q <="1111001";when "0100"=>q <="0110011";when "0101"=>q <="1011011";when "0110"=>q <="0011111";when "0111"=>q <="1110000";when "1000"=>q <="1111111";when "1001"=>q <="1110011";when ot hers =>null ;end case ;end if ;END PROCESS ;图316×16点阵L ED 显示外形2 16×16点阵L ED 显示电路随着科技日新月异的发展,大屏幕显示屏在火车站,机场,宾馆等公共场所应用越来越多.使我们的生活也越来越丰富多彩.采用可编程控制,编程软件功能强大,操作简单,在普通的PC 机上即可运行,可以实时控制显示的内容,就现在的实际情况来说,这个要求很容易实现.如果是广告牌则可以在硬件不变的情况下很方便、快捷的修改、更换要显示的广告内容.16×16点阵L ED 显示(外形如图3所示),是一个传统的点阵显示的基本应用,也是其它复杂显示的基础.一块16×16点阵可以显示4个汉字或者图案.16×16点阵L ED 有16根行选通线和16根列选通76第1期范秋华等:基于V HDL 的扫描显示电路线.点阵有逐行和逐列两种循环扫描的方式显示.以逐列循环扫描显示为例.行选通线可由序列信号产生电路提供,“1”信号灭,“0”信号亮.列选通线的作用是对16列发光二极管进行逐列扫描.列选通信号产生电路依次输出16个“1”即能驱动16只发光二极管的正脉冲,如此反复循环.与七段数码管相同,列扫描速度频率应符合人眼的视觉暂留特性,即频率足够快才能显示一幅连续的画面或一幅稳定的图案.整个系统分三块完成如图4所示,第一块YANSH I 与数码管显示一样完成延时功能,控制每个字符的显示时间.第二块L IEXUAN 产生列选通信号.第三块YIMA 有两种情况,如果只有几个固定的字符需要显示则可以直接在程序中译码,与数码管显示类似;如果有多种功能可以把多个字符或图案存到FP GA 自带的ROM 中,选通信号到来时到ROM 中取数即可完成译码功能[1,2].图4L ED 显示功能框图3 循环彩灯控制电路在现代生活中,彩灯作为一种亮化景观,安装在建筑物或者庭院的适当地方一是作为装饰增添节日气氛,二是有一种广告宣传的作用;用在舞台上增强晚会灯光效果,可以渲染气氛.运用计算机技术、电子技术和声光技术,对被控灯光系统按设定的变化方案进行亮、灭灯控制,形成各种灯光图案,有时再配以和谐的音乐,可以达到令人叹为观止的光、声、色的综合艺术效果.在电路中,如果以1代表亮灯,以0代表灭灯,由0、1按不同的规律组合代表不同的灯光图案晚会彩灯控制.以8只灯为例,该电路能使彩灯依次闪亮,呈现出流水的效果.程序如下,把数码管显示程序的进程P2的case 语句稍一修改即可.case s iswhen "000"=>q <="00000001";改变输出变量q 的0,1组合就可得到不同的when "001"=>q <="00000010";彩灯图案,该电路能使彩灯从右向左依when "010"=>q <="00000100";次闪亮,循环往复,呈现出流水的效果.when "011"=>q <="00001000";when "100"=>q <="00010000";when "101"=>q <="00100000";when "110"=>q <="01000000";when "111"=>q <="10000000";when ot hers =>null ;end case ;仿真波形如图5所示图5 彩灯流水显示仿真波形如果再一改变case 语句中信号q 的值,花样为彩灯1到8从右到左逐次点亮,又从左到右逐次点亮,86青岛建筑工程学院学报第26卷全灭,全亮,循环往复.仿真波形如图6所示.图6彩灯组合显示仿真波形如果灯的颜色多种多样则可以很方便的组成多种漂亮的方案.例如某晚会用红绿黄三种彩灯采光,三组灯亮的顺序是:红灯亮———绿灯亮———黄灯亮———红绿灯亮———绿黄灯亮———黄红灯亮———全亮———全暗.重复以上过程.可以很方便的设计这三组彩灯的控制电路.在这里就不给出设计了.4 结束语仿真正确后通过下载电缆下载到CPLD/FP GA 芯片上即可.芯片可以重复使用无数次.只要拥有计算机,配上相应的软件就可以随心所欲的改变彩灯或显示的图案,而且不受时间的限制.程序可以作为一个模块重复应用到其它产品设计中.节约了时间和精力,提高了效率.参考文献[1] 潘松,黄继业.EDA 技术实用教程.北京:科学出版社,2002[2] 赵曙光,郭万有,杨颂华.可编程逻辑器件原理、开发与应用.西安:西安电子科技大学出版社,2001[3] 阎石,数字电子技术基础.第4版.北京:高等教育出版社,2001The Scan and Display Circuit B ased on VH DLFan Qiu 2hua and Zhao Yan 2qiu(School of Computer Engineering ,Qingdao Tech.Uni.,Qingdao 266033)Abstract :Along wit h t he develop ment of electronic technology ,programming logic device is used more and more in elect ronic p roduct s and system design.This paper int roduced t he circuit of seven 2segment character mode display ,16×16lattice light emitting diode display ,cycle color lamp cont rol based on V HDL.K ey w ords :seven 2segment character mode display ,hardware description ,color lamp作者简介:范秋华(19712),女,讲师96第1期范秋华等:基于V HDL 的扫描显示电路。
数码显示VHDL实验五数码显示电路的VHDL设计一、实验目的通过数码显示电路的设计,学习VHDL的CASE语句应用及多层次设计方法。
二、实验内容1.基本命题设计一个如图5-1所示计数和7段数码显示译码电路,其中CNT4B为4输出二进制计数器,DECL7S为7段数码显示译码电路。
图5-1计数器和译码器连接电路的顶层文件原理图2.扩展命题设计一个8位数码显示器的扫描控制电路,控制如图5-2所示8个数码显示器逐一显示,以降低显示电路的功耗。
图5-28位数码显示器扫描控制电路三、实验仪器与器材计算机1台,GW48-PK2S实验箱1台,QuartuⅡ6.01套。
四、实验设计思路1.计数与7段数码显示电路(1)4位二进制计数器CNT4B参考实验一,将“10进制计数器”的VHDL程序改为“4位二进制计数器”。
(2)7段数码显示7段数码显示是纯组合电路,通用的小规模专用IC,如74或4000系列的器件只能实现十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
但为了简化过程,首先完成7段BCD码译码器的设计。
作为7段BCD码译码器,输出信号LED7S的7位分别接如图5-3数码管的7个段,高位在上,低位在下。
例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段点亮,于是数码管显示“5”。
7段数码显示电路的参考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECL7SISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDECL7SISBEGINPROCESS(A)BEGINCASEAISWHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\WHEN\LED7S<=\图5-3共阴数码管及其电路WHEN\LED7S<=\WHEN\LED7S<=\WHENOTHERS=>NULL;ENDCASE;ENDPROCES S;END;(3)设计提示分别设计4位计数器CNT4B和7段数码显示译码器DECL7S,确认满足逻辑设计要求后,应用例化语句实现图5-1所示电路CNT_DECL的VHDL设计。
VHDL语言实验8位数码管扫描显示电路设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan_led1 ISPORT ( clk : IN STD_LOGIC;sg : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);bt: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY scan_led;ARCHITECTURE beh OF scan_led ISSIGNAL cnt8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL q : INTEGER RANGE 0 TO 15;BEGINP1:PROCESS( cnt8 )BEGINCASE cnt8 ISWHEN "000"=> bt <= "00000001" ; q <=1; WHEN "001"=> bt <= "00000010" ; q <=3; WHEN "010"=> bt <= "00000100" ; q <=5; WHEN "011"=> bt <= "00001000" ; q <=7; WHEN "100"=> bt <= "00010000" ; q <=9; WHEN "101"=> bt <= "00100000" ; q <=11; WHEN "110"=> bt <= "01000000" ; q <=13; WHEN "111"=> bt <= "10000000" ; q <=15; WHEN OTHERS => NULL ;END CASE ;END PROCESS P1;P2:PROCESS(clk)BEGINIF clk'EVENT AND clk = '1' THEN cnt8 <= cnt8 + 1; END IF;END PROCESS P2;P3:PROCESS( q)BEGINCASE q ISWHEN 0 => sg <= "0111111";WHEN 1 => sg <= "0000110";WHEN 2 => sg <= "1011011";WHEN 3 => sg <= "1001111";WHEN 4 => sg <= "1100110";WHEN 5 => sg <= "1101101";WHEN 6 => sg <= "1111101";WHEN 7 => sg <= "0000111";WHEN 8 => sg <= "1111111";WHEN 9 => sg <= "1101111";WHEN 10 => sg <= "1110111";WHEN 11 => sg <= "1111100";WHEN 12 => sg <= "0111001";WHEN 13 => sg <= "1011110";WHEN 14 => sg <= "1111001";WHEN 15 => sg <= "1110001";WHEN OTHERS => NULL ;END CASE ;END PROCESS P3;END beh;。
静态显示
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;。