16×16點陣顯示設計_第1頁
16×16點陣顯示設計_第2頁
16×16點陣顯示設計_第3頁
16×16點陣顯示設計_第4頁
16×16點陣顯示設計_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課 程 設 計課程名稱嵌入式系統課程設計課題名稱 16X16的點陣顯示設計專 業班 級學 號姓 名指導老師2016年12月20日電氣信息學院課程設計任務書課題名稱16×16的點陣顯示設計姓 名專業班級 學號指導老師課程設計時間2016年12月18日-2016年12月30日(17、18周)教研室意見意見:同意 審核人:劉望軍一、任務及要求CPLD為復雜可編程邏輯器件,通過EDA技術對其進行編程,可將一個較復雜的數字系統集成于一個芯片中,制成專用集成電路芯片,并可隨時在系統修改其邏輯功能。并最終完成電路的編程調試。具體要求如下:用一個16×16的點陣使用逐列循環掃描的方式不間斷

2、的顯示你姓名的全部大寫拼音字母。二、進度安排第一周:周一:集中布置課程設計相關事宜。周二周三:子模塊程序設計,頂層電路程序設計。周四周日:子模塊,頂層電路仿真。第二周:周一周三:編程下載,系統調試。周四周五:設計報告撰寫。周五進行答辯和設計結果檢查。三、參考資料1. 張 原編著,可編程邏輯器件設計及應用,機械工業出版社。2.荀殿棟,徐志軍編著,數字電路設計實用手冊,電子工業出版社。3. 劉洪喜,陸穎編著. VHDL電路設計實用教程 清華大學出版社。 目 錄1.總體設計思路與功能設計11.1.基本原理11.2.總體設計框圖21.3.頂層文件設計22.單元電路設計32.1列循環掃描模塊32.2字符

3、樣式設計模塊32.3循環掃描及延時模塊42.4整個程序53.系統調試與仿真93.1 開發環境介紹93.2.1 創建工程93.2.2 編譯前設計93.2.3 全程編譯113.2.4時序仿真124.下載調試135.心得體會146.參考文獻141、 總體設計思路 1.1基本原理 LED 就是Light Emitting Diode(發光二極管)的縮寫。在某些半導體材料的PN結中,注入的少數載流子與多數載流子復合時會把多余的能量以光的形式釋放出來,從而把電能直接轉換為光能。PN結加反向電壓,少數載流子難以注入,故不發光。這種利用注入式電致發光原理制作的二極管叫發光二極管,

4、通稱LED。LED顯示屏是一種通過控制半導體發光二極管的顯示方式,用來顯示文字、圖形、圖像、動畫、行情、視頻、錄像信號等各種信息的顯示屏幕。 16×16掃描LED點陣的工作原理同8位掃描數碼管類似。它有16個共陰極輸出端口,每個共陰極對應有16個LED顯示燈,所以其掃描譯碼地址需4位信號線(SEL0-SEL3),其漢字掃描碼由16位段地址(0-15)輸入。 通過時鐘的每列掃描顯示完整漢字。點陣LED一般采用掃描式顯示,實際運用分為三種方式: (1)點掃描(2)行掃描(3)列掃描若使用第一種方式,其掃描頻率必須大于16×64=1024Hz,周期小于1ms即可。若使用

5、第二和第三種方式,則頻率必須大于16×8=128Hz,周期小于7.8ms即可符合視覺暫留要求。此外一次驅動一列或一行(8顆LED)時需外加驅動電路提高電流,否則LED亮度會不足。實驗箱上為我們提供了16*16的點陣顯示模塊。通過觀察,我們可以看到,此點陣顯示屏即為16行、16列的LED顯示燈。那么控制這些燈的亮暗分布,就能達到字符顯示的目的。首先輸出預定義“呂、蘇、田、口”四個漢字,顯示屏上的燈的亮暗情況具體應如何。如第一個漢字呂:00000000000000000000000000000000000000000111110000111111010001000010000101000

6、10000100001010001000010000101000100001000010100010000100001010001000010000101000100001111110100010000000000010001000000000001111100000000000000000000000000000000000000000000000000如果高電平1時表示燈是亮的,低電平0時燈是暗的,這樣上面的燈呈現在我們眼前的就是呂字了。依次類推,我們就可以設計出所有要顯示的漢字了。這樣這些漢字就好象是被我們當作了固定模型了。但如何點亮這些燈呢,這就要求有一個脈沖循環掃描的電路,我們采用列

7、掃描,當掃描的和我們先設計好的漢字模型的高電平相匹配時,燈就相應的點亮。由于掃描的速度很快,我們人的眼睛并不會感到燈的閃爍,所以每掃描完16列就會顯示在我們眼中一個漢字了。但要所有的漢字就可以依次的顯示出來并不停的循環顯示,就還要再有一個時序控制電路來控制。此時序控制電路象一個計數器,有自動清零的功能,這樣就可以實現循環的效果了。1.2設計框圖時序控制掃描控制顯示控制譯碼輸出 圖1.2 總體設計框圖1.3頂層文件設計 圖1.3 頂層文件設計二、單元電路設計 2.1列循環掃描 通過對每一列的掃描來完成對字母的現實,只要掃描的頻率足夠快,就能給人以連續的感覺。因此要控制掃描的頻率,不能太

8、低,否則,就會造成視覺上的不連續, 輸入一個時鐘信號,輸出為4位二進制(用sel表示)列選信號,用來選中列,進行掃描,掃描程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs is Port(enable,clk:in std_logic; -端口定義 輸入信號 Sel:out std_logic_vector(3 downto 0); -端口定義 輸出信號End dz_xs;Architecture count of dz_xs is Signal lie:std_

9、logic_vector(3 downto 0);BeginProcess(clk,enable) -脈沖、使能信號beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" then Lie<=lie-"0001"Else Lie<="1111"End if;End if;End if;Sel<=lie;End process;2.2字符樣式設計 本環節是建立一個數據庫,使之能在掃描的同時讀

10、取所需要的信息,從而完成漢字的顯示。本次設計“呂、蘇、田、口”漢字樣式設計程序如下: Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs is Port(enable,clk:in std_logic; -端口定義 輸入信號 h0,h8:out std_logic_vector(7 downto 0); -端口定義 輸出信號(h0-列數據輸出,h8-代表行數據輸出)End dz_xs;Architecture count of dz_xs is Signal lie:std_

11、logic_vector(3 downto 0); -信號標志Signal past1:std_logic_vector(1 downto 0);BeginProcess(enable,clk) -脈沖、使能信號BeginIf clk'event and clk='1'thenIf enable='1' thenCase lie isWhen "00"=>Case lie is -“呂”字設計When "0011"=>h0<="00000000"h8<="011

12、11110"When "0100"=>h0<="01111110"h8<="01000010"When "0101"=>h0<="01000010"h8<="01000010"When "0110"=>h0<="01000010"h8<="01000010"When "0111"=>h0<="01000010&q

13、uot;h8<="01000010"When "1000"=>h0<="01000010"h8<="01000010"When "1001"=>h0<="01000010"h8<="01000010"When "1010"=>h0<="01000010"h8<="01000010"When "1011"=>h0&

14、lt;="01000010"h8<="01000010"When "1100"=>h0<="01111110"h8<="01000010"When "1101"=>h0<="00000000"h8<="01111110"When others=>h0<="00000000"h8<="00000000"End case;When "

15、;01"=>Case lie is -“蘇”字設計When "0011"=>h0<="00100000"h8<="00000000"When "0100"=>h0<="00100000"h8<="00000000"When "0101"=>h0<="00100000"h8<="10001100"When "0110"=>h

16、0<="01110000"h8<="10000000"When "0111"=>h0<="00101000"h8<="10000000"When "1000"=>h0<="00100011"h8<="11111100"When "1001"=>h0<="00100000"h8<="10000000"When &q

17、uot;1010"=>h0<="00101000"h8<="10001100"When "1011"=>h0<="01110000"h8<="10000110"When "1100"=>h0<="00100000"h8<="11111110"When "1101"=>h0<="00100000"h8<="0

18、0001100"When others=>h0<="00000000"h8<="00000000"End case;When "10"=>Case lie is -“田”字設計 When"0100"=>h0<="00011111"h8<="11110000"When"0101"=>h0<="00010001"h8<="00010000"When&q

19、uot;0110"=>h0<="00010001"h8<="00010000"When"0111"=>h0<="00010001"h8<="00010000"When"1000"=>h0<="00011111"h8<="11110000"When"1001"=>h0<="00010001"h8<="0001

20、0000"When"1010"=>h0<="00010001"h8<="00010000"When"1011"=>h0<="00010001"h8<="00010000"When"1100"=>h0<="00011111"h8<="11110000"When others=>h0<="00000000"h8<=&qu

21、ot;00000000"End case;When "11"=>Case lie is -“口”字設計When"0101"=>h0<="00011111"h8<="11100000"When"0110"=>h0<="00010000"h8<="00100000"When"0111"=>h0<="00010000"h8<="00100000

22、"When"1000"=>h0<="00010000"h8<="00100000"When"1001"=>h0<="00010000"h8<="00100000"When"1010"=>h0<="00010000"h8<="00100000"When"1011"=>h0<="00011111"h8<

23、;="11100000"When others=>h0<="00000000"h8<="00000000" End case; End if; End if;End process;2.3循環掃描及期間的延時環節 為使漢字不斷地循環顯示,并且使每個漢字之間有停頓,就需要在中間加一定的延時和循環環節。在這一環節中,可以通過修改其數值來控制每個字母的顯示時間,其程序如下:process(clk) variable int: integer range 0 to 10000;begin if clkevent and cl

24、k=1then if int<10000 then int:=int+1; elseint:=0; if next1=”11”thennext1<=”00”; elsenext1<= next1+1; end if; end if;end if;end process;2.4總程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yz_ok is port(enable,clk:in std_logic; sel:out std_logic_vector(3 down

25、to 0);h0,h8:out std_logic_vector(7 downto 0);end yz_ok;architecture count of yz_ok is signal lie:std_logic_vector(3 downto 0); signal next1: std_logic_vector(1 downto 0);begina1:process(clk,enable)beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" then

26、Lie<=lie-"0001"Else Lie<="1111"End if; End if;End if;Sel<=lie;End process;a2:process(enable,clk)beginIf clk'event and clk='1'thenIf enable='1' thenCase next1 isWhen "00"=>Case lie is When "0011"=>h0<="00000000"h8

27、<="01111110"When "0100"=>h0<="01111110"h8<="01000010"When "0101"=>h0<="01000010"h8<="01000010"When "0110"=>h0<="01000010"h8<="01000010"When "0111"=>h0<=&q

28、uot;01000010"h8<="01000010"When "1000"=>h0<="01000010"h8<="01000010"When "1001"=>h0<="01000010"h8<="01000010"When "1010"=>h0<="01000010"h8<="01000010"When "1011

29、"=>h0<="01000010"h8<="01000010"When "1100"=>h0<="01111110"h8<="01000010"When "1101"=>h0<="00000000"h8<="01111110"When others=>h0<="00000000"h8<="00000000"End c

30、ase;When "01"=>Case lie is When "0011"=>h0<="00100000"h8<="00000000"When "0100"=>h0<="00100000"h8<="00000000"When "0101"=>h0<="00100000"h8<="10001100"When "0110"

31、;=>h0<="01110000"h8<="10000000"When "0111"=>h0<="00101000"h8<="10000000"When "1000"=>h0<="00100011"h8<="11111100"When "1001"=>h0<="00100000"h8<="10000000"

32、When "1010"=>h0<="00101000"h8<="10001100"When "1011"=>h0<="01110000"h8<="10000110"When "1100"=>h0<="00100000"h8<="11111110"When "1101"=>h0<="00100000"h8<=

33、"00001100"When others=>h0<="00000000"h8<="00000000"End case;When "10"=>Case lie is When"0100"=>h0<="00011111"h8<="11110000"When"0101"=>h0<="00010001"h8<="00010000"When&qu

34、ot;0110"=>h0<="00010001"h8<="00010000"When"0111"=>h0<="00010001"h8<="00010000"When"1000"=>h0<="00011111"h8<="11110000"When"1001"=>h0<="00010001"h8<="00010

35、000"When"1010"=>h0<="00010001"h8<="00010000"When"1011"=>h0<="00010001"h8<="00010000"When"1100"=>h0<="00011111"h8<="11110000"When others=>h0<="00000000"h8<=&quo

36、t;00000000" End case;When "11"=>Case lie is When"0101"=>h0<="00011111"h8<="11100000"When"0110"=>h0<="00010000"h8<="00100000"When"0111"=>h0<="00010000"h8<="00100000"W

37、hen"1000"=>h0<="00010000"h8<="00100000"When"1001"=>h0<="00010000"h8<="00100000"When"1010"=>h0<="00010000"h8<="00100000"When"1011"=>h0<="00011111"h8<="

38、;11100000"When others=>h0<="00000000"h8<="00000000" End case;When others=>h0<="00000000"h8<="00000000" End case; End if; End if;End process;a3:process(clk) variable int: integer range 0 to 10000;begin if clk'event and clk='1'

39、then if int<10000 then int:=int+1; elseint:=0; if next1="11"thennext1<="00" elsenext1<= next1+'1' end if; end if;end if;end process;end count;第三章 系統調試與仿真3.1開發環境介紹Quartus II 是Altera公司的綜合性PLD開發軟件,支持原理圖、VHDL、Veril-ogHDL以及AHDL(Altera Hardware Description Language)等多種

40、設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可編程系統(SOPC)開發,集系統級設計、嵌入式軟件開發、可編程邏輯設計于一體,是一種綜合性的開發平

41、臺。3.2調試與仿真3.2.1 創建工程在Quartus II 中新建一個VHDL File文件,將VHDL代碼輸入這個文件,并保存到工作目錄,名為yz_ok.vhd。利用new preject wizard 工具創建一個工程,工程名為yz_ok,頂層文件實體名為 yz_ok,并將上面創建的yz_ok.vhd文件加入到工程中。3.2.2 編譯前設置(1)選擇目標芯片。用assignmemts-àsettings命令,彈出settings對話框,選擇目標芯片為EP1C3T144C8。圖3-1 選擇目標器件(2)選擇工作方式,編程方式,及閑置引腳狀態單擊上圖中的device&a

42、mp;pin options按鈕,彈出device&pin options窗口。 在General項中選中auto-restart configuration after error,使對FPGA的配置失敗后能自動重新配置,并加入JTAG用戶編碼。 圖3-2 選擇配置器件工作方式在configuration項中,其下方的Generate compressed bitstreams處打勾,這樣就能產生用于EPCS的POF壓縮配置文件。在Configuration 選項頁,選擇配置器件為EPCS1,其配置模式選擇為active serial。圖3-3選擇編程方式在Unused pins項,

43、將目標器件閑置引腳狀態設置高阻態,即選擇As input,tri-stated。圖3-4 設置閑置引腳狀態3.2.3 全程編譯設置好前面的內容之后,就可以進行編譯了。選擇Processing菜單中start compilation,在窗口的下方processing欄中顯示編譯信息。圖3-5 全程編譯成功完成完成后在工程管理窗口左是角顯示了工程yz_ok 的層次結構和其中結構模塊耗用的邏輯宏單元數。此欄的右邊是編譯處理流程,包括數據網表建立、邏輯綜合、適配、配置文件裝配和時序分析等。3.2.4時序仿真(1)新建一個矢量波形文件,同時打開波形編輯器。設置仿真時間為50us,保存波形文件為yz_ok.vwf。(2)將工程yz_ok的端口信號名選入波形編輯器中,所選的端口有clk,enable及總線h0和h8。設置clk的時鐘周期為2us,占空比為50%。圖3-6 選擇仿真控制仿真器參數設置。選擇菜單Assignment中的Settings,在Settings窗口下選擇Simulator,在右側的simulation mode項下選擇timing,即選擇時序仿真,并選擇仿真激勵文件名yz_ok.vwf。選擇simulation options欄,確認選定simulation coverag

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論