【文章內(nèi)容簡介】
點陣LED一般采用掃描式顯示,實際運用分為三種方式: (1)點掃描(2)行掃描(3)列掃描若使用第一種方式,其掃描頻率必須大于1664=1024Hz,周期小于1ms即可。若使用第二和第三種方式,則頻率必須大于168=128Hz。此外一次驅(qū)動一列或一行(8顆LED)時需外加驅(qū)動電路提高電流,否則LED亮度會不足方案一:本文系統(tǒng)的LED點陣模塊,共由1616=256個LED發(fā)光二極管組成。如何在該點陣模塊上顯示漢字是本文設(shè)計的關(guān)鍵技術(shù)。本文系統(tǒng)設(shè)計是采用一種16路動態(tài)分時掃描技術(shù)來實現(xiàn)的。具體方法是,將4個88數(shù)組的顯示模塊組合成兩個16行16列的掃描結(jié)構(gòu)。其行輸入端與FPGA內(nèi)的只讀存儲器ROM的16位數(shù)據(jù)輸出端口相連;16個列控制端與一個416譯碼器的輸出相連;而譯碼器的輸入端和片選信號又與FPGA內(nèi)的列掃描控制模塊的輸出端口相連。方案二:Verilog HDL程序設(shè)計的是硬件,可以“并發(fā)執(zhí)行”。本設(shè)計可以將LED顯示屏要的顯示內(nèi)容抽象成一個二維數(shù)組(數(shù)組中的‘1’對映點陣顯示屏上面的亮點),用Verilog HDL語言設(shè)計一個進(jìn)程將這個數(shù)組動態(tài)顯示在LED顯示屏上,再利用另一個進(jìn)程對這個數(shù)組按一定頻率進(jìn)行數(shù)據(jù)更新,更新的方式可以有多種。因為兩個進(jìn)程是同時進(jìn)行的(并發(fā)執(zhí)行),如果對數(shù)組中的漢字?jǐn)?shù)據(jù)按滾動的方式更新,則可實現(xiàn)漢字的滾動顯示通過比較我們選擇方案二。雖然方案一很容易實現(xiàn),而且占用FPGA的資源較少,但是由于其實現(xiàn)方式的局限性,該方案只能實現(xiàn)漢字的滾動顯示。方案二中將LED點陣抽象成了一個二維數(shù)組??梢栽O(shè)計一些比較復(fù)雜的算法來控制這個數(shù)組,使設(shè)計的系統(tǒng)不但可以滾動顯示漢字,還可以擴展一些其它的顯示效果。六、程序設(shè)計設(shè)計程序如下:LIBRARY IEEE。 USE 。 USE 。USE 。ENTITY LED1616 ISPORT(clk48M: IN STD_LOGIC。系統(tǒng)時鐘sdat_in: IN STD_LOGIC_VECTOR(31 downto 0)。STR: OUT STD_LOGIC。SCLK: OUT STD_LOGIC。d_out: OUT STD_LOGIC)。END。ARCHITECTURE one OF LED1616 ISSIGNAL clk_count: integer range 0 to 400。SIGNAL t32: STD_LOGIC_VECTOR(5 downto 0)。SIGNAL clk60K,STR_R,SCLK_R,d_out_R: STD_LOGIC。SIGNAL data_shift: STD_LOGIC_VECTOR(31 downto 0)。TYPE states IS(st0,st1,st2,st3)。SIGNAL c_state,n_state:states。BEGIN STR =STR_R。 SCLK =SCLK_R。 d_out =d_out_R。 d_out_R =data_shift(31)。PROCESS (clk48M)BEGIN IF RISING_EDGE(clk48M) THEN IF clk_count =400 THEN clk_count=0。 clk60K=not clk60K。 ELSE clk_count=clk_count+1。 END IF。 END IF。END PROCESS。PROCESS (clk60K)BEGIN IF RISING_EDGE(clk60K) THEN c_state=n_state。 主控時序進(jìn)程 END IF。END PROCESS。PROCESS (c_state)BEGIN CASE c_state IS WHEN st0= n_state=s