利用按鍵開關控制液晶顯示器進行十六進制數字顯示說明書 - 圖文-_第1頁
利用按鍵開關控制液晶顯示器進行十六進制數字顯示說明書 - 圖文-_第2頁
利用按鍵開關控制液晶顯示器進行十六進制數字顯示說明書 - 圖文-_第3頁
利用按鍵開關控制液晶顯示器進行十六進制數字顯示說明書 - 圖文-_第4頁
利用按鍵開關控制液晶顯示器進行十六進制數字顯示說明書 - 圖文-_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中北大學課程設計說明書學生姓名:張又木學號: 0906044112學院: 電子與計算機科學技術學院專業(yè): 電子科學與技術題目: 利用按鍵開關控制液晶顯示器進行十六進制數字顯示指導教師:焦新泉職稱: 講師2012 年 6 月 20 日目錄1、課程設計目的 (22、課程設計內容和要求 (22.1、設計內容 (22.2、設計要求 (23、設計方案及實現(xiàn)情況 (23.1、設計思路 (23.2、工作原理及框圖 (23.3、各模塊功能描述 (43.4、仿真結果 (153.5、實驗箱驗證情況 (174、課程設計總結 (185、參考文獻 (181、課程設計目的1.學習操作數字電路設計實驗開發(fā)系統(tǒng),掌握液晶顯示

2、模塊的工作原理及應用。2.掌握組合邏輯電路、時序邏輯電路的設計方法。3.學習掌握可編程器件設計的全過程2、課程設計內容和要求2.1、設計內容1.學習掌握按鍵開關控制模塊、液晶顯示模塊的工作原理及應用;2. 熟練掌握VHDL編程語言,編寫按鍵開關控制模塊的控制邏輯;3. 仿真所編寫的程序,模擬驗證所編寫的模塊功能;4. 下載程序到芯片中,硬件驗證所設置的功能,能夠實現(xiàn)十六進制數字的顯示;5. 整理設計內容,編寫設計說明書。2.2、設計要求1.本課程設計說明書。2.VHDL源程序及內部原理圖。3.該設計可以在實驗箱上正常工作并演示。3、設計方案和實現(xiàn)情況3.1、設計思路對于這個題目,首先對試驗箱上

3、的時鐘頻率進行降頻,因為試驗箱上的時鐘頻率很高,而液晶系統(tǒng)并不需要很高的時鐘頻率,并且低頻時鐘更加有利于消抖功能的實現(xiàn),其次對所使用的按鍵進行消抖處理,然后將消抖處理后的按鍵信號直接送入按鍵計數模塊進行計數,再將按鍵計數模塊的計數結果送往譯碼顯示模塊,嚴格按照液晶OCMJ的顯示時序將要顯示的數據的行坐標,列坐標和數據對應的在BUSY信號不為高的情況下,通過數據線送出,然后在REQ信號線上送出一個高脈沖,將數據顯示在液晶OCMJ上。3.2、工作原理及框圖總體工作原理:在經過分頻的時鐘信號的驅動下,利用按鍵計數模塊對進行了消抖處理后的按鍵信號進行計數,然后將計數數據送給譯碼液晶顯示模塊,進而驅動液

4、晶屏幕進行數據的顯示。系統(tǒng)總體原理圖如圖1所示。 圖1 系統(tǒng)總體原理圖液晶顯示器工作原理: OCMJ中文模塊系列液晶顯示器內含 GB 2312 16*16點陣國標一級簡體漢字和 ASCII8*8(半高及8*16(全高點陣英文字庫,用戶輸入區(qū)位碼或 ASCII 碼即可實現(xiàn)文本顯示。OCMJ中文模塊系列液晶顯示器可以實現(xiàn)漢字、ASCII 碼、點陣圖形和變化曲線的同屏顯示,并可通過字節(jié)點陣圖形方式造字。由于顯示的是十六進制數字,故只須掌握接口協(xié)議和其中一條用戶命令。接口協(xié)議為請求/應答(REQ/BUSY握手方式。應答B(yǎng)USY 高電平(BUSY =1表示 OCMJ 忙于內部處理,不能接收用戶命令;BU

5、SY 低電平(BUSY =0表示 OCMJ 空閑,等待接收用戶命令。發(fā)送命令到 OCMJ可在BUSY =0 后的任意時刻開始,先把用戶命令的當前字節(jié)放到數據線上,接著發(fā)高電平REQ 信號(REQ =1通知OCMJ請求處理當前數據線上的命令或數據。OCMJ模塊在收到外部的REQ高電平信號后立即讀取數據線上的命令或數據,同時將應答線BUSY變?yōu)楦唠娖?表明模塊已收到數據并正在忙于對此數據的內部處理,此時,用戶對模塊的寫操作已經完成,用戶可以撤消數據線上的信號并可作模塊顯示以外的其他工作,也可不斷地查詢應答線BUSY是否為低(BUSY =0?,如果BUSY =0,表明模塊對用戶的寫操作已經執(zhí)行完畢。

6、可以再送下一個數據。液晶顯示器顯示8X8ASCII字符命令:格式:F1 XX YY AS該命令為4字節(jié)命令(最大執(zhí)行時間為0.8毫秒,Ts2=0.8mS,其中XX:為以ASCII碼為單位的屏幕行坐標值,取值范圍00到0F、04到13、00到13;YY:為以ASCII碼為單位的屏幕列坐標值,取值范圍00到1F、00到3F、00到4F;AS:坐標位置上要顯示的ASCII 字符碼。OCMJ液晶控制時序圖如圖2所示:3.3、各模塊功能描述說明書要求:圖2 OCMJ液晶控制時序圖3.3、各模塊功能描述總原理圖如圖3所示: 圖3 總原理圖模塊一:分頻模塊 圖4 分頻模塊符號利用VHDL語言生成的分頻符號如

7、圖4所示,clk和rst分別是輸入的時鐘信號引腳和復位引腳,clkout是分頻后的時鐘輸出引腳。本模塊使用13位計數常量分頻,可以將試驗箱上1.25MHZ的時鐘頻率降到150HZ左右,這足以驅動液晶工作。代碼如下:library ieee;entity fenpin isport( clk,rst:in std_logic;clkout:out std_logic;end fenpin;architecture fenpin_behave of fenpin issignal inclk : std_logic_vector(12 downto 0;signal inner : std_log

8、ic;beginprocess(clk,rstbeginif rst = '0' theninclk <= "0000000000000"inner <= '0'inner <= not inner; -當inclk加滿的時候,inner取反inclk <= inclk + 1;elseinclk <= inclk + 1;end if;end if;end process;clkout <= inner;end fenpin_behave;模塊二:消抖模塊 圖5 消抖模塊符號利用VHDL語言生成的按鍵消抖

9、模塊符號如圖5所示,clk和rst分別是時鐘信號引腳和復位引腳,din是按鍵的輸入信號,直接連接在試驗箱的按鍵上,dout是經過消抖處理后的輸出引腳。本模塊采用狀態(tài)機實現(xiàn),共八個狀態(tài),當din信號為低的時候,狀態(tài)機才會向下傳遞狀態(tài),否則重新回到狀態(tài)0,也就是說當有按鍵按下的時候,需要低電平信號持續(xù)八個時鐘周期,才能算是一個信號輸入。由于本系統(tǒng)的時鐘頻率是150HZ,經過計算,每次按鍵必須持續(xù)大約50ms才算有效,如果din信號持續(xù)為低電平,那么輸出端每隔約50ms,輸出一個低脈沖。代碼如下:library ieee;entity key_xd isport( clk,rst,din :in s

10、td_logic;dout :out std_logic;end entity;architecture rtl of key_xd istype xd_state is (s0,s1,s2,s3,s4,s5,s6,s7;signal pre_s,next_s:xd_state;beginpcs0:process(rst,clkbeginif rst = '0' thenpre_s <= s0;elsif clk'event and clk = '1' then -每次時鐘來臨,把next_s給pre_s pre_s <= next_s;el

11、senull;end if;end process pcs0;pcs1:process(pre_s,next_s,dinbegincase pre_s iswhen s0 =>dout <= '1' -dout置高,確保到不為低電平if din = '1' thennext_s <= s0; -如果din=1,那么返回起始狀態(tài)elsenext_s <= s1; -如果din=0,那么進入下一個狀態(tài)end if;when s1 => -狀態(tài)s1到s6同上dout <= '1'if din = '1'

12、; thennext_s <= s0;elsenext_s <= s2;end if;when s2 =>dout <= '1'if din = '1' thennext_s <= s0;elsenext_s <= s3;end if;when s3 =>dout <= '1'if din = '1' thennext_s <= s0;elsenext_s <= s4;end if;when s4 =>dout <= '1'if din = &

13、#39;1' thennext_s <= s0;elsenext_s <= s5;end if;when s5 =>dout <= '1'if din = '1' thennext_s <= s0;elsenext_s <= s6;end if;when s6 =>dout <= '1'if din = '1' thennext_s <= s0;elsenext_s <= s7;end if;when s7 =>dout <= '0'i

14、f din = '1' then -若din=1,回到起始狀態(tài)next_s <= s0;Else -若din=0,回到s1狀態(tài),進入循環(huán)next_s <= s1;end if;end case;end process pcs1;end rtl;模塊三:計數模塊 圖6 計數模塊符號利用VHDL語言生成的計數模塊符號如圖6所示,key和rst分別是按鍵輸入引腳和復位引腳,dout是計數結果輸出引腳。本模塊采用基本的計數原理,即每當key來一個上升沿,做為緩沖的內部四位二進制信號inclk自增一,最后將inclk給到dout。代碼如下: library ieee;enti

15、ty cnt isport( key,rst :in std_logic;dout :out std_logic_vector(3 downto 0;end cnt;architecture cnt_behave of cnt issignal inclk: std_logic_vector(3 downto 0;beginprocess(key,rstbeginif rst = '0' theninclk <= "0000"elsif key'event and key='0' then -每次來一個下降沿,inclk加一in

16、clk <= inclk + 1;end if;end process;dout <= inclk;end cnt_behave;模塊四:譯碼及顯示模塊 圖7 譯碼及顯示模塊符號利用VHDL語言生成的譯碼及顯示模塊符號如圖7所示,clk和rst分別是時鐘輸入引腳和復位引腳,busy是來自液晶的握手信號,din是需要顯示的十六進制數據,req是向液晶發(fā)出的握手信號,dout是向液晶發(fā)出要顯示的數據的信息的引腳。本模塊采用狀態(tài)機來實現(xiàn),嚴格按照液晶的時序圖經過判斷busy信號不為高的情況下向液晶依次輸出ASCII碼命令字,行坐標,列坐標以及經過譯碼得到的ASCII碼,然后再從req 輸

17、出一個高脈沖。從而驅動液晶屏幕工作。代碼如下:library ieee;entity disply is -實體說明port( clk,busy,rst:in std_logic;din:in std_logic_vector(3 downto 0;req:out std_logic;dout:out std_logic_vector(7 downto 0;end disply;architecture disply_arch of disply istype ztstate is(st0,st1,st2,st3,st4,st5,st6,st7,st8,st9,st10,st11,st12,s

18、t13,st14;signal state: ztstate;Begin -結構體說明process(rst,clkbeginif rst='0' then -復位信號req <= '0'state <= st0;dout <= "ZZZZZZZZ"elsif clk'event and clk = '1' thencase state iswhen st0=>dout <= "11110100" -清屏命令字req<='0'state<=s

19、t1;when st1=> -req輸出一個高脈沖req<= '1'state<=st2;when st2=>req<= '0'state<=st3;when st3=>if busy = '0' thendout <= "11110001" -寫ASCII命令字req<='0'state<=st4;elsestate<=st3;end if;when st4=>req<= '1'state<=st5;when

20、st5=>req<= '0'state<=st6;when st6=> -寫列坐標if busy='1' thenstate<=st6;elsedout <= "00001111"req<='0'state<=st7;end if;when st7=>req<='1'state<=st8;when st8=>req<= '0'state<=st9;when st9=> -寫行坐標if busy='1

21、' thenstate<=st9;elsedout <= "00000001"req<='0'state<=st10;end if;when st10=>req<='1'state<=st11;when st11=>req<= '0'state<=st12;when st12=>if busy='1' thenstate<=st12;elsecase din is -根據輸入寫ASCII碼when "0000"

22、=>dout <= "00110000"when "0001" =>dout <= "00110001"when "0010" =>dout <= "00110010"when "0011" =>dout <= "00110011"when "0100" =>dout <= "00110100"when "0101" =>dout

23、<= "00110101"when "0110" =>dout <= "00110110"when "0111" =>dout <= "00110111"when "1000" =>dout <= "00111000"when "1001" =>dout <= "00111001"when "1010" =>dout <= &quo

24、t;01000001"when "1011" =>dout <= "01000010"when "1100" =>dout <= "01000011"when "1101" =>dout <= "01000100"when "1110" =>dout <= "01000101"when "1111" =>dout <= "01000110

25、"when others =>dout <= "00000000"end case;req<='0'state<=st13;end if;when st13=>req<='1'state<=st14;when st14=>req<= '0'state<=st3; when others=> state<=st0; end case; end if; end process; end disply_arch; 3.4、仿真結果 1.分頻器仿真如圖 8 所示: 圖 8 分頻器功能仿真波形圖 2.消抖模塊仿真如圖 9 所示: 圖 9 消抖模塊功能仿真波形圖 說明:通過仿真可以看出,當按鍵時間適當的時候,dout 端出現(xiàn)了一個低脈沖,而當按 鍵時間過短的時候,此時 din 輸入的低脈沖被當作毛刺,而持續(xù)按鍵的時候,dout 會出現(xiàn)連 續(xù)規(guī)律的低脈沖。這種消抖方式比

溫馨提示

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

評論

0/150

提交評論