vhdl按键控制数码管显示
(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)

(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位: 七、心得体会
七段码管位选输入信号 七段码管位选输入信号 七段码管位选输入信号
五、 实验步骤
1、打开 QUARTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称对应fpga管脚名说明7segaf13七段码管段输入信号7segbf14七段码管段输入信号7segcf15七段码管段输入信号7segde15七段码管段输入信号7segef16七段码管段输入信号7segff17七段码管段输入信号7segge18七段码管段输入信号7segdpf18七段码管dp段输入信号7segsel0g18七段码管位选输入信号7segsel1g17七段码管位选输入信号7segsel2g16七段码管位选输入信号实验步骤1打开quartusii软件新建一个工程
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
VHDL7段数码管循环显示

实验报告课程名称:FPGA设计及应用实验项目:VHDL7段数码管循环显示实验时间:2014年3月25号实验班级:12电子信息工程1班指导教师:李XX二〇〇四年四月十三日广东技术师范学院实验报告学院: 电子与信息学院 专业: 电子信息工程 班级: 12电本X 班成绩: 姓名: XXX 学号: XXX 组别: 组员: 实验地点:工业中心 实验日期: 3.25 指导教师签名:实验 六 项目名称: VHDL7段数码管循环显示一、 实验目的和要求按键1,循环显示“00xy ”xy 是学号的后两位例:学号95讲循环显示0095具体:第1次按键1显示0第2次按键1显示0第3次按键1显示x第4次按键1显示y不断重复1—4二、 实验原理当输入0000~1111时,数码管对应显示0~F 。
按键按一下,数码管显示递增1。
三、实验步骤1、创建新的工程,步骤如下:2、创建新的文件3、用VHDL语言根据实验要求的功能编写代码4、编译5、引脚分配6、链接数据线,下载程序四、实验源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY kk ISPORT (A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END;ARCHITECTURE one OF kk ISBEGINPROCESS (A)BEGINCASE A ISWHEN"0000"=> LED7S <="0111111";WHEN"0001"=> LED7S <="0111111";WHEN"0010"=> LED7S <="1011011";WHEN"0011"=> LED7S <="1100110";WHEN"0100"=> LED7S <="0111111";WHEN"0101"=> LED7S <="0111111";WHEN"0110"=> LED7S <="1011011";WHEN"0111"=> LED7S <="1100110";WHEN"1000"=> LED7S <="0111111";WHEN"1001"=> LED7S <="0111111";WHEN"1010"=> LED7S <="1011011";WHEN"1011"=> LED7S <="1100110";WHEN"1100"=> LED7S <="0111111";WHEN"1101"=> LED7S <="0111111";WHEN"1110"=> LED7S <="1011011";WHEN OTHERS => NULL;END CASE;END PROCESS;END;五、实验结果与总结通过这次实验,基本掌握了用VHDL硬件描述语言来实现显示译码电路,还能实现数字的循环显示。
超完美VHDL数码管显示键值_PS2键盘控制实验

共四个文件:顶层,分频,读键,显示。
绝对正确。
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity top isport(clr : in std_logic;clk : in std_logic;ps2clk : in std_logic;ps2data : in std_logic;a_to_g : out STD_LOGIC_VECTOR (6 downto 0);sel : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end top;architecture Behavioral of top issignal clk4,sclk : std_logic;signal dat : std_logic_vector(15 downto 0);component divclk isport(clk : in std_logic; ------50MHZclk400 : out std_logic; -------400KHZscanclk : out std_Logic);end component;component key_board isport( clr : in std_logic;clk400 : in std_logic; --400KHZps2clk : in std_logic;ps2data : in std_logic;dataout : out std_logic_vector(15 downto 0));end component;component disp isport(clr : in std_logic;scanclk : in std_logic;datain : in std_logic_vector(15 downto 0);a_to_g : out STD_LOGIC_VECTOR (6 downto 0);sel : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end component;begininst1: divclk port map(clk,clk4,sclk);inst2: key_board port map(clr,clk4,ps2clk,ps2data,dat);inst3: disp port map(clr,sclk,dat,a_to_g,sel,dp);end Behavioral;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity divclk isport(clk : in std_logic; ------50MHZclk400 : out std_logic; -------400KHZscanclk : out std_Logic);end divclk;architecture Behavioral of divclk isbeginprocess(clk)variable count : std_logic_vector(19 downto 0):=X"00000"; beginif(rising_edge(clk))thencount:=count+1;end if;clk400<=count(2);scanclk<=count(12);end process;end Behavioral;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity key_board isport( clr : in std_logic;clk400 : in std_logic; --400KHZps2clk : in std_logic;ps2data : in std_logic;dataout : out std_logic_vector(15 downto 0));end key_board;architecture Behavioral of key_board issignal clk : std_logic:='0';signal data : std_logic:='0';signal shift1,shift2 : std_logic_vector(10 downto 0);signal ps2c,ps2d : std_logic;beginps2c<=ps2clk;ps2d<=ps2data;dataout<=shift1(8 downto 1) & shift2(8 downto 1);process(clk400,clr)variable tempclk : std_logic_vector(7 downto 0):=X"00"; variable tempdata: std_logic_vector(7 downto 0):=X"00"; beginif(clr='0') thentempclk:=X"00";tempdata:=X"00";clk<='0';data<='0';else if(clk400'event and clk400='1') thentempclk(0):=ps2c;tempclk(7 downto 1):=tempclk(6 downto 0);tempdata(0):=ps2d;tempdata(7 downto 1):=tempdata(6 downto 0); end if;end if;if(tempclk="11111111") thenclk<='1';elseif(tempclk="00000000") thenclk<='0';end if;end if;if(tempdata="11111111") thendata<='1';elseif(tempdata="00000000") thendata<='0';end if;end if;end process;process(clk,clr)beginif(clr='0')thenshift1<=(others => '0');shift2<=(others => '0');else if(clk'event and clk='0') thenshift1(10)<=data;shift1(9 downto 0)<=shift1(10 downto 1);shift2(10)<=shift1(0);shift2(9 downto 0)<=shift2(10 downto 1);-- shift1(0)<=data;-- shift1(10 downto 1)<=shift1(9 downto 0);-- shift2(0)<=shift1(10);-- shift2(10 downto 1)<=shift2(9 downto 0);end if;end if;end process;end Behavioral;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity disp isport(clr : in std_logic;scanclk : in std_logic;datain : in std_logic_vector(15 downto 0);a_to_g : out STD_LOGIC_VECTOR (6 downto 0);sel : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end disp;architecture Behavioral of disp issignal S : std_logic_vector(1 downto 0);signal digit : std_logic_vector(3 downto 0);begindp<='1';process(scanclk)beginif rising_edge(scanclk) thenif(clr='0')thenS<="00";elseS<=S+1;end if;end if;end process;process(S)begincase S iswhen "00" =>digit<=datain(3 downto 0);sel<="0001";when "01" =>digit<=datain(7 downto 4);sel<="0010";when "10" =>digit<=datain(11 downto 8);sel<="0100";when others =>digit<=datain(15 downto 12);sel<="1000";end case;end process;process(digit)begin-- case digit is-- when X"0" => a_to_g<="0000001";-- when X"1" => a_to_g<="1001111";-- when X"2" => a_to_g<="0010010";-- when X"3" => a_to_g<="0000110";-- when X"4" => a_to_g<="1001100";-- when X"5" => a_to_g<="0100100";-- when X"6" => a_to_g<="0100000";-- when X"7" => a_to_g<="0001111";-- when X"8" => a_to_g<="0000000";-- when X"9" => a_to_g<="0000100";-- when X"A" => a_to_g<="0001000";-- when X"B" => a_to_g<="1100000";-- when X"C" => a_to_g<="0110001";-- when X"D" => a_to_g<="1000010";-- when X"E" => a_to_g<="0110000";-- when X"F" => a_to_g<="0111000";-- when others => a_to_g<="ZZZZZZZ";-- end case;case digit iswhen X"0" => a_to_g<="1111110";when X"1" => a_to_g<="0110000";when X"2" => a_to_g<="1101101";when X"3" => a_to_g<="1111001";when X"4" => a_to_g<="0110011";when X"5" => a_to_g<="1011011";when X"6" => a_to_g<="1011111";when X"7" => a_to_g<="1110000";when X"8" => a_to_g<="1111111";when X"9" => a_to_g<="1111011";when X"A" => a_to_g<="1110111";when X"B" => a_to_g<="0011111";when X"C" => a_to_g<="1001110";when X"D" => a_to_g<="0111101";when X"E" => a_to_g<="1001111";when X"F" => a_to_g<="1000111";when others => a_to_g<="ZZZZZZZ";end case;end process;end Behavioral;。
VHDL实验报告

实验四————LED数码管显示数字实验内容:在四个七段LED数码管上显示数字“1234”。
实验原理:实现LED数码管数字显示电路的输入和输出端口控制信号如图所示clkLed_bit reset led_seg输入和输出端口信号图中clk信号为50MHz时钟信号。
reset信号为复位按键输入信号,当reset按键按下时,reset信号为低电平。
输出信号led_bit为驱动LED数码管的位码信号,因为有四个LED 数码管,需要四根信号线,控制四个LED数码管中的哪一个LED数码管显示。
输出信号led_seg为驱动LED数码管的段码信号,共有八根信号线,分别是a,b,c,d,e,f,g,dp段,输出信号led_seg能够控制一个LED数码管中的哪一段显示。
四个七段LED数码管的排列如下图所示:四个LED数码管LED数码管采用共阳极发光二极管,如下图所示,需要点亮数码管中的某一段时,应该在对应段的段码信号输出低电平。
共阳极LED数码管由于每个LED数码管有八个发光二极管,八个发光二极管同时导通时需要提供比较大的电流,需要给共阳极加驱动电路,如下图所示,当需要某一LED数码管显示数字时,就给该行的控制信号led_bit(i)提供一个低电平信号。
共阳极LED数码管的阳极驱动电路原理图实验内容:本次实验采用了两个进程:1.scanclk_get:获取扫描时序控制信号2.led_selest_get:选择数码管并显示数字流程图:Clknum scan_cntr reset led_bit<3:0>源代码:library IEEE;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity EXP4_M isport(clk,rst:in std_logic;led_bit:out std_logic_vector(3 downto 0); led_seg:out std_logic_vector(7 downto 0)); end EXP4_M;进程scanclk_get 产生LED 数码管扫描时序控制电路 Led_select_d isplay 进程选择要显示的数据和对应的数码管 七段译码器architecture Behavioral of EXP4_M issignal scanclk:std_logic_vector(17 downto 0);beginscanclk_get:process(clk,rst)beginif rst='0' thenscanclk<=(others=>'0');elsif rising_edge(clk) thenscanclk<=scanclk+1;end if;end process scanclk_get;led_select_display:process(scanclk)begincase scanclk(17 downto 16) iswhen "00" =>led_bit<="1110";led_seg<="10011111" ;when "01"=>led_bit<="1101";led_seg<="00100101" ;when "10"=>led_bit<="1011";led_seg<="00001101" ;when "11"=>led_bit<="0111";led_seg<="10011001" ;when others =>null;end case;end process led_select_display;end Behavioral;UCF文件:net "clk" loc =Y11;net "rst" loc =J3;net "led_bit(0)" loc =M5;net "led_bit(1)" loc =M4;net "led_bit(2)" loc =M3;net "led_bit(3)" loc =M2;net "led_seg(0)" loc =R4;net "led_seg(1)" loc =T3;net "led_seg(2)" loc =T2;net "led_seg(3)" loc =T1;net "led_seg(4)" loc =N4;net "led_seg(5)" loc =N3;net "led_seg(6)" loc =N2;net "led_seg(7)" loc =N1;实验结果:实验箱数码管依次显示“1234”。
vhdl共阴极数码显示电路

vhdl共阴极数码显示电路VHDL共阴极数码显示电路VHDL是一种硬件描述语言,用于描述数字电路和系统。
共阴极数码显示电路是一种常见的数字电路,用于显示数字和字母等字符。
在本文中,我们将介绍如何使用VHDL设计共阴极数码显示电路。
1. 共阴极数码管共阴极数码管是一种常见的数码管,它由多个LED组成,每个LED代表一个数字或字母。
共阴极数码管的阴极是共用的,而每个LED的阳极是独立的。
当某个LED的阳极接通时,它会发光,显示相应的数字或字母。
2. VHDL设计VHDL可以用于描述数字电路和系统。
在设计共阴极数码显示电路时,我们需要使用VHDL描述每个LED的控制信号。
以下是一个简单的VHDL代码示例:entity common_cathode isport (a, b, c, d, e, f, g : out std_logic;num : in integer range 0 to 9);end common_cathode;architecture Behavioral of common_cathode isbegincase num iswhen 0 =>a <= '0';b <= '0';c <= '0';d <= '0';e <= '0';f <= '0';g <= '1';when 1 =>a <= '1';b <= '0';c <= '0';d <= '1';e <= '1';f <= '1';g <= '1';when 2 =>a <= '0';b <= '0';c <= '1';d <= '0';e <= '0';f <= '1';g <= '0';when 3 =>a <= '0';b <= '0';c <= '0';d <= '0';e <= '1';f <= '1';g <= '0';when 4 =>a <= '1';b <= '0';c <= '0';d <= '1';e <= '1';f <= '0';g <= '0';when 5 =>a <= '0';b <= '1';c <= '0';d <= '0';e <= '1';f <= '0'; g<= '0';when 6 =>a <= '0';b <= '1';c <= '0';d <= '0';e <= '0';f <= '0'; g<= '0';when 7 =>a <= '0';b <= '0';c <= '0';d <= '1';e <= '1';f <= '1'; g<= '1';when 8 =>a <= '0';b <= '0';c <= '0';d <= '0';e <= '0';f <= '0'; g<= '0';when 9 =>a <= '0';b <= '0';c <= '0';d <= '1';e <= '1';f <= '0'; g<= '0';when others =>a <= '0';b <= '0';c <= '0';d <= '0';e <= '0';f <= '0'; g<= '0';end case;end Behavioral;在上面的代码中,我们定义了一个实体common_cathode,它有7个输出端口a、b、c、d、e、f、g和一个输入端口num。
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编程后,需要利用仿真工具进行电路的仿真和验证。
通过对电路进行不同输入条件和时钟频率下的仿真,可以验证电路的正确性和稳定性。
如果仿真结果符合预期,则可以进入下一阶段的电路实现。
四、实例应用共阴极数码显示电路在实际应用中有广泛的应用场景。
按键控制数码管显示

按键控制数码管显示试验1:首先打开keil 4软件,如下图新建一个工程
2:输入工程名称后点保存
3:选择你用的单片机型号后点OK
4:我的是89C52所以如下选择后点OK
5:然后新建一个组
6:输入组名称,注意一定和工程名一致,且后缀名为asm
7:然后在将组加进来
8:如下选择刚保存的组然后点加入
9:然后设置频率12M
10:照图上挨个点上勾
11:debug为最后项,照图点上勾,然后OK
12然后编写程序,写好检查后点击运行
机等待烧录软件提示给单片机上电。
14:效果图:
总结:这次试验是按键控制数码管显示数字0~9的增减、以及流水灯的闪烁。
通过大家的努力实现。
感谢本组每位组员的努力。
本组成员【王思琪、熊飞、孔恩、李云彬、王鹏碧】。
vhdl七段数码管显示0到9计数器显示电路设计

vhdl七段数码管显示0到9计数器显示电路设计在 VHDL 中,可以使用进程`PROCESS`和状态机来实现七段数码管显示 0 到 9 的计数器显示电路设计。
以下是一个示例代码:```vhdl-- 七段数码管显示 0 到 9 的计数器显示电路设计-- 定义七段数码管的显示编码CONSTANT seven_seg : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1111110";CONSTANT seg_map : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000011";-- 定义计数器的位数和初始值CONSTANT count_width : NATURAL := 4;CONSTANT count_init : NATURAL := 0;-- 声明计数器和七段数码管显示的信号Signal count : STD_LOGIC_VECTOR(count_width - 1 DOWNTO 0);Signal seg : STD_LOGIC_VECTOR(6 DOWNTO 0);-- 计数器的进程Process (clk)BeginIf clk'event and clk = '1' ThenIf count = count_init - 1 Thencount <= count_init;Elsecount <= count + 1;End If;End If;End Process;-- 七段数码管显示的进程Process (count)BeginCase count IsWhen count_init - 1 => seg <= seven_seg;When count_init => seg <= seg_map;When count_init + 1 => seg <= seven_seg;When count_init + 2 => seg <= seg_map;When count_init + 3 => seg <= seven_seg;When count_init + 4 => seg <= seg_map;When count_init + 5 => seg <= seven_seg;When count_init + 6 => seg <= seg_map;When count_init + 7 => seg <= seven_seg;When count_init + 8 => seg <= seg_map;When count_init + 9 => seg <= seven_seg;When Others => seg <= seven_seg;End Case;End Process;-- 连接计数器和七段数码管显示的信号Output seg;```上述代码中,使用了两个进程`PROCESS`来实现计数器和七段数码管的显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vhdl按键控制数码管显示
在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用HDL 设计系统硬件电路时主要使用HDL编写源程序。
VHDL的主要优点有:
(1)VHDL支持自顶至下的和基于库的设计方法,而且支持同步电路、异步电路、现场可编程门阵列器件FPGA(field programmable gate array)以及其他随机电路的设计。
(2)VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计再利用的功能,它支持系统的数学模型直到门级电路的描述,并且高层次的行为描述与低层次的门级电路描述、结构描述可以混合使用。
(3)VHDL的硬件描述与具体的工艺技术和硬件结构无关,当门级或门级以上的描述通过仿真检验后,再利用相应的工具将设计映射成不同的工艺,因此电路的设计与工艺的改变是相互独立的。
彼此的改变不会产生不良影响,并且VHDL硬件描述语言的实现目标器件的选择范围广泛,可使用各系列的CPLD、FPGA及各种门阵列器件。