用VHDL语言在EDA板上使用数码管显示数字
使用板如下,是8管脚的数码管:
如图所示,有八个输入:
因此在定义实体的时候需要有八个输出:
ENTITY seg7 IS
PORT( bcd: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
a,b,c,d,e,f,g,h: OUT STD_LOGIC);
END seg7;
取不同名字是为了方便对应输入
然后是最重要的一点了,哪个数码管对应哪个位置,经过总结,我得出了结论,如下:
什么意思呢,比如说想让管脚1亮,则可以令输出等于10000000,管脚2亮则输出为01000000,管脚号代表的是管脚在输出序列中的顺序:
因此可得:
0:11111100
1:01100000
2:11011010
3:11110010
4:01100110
5:10110110
6:10111110
7:11100000
8:11111110
9:11110110
只要按顺序从A输入到H输入输入如上序列,则可以显示1~9。
根据这一点,可以写出代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY seg7 IS
PORT( bcd: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
a,b,c,d,e,f,g,h: OUT STD_LOGIC);
END seg7;
ARCHITECTURE one OF seg7 IS
SIGNAL dout: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
WITH bcd SELECT
dout <="11111100" WHEN "0000",
"01100000" WHEN "0001",
"11011010" WHEN "0010",
"11110010" WHEN "0011",
"01100110" WHEN "0100",
"10110110" WHEN "0101",
"10111110" WHEN "0110",
"11100000" WHEN "0111",
"11111110" WHEN "1000",
"11110110" WHEN "1001",
"00000000" WHEN OTHERS;
a<= dout(7);
b<= dout(6);
c<= dout(5);
d<= dout(4);
e<= dout(3);
f<= dout(2);
g<= dout(1);
h<= dout(0);
END one;
根据不同的输入改变显示管上的数字。