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