目的
1. 進一步掌握vhdl語言的基本結構及設計的輸入方法。
2. 掌握bcd-七段顯示解碼器的設計思路;
內容
1. 使用撥碼開關sw3、sw2、sw1、sw0作為四位二進位制資料 d、c、 b、a的輸入;
2. 在最右邊的數碼管hex0上顯示輸入的bcd碼編碼數值。
原理
七段數碼管一般由8個發光二極體組成,其中由7個細長的發光二極體組成數字顯示,另外乙個圓形的發光二極體顯示小數點。 當發光二極體導通時,相應的乙個點或乙個筆畫發光。控制相應的二極體導通,就能顯示出各種字元。發光二極體的陽極連在一起的稱為共陽極數碼管,此時解碼器的輸出應該是低電平有效;陰極連在一起的稱為共陰極數碼管,此時解碼器的輸出應該是高電平有效。如圖2-25所示。
圖2-25 七段數碼管結構圖
74ls47是將四位二進位制編碼編碼轉化為十進位制數碼(bcd),並通過七段數碼管顯示出來的解碼器/驅動器,其引腳圖如圖2-26所示。74ls47可以驅動共陽極的發光二極體七段led顯示字元。
圖2-26 74ls47引腳圖
74ls47 有自動前、後沿滅零控制(rbi 和 rbo)。試燈(lt)可在 bi/rbo 端處於高電平的任何時刻去進行,該電路還含有乙個滅燈輸入(bi),它用來控制燈的亮度或禁止輸出。在輸入0~15時,74ls47顯示的字元如圖2-27所示。功能表如表2-2所示。
圖2-27 74ls47顯示字元
表2-2 74ls47功能表
de2-115配有八個七段數碼管。它們被分成兩組,每組4個,用來作為數字顯示用。de2-115的七段數碼管採用共陽極連線方式。fpga輸出低電平時,對應的字碼段點亮,反之則熄滅。要注意的是:在de2-115開發板上七段數碼管的點是不可用的。
操作
1.建立乙個quartus ii 工程,用來在de2-115上實現預期電路。
2.寫出預期電路的vhdl**。
3.將vhdl檔案包含進工程並編譯。
4.**電路來檢測其功能。
5.分配引腳。
7.通過de2-115開發板來證實電路是否準確。
程式
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bcd7 is
port ( ain,bin,cin,din: in std_logic; ----輸入4位
bcd碼
lt,rbi,bi:in std_logic;
a,b,c,d,e,f,g : out std_logic); --7段碼
end bcd7;
architecture arch of bcd7 is
signal q: std_logic_vector (3 downto 0);
begin
q<=din&cin&bin&ain;
process(q,lt,rbi,bi)
variable dout: std_logic_vector (6 downto 0);
begin
if bi='0' then
dout:="0000000";
elsif rbi='1'then
if lt='1' then
case q is
when "0001" => dout := "1111001";
when "0010" => dout := "0100100";
when "0011" => dout := "0110000";
when "0100" => dout := "0011001";
when "0101" => dout := "0010010";
when "0110" => dout := "0000010";
when "0111" => dout := "1111000";
when "1000" => dout := "0000000";
when "1001" => dout := "0011000";
when "1010" => dout := "0001000";
when "1011" => dout := "0000011";
when "1100" => dout := "1000110";
when "1101" => dout := "0100001";
when "1110" => dout := "0000110";
when "1111" => dout := "0001110";
when others => dout := "1000000";
end case;
end if;
end if;
a<=dout(0);
b<=dout(1);
c<=dout(2);
d<=dout(3);
e<=dout(4);
f<=dout(5);
g<=dout(6);
end process;
end arch;
結果
問題及解決
1.要好好看看工作原理。
2.檔名必須與vhdl檔案中的設計實體名保持一致。
總結:我個人感覺操作的規範化比較重要,如果操作不規範不僅使操作步驟繁瑣,也有可能帶來錯誤。其次是理解**含義,了解bcd-七段數碼管顯示解碼器的作用,清楚共陰極,共陽極的差別。應該可以比較順利完成任務。
七段數碼管顯示實驗
連線模組埠的中間變數使用wire型別,而不應該是reg型別 不能再always裡呼叫模組 在verilog中,所有的埠隱含地宣告wire型別 如果輸出型別的埠需要儲存數值,則必須將其顯式地宣告為reg資料型別。不能將input和inout型別的埠宣告為reg資料型別,因為reg型別的變數是用於儲存數...
繪製七段數碼管
seven digits draw v1.0 第一,繪製線 第二,繪製七段數碼管組成的數字 第三,繪製優化數碼管間距 第四,繪製多組數字 第五,獲取系統時間 第六,主函式執行程式。如下 import turtle as t import time def drawline draw drawgap ...
七段數碼管繪製
步驟1 繪製單個數字對應的數碼管 步驟2 獲得一串數字,繪製對應的數碼管 步驟2 獲得當前系統時間,繪製對應的數碼管 步驟1 繪製單個數字對應的數碼管 基本問題是繪製一條線,可將其定義為乙個基本函式 def drawline draw turtle.pendown if draw else turt...