VHDL實現數碼管的動態掃瞄(可以連線其他的模組)

2022-09-19 19:57:08 字數 2386 閱讀 6455

對於我為什麼要寫這個模組,其實主要的原因就是這個東西在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大作業的很重要的一部分,上面只是給出了乙個簡單的模板而已,自己可以按照需求進行新增。然後生成元器件進行連線即可。

FPGA動態掃瞄數碼管

功能 用兩個數碼管顯示0 99的數,每隔一秒加1。由於數碼管的段選段是連在一起的,要想兩個數碼管顯示不一樣的值,就必須動態地掃瞄數碼管。因為人眼地時間解析度是20ms,只要掃瞄數碼管地的週期小於20ms,就可以使用殘影讓數碼管顯示數值,給人的感覺就是數碼管同時顯示了兩個數字。使用到的模組 1.查詢表...

嵌入式之數碼管動態掃瞄

總結數碼管作為顯示的部件,在小家電中得以廣泛的應用 如果根據乙個數碼管是8位的話,只用單獨的i o來控制,需要用到32 4個i o,顯然這樣比較浪費微控制器的資源。通常條件下,人眼的識別連貫影象的速度是24幀 秒,也就是1000毫秒 24幀,大約為40ms 毫秒 所以我們可以利用這個人眼 影像時,產...

14 動態數碼管的使用

工作原理 動態顯示的特點是將所有的位數碼管的段選線併聯在一起,由位選線控制是哪一位數碼管有效。這樣一來,就沒有必要每一位數碼管配乙個鎖存器,從而大大簡化了硬體電路。選亮數碼管採用動態掃瞄顯示。所謂動態掃瞄顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的餘暉和人眼視覺暫留作用,使人的感覺好像...