动态数码管依次显示0的VHDL程序
前言
本次实验所用软件为Quartus||9.0
,所用板载为EPF10K20T144-4
。
注意事项
(1)创建VHDL工程时选择板载系列一定要按照板载芯片上的系列选中。
(2)目前使用的Quartus || 9.0
不支持输入汉字的功能,只支持显示汉字的功能,所以想要在上面显示汉字,得先在记事本中写好自己要写的汉字内容,然后再复制粘贴到Quartus || 9.0
上的文件中。
(3)安装驱动程序前一定要记得禁止驱动程序签名。
(4)配置完引脚以后一定要记得要再编译一次。
实验题目
1、实现8段数码管依次显示0的VHDL程序。
代码实现
1、实现思路如下,设置一个名为s
的8位的STD_LOGIC_VECTOR
用来控制8个数码管的电路开关(注:0为开,1为关),一个名为q
的7位的STD_LOGIC_VECTOR
,用来接动态数码管的A
到G
引脚,然后再设置一个名为clk
的时钟,用来控制数码管的依次显示。(注:代码如下)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Digital_tube_1 is
port(
clk:in std_logic;--------------------------------时钟信号
s:out std_logic_vector(7 downto 0);--------------数码管
q:out std_logic_vector(6 downto 0));-------------段位
end Digital_tube_1;
architecture one of Digital_tube_1 is
signal clk1:std_logic;---------------分频
signal cnt1:integer range 0 to 7;---------------计数
signal count1:integer range 0 to 7;
begin
process(clk)
begin
if clk'event and clk = '1' then
if count1 = 7 then
clk1 <= '1';-------------------------------------1K
count1 <= 0;
else
count1 <= count1+1;
clk1 <= '0';
end if;
end if;
end process;
process(clk1)-------主要是让计算两个数码管的数值
begin
if clk1'event and clk1 = '1' then
if cnt1 = 7 then cnt1 <= 0;
else
cnt1 <= cnt1+1;
end if;
end if;
end process;
process(cnt1)------------------只是显示在某种状态下的段位显示,不参与计算
begin
case cnt1 is
when 0 => q <= "1111110";s <="01111111";------------cnt是1时,q显示0,依次选通s
when 1 => q <= "1111110";s <="10111111";
when 2 => q <= "1111110";s <="11011111";
when 3 => q <= "1111110";s <="11101111";
when 4 => q <= "1111110";s <="11110111";
when 5 => q <= "1111110";s <="11111011";
when 6 => q <= "1111110";s <="11111101";
when 7 => q <= "1111110";s <="11111110";
when others => null;
end case;
end process;
end one;
2、拓展发挥:想要使数码管显示别的字符改动q
即可,要想使数码管导通改动s
即可。(注:按如下引脚图改变数码管A到G引脚的高低电平即可显示不同的数字)
烧入板载实现