BCD 七段數碼管顯示解碼器

2021-07-05 23:00:16 字數 3441 閱讀 4888

目的

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...