-
1 # 影片好笑
-
2 # 使用者1042898638258
給你講下思路吧,,對於數碼管顯示,用動態掃描法,對應的二極體亮法對應著一個數字,這個網上隨便搜就有了!!在程式中你可以用CASE WHEN語句來實現,而對於外部輸入的三個控制訊號,也就相當於是一個計數器的控制訊號,,你可以這樣
entity shuma is
port(clk,reset:in std_logic;
start,cs:in std_logic;
disp1,disp2:out std_logic_vector(7 downto 0);
led:out std_logic);
end entity;
architecture art of shuma is
signal count1:integer range 0 to ......;自已算
signal count2,count3:integer range 0 to 99;
signal clk_div,led_flag:std_logic;
begin
process(clk,reset,count1)----首先進行時鐘分頻,分成1hz的;
begin
if reset="1" then
count1
elsif clk"event and clk="1" then
if count1=?? then ---這個倍數根據你的FPGA板的時鐘頻率和1hz進行計算
count1
else count
end if;
end if;
end process;
process(clk_div,reset,count2) ---數碼管計數程序;
begin
if reset="1" then
count2
elsif clk_div"event and clk_div="1" then
if count2=99 then
led_flag
count2
else count2
end if;
end if;
end process;
process(count)--將計數的數值顯示在數碼管上,,用動態掃描法,對應關係
begin 自已查;
case count is
when 0=>disp1,disp2...
end case;
同樣的LED和測試程式 就是一個計數器,和上面類似,,,我要去上課啦,,希望以上那些可以幫助你!!!
回覆列表
不好意思啊,好久沒用VHDL了,有點忘了,不過原理應該挺簡單的啊,定義2個輸出端,分別表示2個數碼管的資料,每來一個時鐘加1,一直加到99之後清零,只不過要將時鐘設為10Hz,即時鐘週期0.1秒,這樣每0.1秒加1,相當於從0記到9.9秒。你要是需要的話我把以前寫的秒錶程式發給你,你參考一下。