数码管静态显示就是每个数码管的驱动电平不会改变,知道这个数码管的数值发生变化。
动态显示就是利用人眼反应迟钝,数码管轮流显示一段时间,比如都是20ms,效果看起来是几个数码管同时亮(实际是只有一个在点亮,其他的是余晖)。

静态显示亮度比较亮,功耗大
动态显示亮度稍微差点,但是显示位数多
注意动态扫描频率不要低于50Hz,最好高于60Hz,否则会看到数码管闪烁
通俗点说:
1、静态显示需要更多驱动电路所成本高多了同时软件编写也方便得多
2、动态显示其实闪烁所多人感觉眼睛舒服而静态显示没有问题
3、静态显示输出亮度高所室外LED显示屏几乎都静态动态般只室内使用静态的显示屏是直接驱动灯管。就是说如果一个灯是亮着的话,每一时刻他都是亮的,
动态的指的是每一时刻,显示屏只点亮其中的某些行。所以如果一个灯是亮的话,他不是总是亮的,而是通过视觉残留让你认为他是亮的,所以亮度没有静态的高。
静态的驱动比动态的驱动和算法要复杂的多。所需的硬件资源也很多。
library IEEE;
use IEEESTD_LOGIC_1164ALL;
use IEEESTD_LOGIC_ARITHALL;
use IEEESTD_LOGIC_UNSIGNEDALL;
entity dynamic is
Port ( clk : in std_logic;
reset: in std_logic;
din1 : in std_logic_vector(6 downto 0); --译码后的数据信号1
din2 : in std_logic_vector(6 downto 0); --译码后的数据信号2
din3 : in std_logic_vector(6 downto 0); --译码后的数据信号3
din4 : in std_logic_vector(6 downto 0); --译码后的数据信号4
shift: out std_logic_vector(3 downto 0); --位选信号
bus4 : out std_logic_vector(6 downto 0)); --数据信号
end dynamic;
architecture Behavioral of dynamic is
signal scan_clk:std_logic_vector(1 downto 0);
begin

process(clk,scan_clk,reset) --分频进程
variable scan:std_logic_vector(17 downto 0);
begin
if reset='1' then
scan:="000000000000000000";
scan_clk<="00";
elsif clk'event and clk='1'then
scan:=scan+1;
end if;
scan_clk<=scan(17 downto 16);
end process;
process(scan_clk,din1,din2,din3,din4) --扫描进程
begin
case scan_clk is
when "00"=>
bus4<=din1;
shift<="0001";
when "01"=>
bus4<=din2;
shift<="0010";
when "10"=>
bus4<=din3;
shift<="0100";
when "11"=>
bus4<=din4;

shift<="1000";
when others=> bus4<="0000000";shift<="0000";
end case;
end process;
end Behavioral;


