vhdl按键控制数码管显示

合集下载

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

(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)
信号源模块的时钟选择为 1KHZ,第一个实验则有一位数码管重重复显示 0-9 的数,第二个实验则八位数码管显示了学号后8 位。其部分结果如下所示:
(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段数码管循环显示

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键盘控制实验

超完美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实验报告

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是一种硬件描述语言,用于描述数字电路和系统。

共阴极数码显示电路是一种常见的数字电路,用于显示数字和字母等字符。

在本文中,我们将介绍如何使用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共阴极数码显示电路一、引言数字显示电路是现代电子设备中常见的基础电路之一,它能将数字信号转换为人们可以直观理解的数字显示形式。

在数字显示电路中,共阴极数码显示电路是一种常见且重要的设计方式。

本文将深入探讨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七段数码管显示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`来实现计数器和七段数码管的显示。

基于VHDL的矩阵键盘及显示电路设计

基于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代码(包括数码管1Hz0-9变化、计数器、分频器、数码管显示、代码网址)

vhdl代码(包括数码管1Hz0-9变化、计数器、分频器、数码管显示、代码网址)

可实现功能:数码管显示,最右侧的一位数码管以1Hz变化由0-9循环往复分频+计数+显示整合之后(请注意改名后使用)100%成功:library ieee;use ieee.std_logic_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity zhengti28 isport(clk:in std_logic;zhengti28:out std_logic;cp,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));end;architecture one of zhengti28 issignal cnt:std_logic_vector(2 downto 0);signal clk_temp:std_logic;SIGNAL temp:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tmp: INTEGER RANGE 0 TO 49999999;SIGNAL clk_out: STD_LOGIC;constant m:integer:=5;beginprocess(clk)beginif clk'event and clk='1' thenif cnt=m thenclk_temp<=not clk_temp;cnt<="000";elsecnt<=cnt+1;end if;end if;end process;zhengti28<=clk_temp;P1:PROCESS(cp)BEGINIF cp'event AND cp='1' THENIF tmp=49999999 THENtmp<=0;ELSEtmp<=tmp+1;END IF;IF tmp<=24999999 THENclk_out<='0';ELSEclk_out<='1';END IF;END IF;END PROCESS P1;P2:PROCESS(clear,clk_out)BEGINIF clear='1' THEN temp<="0000";ELSIF (clk_out'event and clk_out='1') THENIF temp="1001"THENtemp<="0000";ELSEtemp<=temp+1;END IF;END IF;END PROCESS P2;q<=temp;PROCESS(temp)BEGINCASE temp ISWHEN "0000"=>LED7S<="0111111";--X"3F"->0WHEN "0001"=>LED7S<="0000110";--X"06"->1WHEN "0010"=>LED7S<="1011011";--X"5B"->2WHEN "0011"=>LED7S<="1001111";--X"4F"->3WHEN "0100"=>LED7S<="1100110";--X"66"->4WHEN "0101"=>LED7S<="1101101";--X"6D"->5WHEN "0110"=>LED7S<="1111101";--X"7D"->6WHEN "0111"=>LED7S<="0000111";--X"07"->7WHEN "1000"=>LED7S<="1111111";--X"7F"->8WHEN "1001"=>LED7S<="1101111";--X"6F"->9WHEN OTHERS=>LED7S<="0000000";--X"6F"->null END CASE;cat<="111110";END PROCESS;END;其管脚设置:异步复位8421码十进制计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BCDcoder ISPORT(cp,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END BCDcoder;ARCHITECTURE a OF BCDcoder ISSIGNAL temp:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tmp: INTEGER RANGE 0 TO 49999999; SIGNAL clk_out: STD_LOGIC;BEGINP1:PROCESS(cp)BEGINIF cp'event AND cp='1' THENIF tmp=49999999 THENtmp<=0;ELSEtmp<=tmp+1;END IF;IF tmp<=24999999 THENclk_out<='0';ELSEclk_out<='1';END IF;END IF;END PROCESS P1;P2:PROCESS(clear,clk_out)BEGINIF clear='1' THEN temp<="0000";ELSIF (clk_out'event and clk_out='1') THENIF temp="1001"THENtemp<="0000";ELSEtemp<=temp+1;END IF;END IF;END PROCESS P2;q<=temp;END a;分频器(上图为分频结果)library ieee;use ieee.std_logic_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpin28 isport(clk:in std_logic;fenpin28:out std_logic);end;architecture one of fenpin28 issignal cnt:std_logic_vector(2 downto 0);signal clk_temp:std_logic;constant m:integer:=5;beginprocess(clk)beginif clk'event and clk='1' thenif cnt=m thenclk_temp<=not clk_temp;cnt<="000";elsecnt<=cnt+1;end if;end if;end process;fenpin28<=clk_temp;end;计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jishu28 ISPORT(cp,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END jishu28;ARCHITECTURE a OF jishu28 ISSIGNAL temp:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tmp: INTEGER RANGE 0 TO 49999999; SIGNAL clk_out: STD_LOGIC;BEGINP1:PROCESS(cp)BEGINIF cp'event AND cp='1' THENIF tmp=49999999 THENtmp<=0;ELSEtmp<=tmp+1;END IF;IF tmp<=24999999 THENclk_out<='0';ELSEclk_out<='1';END IF;END IF;END PROCESS P1;P2:PROCESS(clear,clk_out)BEGINIF clear='1' THEN temp<="0000";ELSIF (clk_out'event and clk_out='1') THENIF temp="1001"THENtemp<="0000";ELSEtemp<=temp+1;END IF;END IF;END PROCESS P2;q<=temp;END a;数码管:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shuma28 ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END;ARCHITECTURE ONE OF shuma28 ISBEGINPROCESS(A)BEGINCASE A ISWHEN "0000"=>LED7S<="0111111";--X"3F"->0WHEN "0001"=>LED7S<="0000110";--X"06"->1WHEN "0010"=>LED7S<="1011011";--X"5B"->2WHEN "0011"=>LED7S<="1001111";--X"4F"->3WHEN "0100"=>LED7S<="1100110";--X"66"->4WHEN "0101"=>LED7S<="1101101";--X"6D"->5WHEN "0110"=>LED7S<="1111101";--X"7D"->6WHEN "0111"=>LED7S<="0000111";--X"07"->7WHEN "1000"=>LED7S<="1111111";--X"7F"->8WHEN "1001"=>LED7S<="1101111";--X"6F"->9WHEN OTHERS=>LED7S<="0000000";--X"6F"->null END CASE;cat<="111110";END PROCESS;END;一个有很多vhdl代码的网址:/download/shaoqso111/1901736。

VHDL数码管扫描显示实验代码

VHDL数码管扫描显示实验代码

静态数字显示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY staticdigital ISPORT (clk,rst: IN STD_LOGIC; --rst复位,高有效figures: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --七段数码管cats: OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --控制端END staticdigital;ARCHITECTURE digital OF staticdigital ISSIGNAL address: STD_LOGIC_VECTOR(2 DOWNTO 0); --记录控制端信号中‘0’的位--置,亦即当前数码管的位置SIGNAL colti: INTEGER RANGE 1 TO 2500; --外部时钟,控制一次状态显示的时间BEGINPROCESS(clk,rst)BEGINIF(rst = '1') THEN --复位端有效address <= "111";ELSIF(clk'EVENT AND clk = '1') THEN --等待时钟上升沿的到来colti <= colti + 1;IF(address = "101") THENIF (colti = 2500) THEN --但是要考虑外部时钟是否停留了足够的时间address <= "000";END IF;ELSEIF (colti = 2500) THENaddress <= address + 1;END IF;END IF;END IF;END PROCESS;PROCESS(address)--一个结构体可以有多个进程,--进程之间是并行运行的。

vhdl共阴极数码显示电路

vhdl共阴极数码显示电路

vhdl共阴极数码显示电路VHDL共阴极数码显示电路数码显示器是一种常见的电子显示设备,它能够将数字信息以可视化的方式呈现给用户。

VHDL共阴极数码显示电路是一种使用VHDL 语言设计的共阴极数码显示器电路。

本文将详细介绍VHDL共阴极数码显示电路的原理和设计过程。

共阴极数码显示器是一种常见的数码显示器类型,它由多个共阴极数码管组成。

每个共阴极数码管由7个LED灯组成,可显示0到9的数字。

共阴极数码管的工作原理是,当给定特定的电压时,相应的LED灯会点亮,形成所需的数字。

其中,共阴极表示数码管的阴极端口是连接在一起的,而阳极端口则是分别连接的。

VHDL语言是一种用于描述数字系统的硬件描述语言,它可以对数字电路进行建模和仿真。

使用VHDL语言进行设计,可以使得电路的功能更加清晰明了,并且可以方便地进行验证和修改。

在设计VHDL共阴极数码显示电路时,首先需要定义输入和输出信号。

输入信号通常包括一个4位的二进制数,用于表示要显示的数字。

输出信号是连接到共阴极数码管的引脚,用于控制数码管的亮灭。

接下来,需要编写VHDL代码来描述共阴极数码显示电路的行为。

代码主要包括两部分:数码管驱动模块和顶层模块。

数码管驱动模块是用来控制数码管显示的核心模块。

它根据输入的二进制数,将对应的数字显示在数码管上。

在这个模块中,需要定义一个包含数字对应的真值表,以便根据输入的二进制数选择对应的数字。

顶层模块是将数码管驱动模块和输入输出信号连接起来的模块。

它负责接收输入信号,将其传递给数码管驱动模块,并将输出信号连接到数码管的引脚上。

设计完成后,可以使用VHDL仿真工具对设计的电路进行验证。

通过输入不同的二进制数,观察数码管上显示的数字是否与预期相符。

如果一切正常,可以将设计的电路下载到FPGA或其他可编程逻辑器件中进行实际的硬件测试。

VHDL共阴极数码显示电路具有简单、可靠、易于实现等优点。

它在数字电子系统中得到广泛应用,例如计数器、时钟、测量仪器等。

vhdl语言数字钟带译码器的数码管显示

vhdl语言数字钟带译码器的数码管显示

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shzizhong isport(clk,stop,reset,tiaoshi,tiaofen:in std_logic;--停止,复位,调时,调分功能miaoling,miaoge,miaoshi:out std_logic_vector(3 downto 0);--对应各自数码管译码器的四fenge,fenshi,shige,shishi:out std_logic_vector(3 downto 0)); --位二进制输出end shzizhong;architecture dong of shzizhong issignal fen1,fen2,miao1,miao2,shi1,shi2:integer range 0 to 9;signal miao0_clk,fen1_clk,shi1_clk,miao1_clk:std_logic;signal jiaoshi_clk,fen_clk,shi_clk:std_logic;beginprocess(CLK,stop) --50M分频为10hzvariable n1:integer range 0 to 2499999;beginif rising_edge(Clk) thenif n1<2499999 then n1:=n1+1;else n1:=0; miao0_clk<=not miao0_clk;end if;end if;end process;process(miao0_clk)--产生校时信号variable cq0:std_logic_vector(2 downto 0);beginif rising_edge(miao0_Clk) thenif cq0<2 then cq0:=cq0+1;jiaoshi_clk<='0';else cq0:= (others =>'0');jiaoshi_clk<='1';end if;end if;end process;process(miao0_clk,reset,stop) --0.1s 10进制计数器variable cq1:std_logic_vector(3 downto 0);beginif stop='0' thenif reset='1' then cq1:= (others =>'0');elsif rising_edge(miao0_Clk) thenif cq1<9 then cq1:=cq1+1;miao1_clk<='0';else cq1:= (others =>'0');miao1_clk<='1';end if;end if;end if;miaoling<=cq1;end process;process(miao1_clk,reset,tiaofen,fen1_clk,jiaoshi_clk)-- 秒,60进制计数器variable cq4:integer range 0 to 59;beginif reset='1' then cq4:=0;elsif rising_edge(miao1_Clk) thenif cq4<59 then cq4:=cq4+1;fen1_clk<='0';else cq4:=0;fen1_clk<='1';end if;end if;miao2<=cq4 / 10; --对10取整,即调取十位上的数miao1 <=cq4 rem 10;-- 对10取余,即调取个位上的数fen_clk<= (tiaofen and jiaoshi_clk) or ((not tiaofen) and fen1_clk);--调分的语句case miao2 iswhen 0 => miaoshi<="0000";when 1 => miaoshi<="0001";when 2 => miaoshi<="0010";when 3 => miaoshi<="0011";when 4 => miaoshi<="0100";when 5 => miaoshi<="0101";when others => null;end case;case miao1 iswhen 0 => miaoge<="0000";when 1 => miaoge<="0001";when 2 => miaoge<="0010";when 3 => miaoge<="0011";when 4 => miaoge<="0100";when 5 => miaoge<="0101";when 6 => miaoge<="0110";when 7 => miaoge<="0111";when 8 => miaoge<="1000";when 9 => miaoge<="1001";when others => null;end case;end process;process(fen_clk,reset,tiaoshi,jiaoshi_clk,shi1_clk)--分钟,60进制计数器variable cq5:integer range 0 to 59;beginif reset='1' then cq5:=0;elsif rising_edge(fen_Clk) thenif cq5<59 then cq5:=cq5+1;shi1_clk<='0';else cq5:=0;shi1_clk<='1';end if;end if;fen2<= cq5 / 10;--对10取整,即调取十位上的数fen1 <= cq5 rem 10; --对10取余,即调取个位上的数shi_clk<= (tiaoshi and jiaoshi_clk) or ((not tiaoshi) and shi1_clk); --调时的语句case fen2 iswhen 0 => fenshi<="0000";when 1 => fenshi<="0001";when 2 => fenshi<="0010";when 3 => fenshi<="0011";when 4 => fenshi<="0100";when 5 => fenshi<="0101";when others => null;end case;case fen1 iswhen 0 => fenge<="0000";when 1 => fenge<="0001";when 2 => fenge<="0010";when 3 => fenge<="0011";when 4 => fenge<="0100";when 5 => fenge<="0101";when 6 => fenge<="0110";when 7 => fenge<="0111";when 8 => fenge<="1000";when 9 => fenge<="1001";when others => null;end case;end process;process(shi_clk,reset)--小时,十二进制计数器variable cq6:integer range 0 to 11;beginif reset='1' then cq6:=0;elsif rising_edge(shi_Clk) thenif cq6<11 then cq6:=cq6+1;else cq6:=0;end if;end if;shi1<= cq6 rem 10;shi2<= cq6 / 10;case shi2 iswhen 0 => shishi<="0000";when 1 => shishi<="0001";when others => null;end case;case shi1 iswhen 0 => shige<="0000";when 1 => shige<="0001";when 2 => shige<="0010";when 3 => shige<="0011";when 4 => shige<="0100";when 5 => shige<="0101";when 6 => shige<="0110";when 7 => shige<="0111";when 8 => shige<="1000";when 9 => shige<="1001";when others => null;end case;end process;end dong;--本次EDA实习较简单,是用FPGA芯片Cyclone:EP1C3T144C8 来设计完成,采用50MHZ 的输入时钟,对其进行分频到10HZ 作为最低位的计数时钟,最低位即0.1s的显示,用10进制计数器计10HZ时钟上升沿的跳变次数,来实现这一位的计时,当出现进位时,10进制计数器清零并输出进位信号(即1s的时钟信号),再用60进制对一秒的信号进行计数,并进位输出一分钟的时钟信号。

基于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实现脉冲按键电话显示器

用VHDL实现脉冲按键电路显示器第一章绪论1.1前言EDA(Electronic Design Automation,电子设计自动化)技术正是为了适应现代电子产品设计的要求,吸引多学科最新成果而形成的一门新技术。

利用EDA进行电子系统设计,具有以下几个特点:(1)用软件的方式设计硬件;(2)用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;(3)设计过程中可用有关软件进行各种仿真;(4)系统可现场编程,在线升级;(5)整个系统可集成在一个芯片上,体积小,功耗低,可靠性高。

因此,EDA技术是现代电子设计的发展趋势。

我们本学期开设了EDA 课程,并开设了为期两周的EDA技术实训,主要利用VHDL语言编程,我们组的题目具体如下。

1.2题目要求1、设计一个具有最高8位显示的电话按键显示器,能准确地反映按键数字;2、显示器显示从低位向高位前移,逐位显示按键数字,最低位显示当前输入数字;设置“删除键”,按下此键,从最低位开始删除数字,同时显示器数字从高位向低位移动。

3、设置“拨号键”、“挂机键”、和“重拨键”,拨号键模拟拨号,按下此键拨号指示灯亮,并存储当前号码;挂机键按下后,待机指示灯亮,2秒后熄灭显示器显示;重拨键按下能显示最后一次输入的电话号码。

第二章脉冲按键电路显示器设计方案2.1系统设计思路与框图我们设计的用VHDL语言实现的脉冲按键电话显示器由4个模块组成:按键电路,译码器,移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。

脉冲按键电话的总体设计框图如图2.1所示:图2.1 脉冲按键电话总体设计方案2.2 各模块功能分析2.2.1按键电路模块按键电路功能:提供0~9数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。

2.2.2 译码电路模块译码电路功能:译码器的功能分为两个部分,第一部分把输入的一位键值转换成四位BCD码;第二部分把4位二进制码译成相应的数码管输出显示码。

vhdl七段数码管显示0到9计数器显示电路设计 -回复

vhdl七段数码管显示0到9计数器显示电路设计 -回复

vhdl七段数码管显示0到9计数器显示电路设计-回复如何设计一个能够显示0到9的计数器的七段数码管显示电路。

文章长度:1500-2000字一、引言(100字左右)计数器是数字电路中非常常见的一个组件,而七段数码管则是用于显示数字的一种常用装置。

本文将详细介绍如何设计一个能够实现0到9的计数器,并利用七段数码管进行显示的电路。

二、理论基础(200字左右)在开始设计电路之前,我们需要掌握一些基本的理论知识。

七段数码管是由七个LED组成的,每个LED被称为一个段,分别用a、b、c、d、e、f、g表示。

通过控制七个段的亮灭可以显示不同的数字。

例如,要显示数字0,将a、b、c、d、e、f亮起,而要显示数字1,则只需将b、c 亮起。

三、设计电路(600字左右)1. 确定计数范围根据题目要求,我们需要设计一个能够显示0到9的计数器。

因此,计数范围为0到9,共有10个数字需要显示。

2. 确定计数位数根据题目要求,我们需要设计的是一个十进制计数器,因此需要三个计数位。

每个计数位都是一个0到9的计数器。

3. 设计逻辑电路我们可以使用JK触发器作为计数器的基本构建模块。

JK触发器有两个输入和两个输出,分别称为J、K和Q、~Q。

其中,J和K分别用于控制触发器状态的跳变,而Q和~Q是触发器的两个状态。

我们可以使用三个JK触发器构建一个三位的二进制计数器。

具体电路如下:第一个JK触发器的CLK输入连接计数器电路的时钟信号,J、K和第二个JK触发器的CLK端连接在一起,第二个JK触发器的Q输出连接第三个触发器的J输入,第一个触发器的Q输出连接了第三个触发器的K输入。

这样的设计将会实现三个触发器之间的互动。

4. 连接七段数码管根据七段数码管的布局,我们需要将七段的对应输入连接到计数器的输出。

根据计数器的输出值,我们可以设定哪些段需要亮起或熄灭。

连接七段数码管的具体方法可以参考其数据手册或规格说明。

四、测试与调试(400字左右)完成电路的设计之后,我们需要进行测试和调试,以确保电路能够正常显示0到9的数字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

vhdl按键控制数码管显示
 在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用HDL 设计系统硬件电路时主要使用HDL编写源程序。

 VHDL的主要优点有:
 (1)VHDL支持自顶至下的和基于库的设计方法,而且支持同步电路、异步电路、现场可编程门阵列器件FPGA(field programmable gate array)以及其他随机电路的设计。

 (2)VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计再利用的功能,它支持系统的数学模型直到门级电路的描述,并且高层次的行为描述与低层次的门级电路描述、结构描述可以混合使用。

(3)VHDL的硬件描述与具体的工艺技术和硬件结构无关,当门级或门级以上的描述通过仿真检验后,再利用相应的工具将设计映射成不同的工艺,因此电路的设计与工艺的改变是相互独立的。

彼此的改变不会产生不良影响,并且VHDL硬件描述语言的实现目标器件的选择范围广泛,可使用各系列的CPLD、FPGA及各种门阵列器件。

相关文档
最新文档