易野 2024-05-21 09:40 采纳率: 81.8%
浏览 24

vivado的动态数码管显示

img

img

img


动态数码管显示的原理是: 每次选通其中一位, 送出这位要显示的内容, 然后一段时间后选通下一位送出对应数据,4 个数码管这样依次选通并送出相应的数据,结束后再重复进行。这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
实验要求是显示1213这四个数字
需要详细的代码
麻烦了

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-21 09:40
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是希望得到帮助,以在Vivado环境下使用Basys3开发板控制四位动态数码管显示数字"1213"。

    【图片内容】:

    1. 第一张图片展示了实验的背景知识和要求,包括学习动态数码管的工作原理,以及在Basys3开发板上实现对四位动态数码管的控制,使其显示想要的数字。
    2. 第二张图片是共阴数码管对应的码值表,显示了不同数字对应的点亮状态。
    3. 第三张图片描述了Basys3开发板上使用的共阴极动态数码管的硬件连接方式,包括数码管的选通和段码脚的连接。

    【问题出现原因】:问题可能出现的原因可能包括对动态数码管工作原理的理解不足,或者在编写控制数码管显示特定数字的代码时遇到困难。

    【问题解决方案】:为了解决这个问题,需要编写VHDL或Verilog代码,以控制Basys3开发板上的数码管显示数字"1213"。这需要使用到动态扫描的原理,即通过快速轮流点亮各个数码管的段码来实现动态显示。

    【提供代码】:下面是一个简化的VHDL代码示例,用于在Basys3开发板上动态显示数字"1213"。请注意,这只是一个示例,您可能需要根据实际的硬件连接和开发环境进行调整。

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    
    entity dynamic_7seg is
        Port ( clk : in STD_LOGIC;
               dp : out STD_LOGIC_VECTOR(3 downto 0);
               seg : out STD_LOGIC_VECTOR(6 downto 0));
    end dynamic_7seg;
    
    architecture Behavioral of dynamic_7seg is
        signal count : integer := 0;
        signal seg_code : STD_LOGIC_VECTOR(6 downto 0);
        signal dp_code : STD_LOGIC_VECTOR(3 downto 0) := "0010"; -- 1
    begin
        process(clk)
        begin
            if rising_edge(clk) then
                if count = 20 then -- 调整计数器的值来改变扫描速度
                    count <= 0;
                else
                    count <= count + 1;
                end if;
                
                case count is
                    when 0 => seg_code <= "1111001"; -- 1
                    when 1 => seg_code <= "0111001"; -- 2
                    when 2 => seg_code <= "1011000"; -- 3
                    -- 其他数字的编码...
                    when others => null;
                end case;
            end if;
        end process;
    
        process(seg_code, dp_code)
        begin
            dp <= dp_code;
            seg <= seg_code;
        end process;
    end Behavioral;
    

    【代码运行方式】:这段代码需要在Vivado IDE中编写,并与Basys3开发板的硬件连接相匹配。您需要将这段代码加载到FPGA中,并确保所有的引脚连接正确。

    【代码预期运行结果】:

    数码管显示数字"1213",每个数字轮流点亮,由于视觉暂留效应,看起来像是同时显示。
    

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物