VHDL实现数码管的动态扫描(可以连接其他的模块)
VHDL实现数码管的动态扫描(可以连接其他的模块)
简述一下写的原因
对于我为什么要写这个模块,其实主要的原因就是这个东西在EDA的作业中会很重要。而且在我上次写的那个动态扫描,虽然可以实现数码管的动态扫描,但是那个终究只是我实现计数器的,而在我要做其他的模块的时候,使用那种方法来实现数码管的扫描,个人感觉比较吃力,也难的实现,所以我就所幸重新写了一个来重新实现数码管的动态扫描,然后就是顺便分享一下。仅此而已。
原理
虽然在前面已经说过了,但是我还是想简单的说一下**(因为个人有了一丝丝新的见解)**。 动态扫描,简而言之就是通过数码管在不同的时间下,来通过不同的段选信号以及位选信号来控制数码管的显示。然后如果加快一下频率的化,那么在你看来就是这些数字是一起显示的(因为人眼的余晖效应)。不知道啥是余晖效应的读者可以点一下链接。
实现过程
如果你能过读懂我所描述的原理的化,那么你就能很轻松的读懂下面的代码
好了,不说了,代码呈上。代码上我就做一点简单的注释,不难的,很容易看懂的。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity show is
port(
time_g:in std_logic_vector(3 downto 0);--计数器的个位信号
time_s:in std_logic_vector(3 downto 0);--计数器的十位信号
clk:in std_logic;
sel:out std_logic_vector(7 downto 0);
smg:out std_logic_vector(6 downto 0)
);
end;
architecture one of show is
begin
process(clk)
variable cnt:integer range 0 to 1:=0;--定义变量来实现对数码管的控制,这里实现的是一个简单的两位的计数器,所以是0到1
begin
if clk'event and clk='1' then
if cnt=0 then
sel<="11111101";
case time_s is
when "0000"=>smg<="1111110";
when "0001"=>smg<="0110000";
when "0010"=>smg<="1101101";
when "0011"=>smg<="1111001";
when "0100"=>smg<="0110011";
when "0101"=>smg<="1011011";
when "0110"=>smg<="1011111";
when "0111"=>smg<="1110000";
when "1000"=>smg<="1111111";
when "1001"=>smg<="1111011";
when others=>smg<="0000000";
end case;
cnt:=cnt+1;
elsif cnt=1 then
sel<="11111110";
case time_g is
when "0000"=>smg<="1111110";
when "0001"=>smg<="0110000";
when "0010"=>smg<="1101101";
when "0011"=>smg<="1111001";
when "0100"=>smg<="0110011";
when "0101"=>smg<="1011011";
when "0110"=>smg<="1011111";
when "0111"=>smg<="1110000";
when "1000"=>smg<="1111111";
when "1001"=>smg<="1111011";
when others=>smg<="0000000";
end case;
cnt:=0;
end if;
end if;
end process;
end;
嗯,我还是简单的说一下吧。
首先你定义了一个cnt来控制数码管,然后当时钟上升沿到来的时候,cnt=0的就开始工作,而当下一次时钟信号到来的时候,cnt=1的部分开始工作,然后循环往复,当时钟频率够快,你感觉看到的就是一起显示在上面的。(什么嘛,这不就是原理嘛,没错就是)
后续
这个是实现EDA大作业的很重要的一部分,上面只是给出了一个简单的模板而已,自己可以按照需求进行添加。然后生成元器件进行连线即可。
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决