VHDL_3641BS四个7段数码管显示实验

VHDL_3641BS四个7段数码管显示实验

DATE:2016/10/27

CSDN主页

硬件连接图

PIN 七段数码管引脚 七段数码管含义
7 1 E
5 2 D
3 3 DP
1 4 C
143 5 G
141 6 第一个共阳
140 7 B
142 8 第二个共阳
144 9 第三个共阳
2 10 F
4 11 A
6 12 第四个共阳

以上为我开发版的硬件连接图,到手就是这样没办法改.使用的数码管为3641BS(共阳极)
从上图可知,我们使用四个共阳引脚作为每个数码管的片选信号,所以在代码器件里面我写了如下信号


entity led is   
port (  
clkin:in std_logic;  
clkout:out std_logic_vector(7 downto 0);  
enout:out std_logic_vector(3 downto 0)  
);  
名称 含义
clkin 时钟输入信号
clkout 七段数码管阴极接脚,为了方便,[7-0]对应[DP,G,F,E,D,C,B,A]
enout 四个七段数码管的共阳极片选信号线,[3-0]对应[四,三.二,一]

在这个实验当中,我们只能选择使用片选分别选其中某一个数码管来进行显示,所以我们这个是一个大循环,可以分频做也可以不分频做.
对于显示的内容,经过对七段数码管接线和程序管脚定义来看,我们可以算出如下列表

因为是共阳极的数码管,所以当公共脚为0,管脚为1的时候进行点亮

显示字样 clkout值
0 11000000
1 11111001
2
  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一个简单的VHDL代码示例,实现矩阵键盘控制7数码管显示。 在这个例子中,我们假设使用一个4x4的矩阵键盘和一个共阳极的4位7数码管。其中,矩阵键盘的输入按键分别对应数字0~9和字母A~F,共16个按键;而7数码管的4个引脚分别对应4位二进制数的高位到低位。 ``` entity matrix_keypad is port( row: in std_logic_vector(3 downto 0); col: out std_logic_vector(3 downto 0); key: out std_logic_vector(3 downto 0) ); end entity matrix_keypad; architecture behavior of matrix_keypad is begin col <= "1110"; key <= "1111"; process(row) begin case row is when "1110" => key <= "1110"; -- 0 when "1101" => key <= "1101"; -- 1 when "1011" => key <= "1011"; -- 2 when "0111" => key <= "0111"; -- 3 when "1100" => key <= "1110"; -- 4 when "1010" => key <= "1101"; -- 5 when "0110" => key <= "1011"; -- 6 when "1001" => key <= "0111"; -- 7 when "0101" => key <= "1110"; -- 8 when "0011" => key <= "1101"; -- 9 when "0001" => key <= "1011"; -- A when "0010" => key <= "0111"; -- B when "0100" => key <= "1110"; -- C when "1000" => key <= "1101"; -- D when "0000" => key <= "1011"; -- E when others => key <= "0111"; -- F end case; end process; end behavior; entity seven_segment is port( num: in std_logic_vector(3 downto 0); seg: out std_logic_vector(6 downto 0) ); end entity seven_segment; architecture behavior of seven_segment is begin process(num) begin case num is when "0000" => seg <= "1000000"; -- 0 when "0001" => seg <= "1111001"; -- 1 when "0010" => seg <= "0100100"; -- 2 when "0011" => seg <= "0110000"; -- 3 when "0100" => seg <= "0011001"; -- 4 when "0101" => seg <= "0010010"; -- 5 when "0110" => seg <= "0000010"; -- 6 when "0111" => seg <= "1111000"; -- 7 when "1000" => seg <= "0000000"; -- 8 when "1001" => seg <= "0010000"; -- 9 when "1010" => seg <= "0001000"; -- A when "1011" => seg <= "0000011"; -- B when "1100" => seg <= "1000110"; -- C when "1101" => seg <= "0100001"; -- D when "1110" => seg <= "0000110"; -- E when others => seg <= "0001110"; -- F end case; end process; end behavior; entity keypad_display is port( row: in std_logic_vector(3 downto 0); col: out std_logic_vector(3 downto 0); seg: out std_logic_vector(6 downto 0) ); end entity keypad_display; architecture behavior of keypad_display is signal key: std_logic_vector(3 downto 0); signal num: std_logic_vector(3 downto 0) := "0000"; begin matrix_keypad_inst: entity work.matrix_keypad port map( row => row, col => col, key => key ); process(key) begin num <= key; end process; seven_segment_inst: entity work.seven_segment port map( num => num, seg => seg ); end behavior; ``` 在这个代码中,我们定义了三个实体:matrix_keypad、seven_segment和keypad_display。其中,matrix_keypad实体用于读取矩阵键盘输入,并将其转换为数字或字符;seven_segment实体用于将4位二进制数转换为7数码管的显示;keypad_display实体用于连接矩阵键盘和7数码管,提供完整的控制功能。 在keypad_display实体中,我们首先实例化了matrix_keypad和seven_segment两个实体,并将其连接到输入输出端口。然后,我们通过一个process语句将矩阵键盘读取的数字或字符保存到一个信号num中。最后,我们将num信号连接到seven_segment实体的输入端口,以显示相应的数字或字符。 注意:这个示例代码并没有进行仿真和测试,所以可能存在一些错误。在实际使用时,请根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值