基于FPGA的鍵盤掃描程序的設計_第1頁
基于FPGA的鍵盤掃描程序的設計_第2頁
基于FPGA的鍵盤掃描程序的設計_第3頁
基于FPGA的鍵盤掃描程序的設計_第4頁
基于FPGA的鍵盤掃描程序的設計_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、X X學院 CHANGSHA UNIVERSITY本科生畢業設計設計(論文)題目: 基于FPGA的鍵盤掃描程序的設計 系部: 專 業: 學 生 姓 名: 班 級: 學號 指導教師姓名: 職稱 講師 XX學院教務處 二一一年二月制(20 13 屆)本科生畢業設計說明書基于FPGA的鍵盤掃描程序的設計系部: 電子與通信工程系 專 業: 學 生 姓 名: 班 級: 學號 指導教師姓名: 職稱 最終評定成績 2013 年 6 月XX學院畢業設計摘 要在現代電子工業的控制電路中,鍵盤掃描和顯示電路對系統的調試和設置有著重要的作用。隨著EDA技術的發展,基于FPGA的掃描鍵盤因其結構簡單,能有效防止機械鍵

2、盤按鍵抖動帶來的數據錯誤等優點在許多電子設備中都得到了廣泛的應用。本文主要是設計一個基于FPGA的鍵盤掃描程序,該設計在EDA工具Quarutus II9.0上開發完成,以Creat-SOPC2000實驗箱上的4*4矩陣鍵盤為硬件實體,設計鍵盤掃描程序,將程序劃分為時序產生模塊、鍵盤掃描模塊、彈跳消除模塊、鍵值譯碼模塊四個模塊,時序產生模塊為鍵盤掃描和彈跳消除模塊產生時鐘信號,鍵盤掃描模塊采用行掃描法對4*4矩陣鍵盤進行掃描,鍵值譯碼模塊將所按鍵值譯碼為共陽極8位7段數碼管的顯示碼,幾個模塊組合起來實現鍵盤掃描的設計要求。最后對程序進行仿真分析和硬件驗證。仿真結果表明,該系統具有集成度高、穩定

3、性好、設計靈活和設計效率高等優點。關鍵詞: FPGA,Quartus II,VHDL,鍵盤掃描IABSTRACTIn the modern electronics industry controlling-circuit, the keyboard scanning and display circuit plays an important role in debugging and setting the system. With the development of EDA technology, FPGA-based scanning keyboard have been widely

4、 used in many electronic devices because of its simple structure, and it also can effectively prevent mechanical keyboard jitter caused by data errors. This article primarily designed an FPGA-based keyboard scan procedures, this design is developed on the EDA tools Quarutus II9.0 and designed the ke

5、yboard scan program, using the Creat-SOPC2000 experimental box 4 * 4 matrix keyboard as the hardware entity .the program is divided into four modules as the timing generation module, a keyboard scanning module, bounce cancellation module and the decoding module. The timing generation module generate

6、s the clock signal for the keyboard scanning and bounce elimination module, the keyboard scanning module using the line scanning method to sweep the 4* 4 matrix keyboard, key decoder module decodes the key value for the common anode eight 7-segment display code. Several modules assembles together to

7、 meet the keyboard scanning design requirements. Finally, conducting simulation analysis by the program and verifying the hardware.Simulation results show that the system has many advantages such as high integration, good stability, high efficiency, flexible design and high design efficiency. Keywor

8、ds: FPGA,Quartus II,VHDL,keyboard scanning目 錄摘 要IABSTRACTII第1章 緒論11.1 課題的研究背景11.2 課題的研究意義21.3 本文的主要工作2第2章 FPGA開發工具簡介32.1 FPGA概述32.2 VHDL語言以及Quartus II應用32.3 本章小結4第3章 基于FPGA的鍵盤掃描程序的設計33.1 鍵盤掃描程序的總體電路設計53.1.1 矩陣式鍵盤掃描的工作原理63.1.2 數碼管的顯示原理73.2 鍵盤掃描電路各主要功能模塊的設計83.2.1 時序產生模塊83.2.2 鍵盤掃描模塊93.2.3 彈跳消除模塊113.2.

9、4 鍵盤譯碼電路133.2.5 鍵盤掃描程序的頂層文件設計153.3本章小結16第4章 鍵盤掃描程序的波形仿真及硬件驗證174.1 系統仿真174.1.1 消抖電路仿真174.1.2 鍵盤時鐘信號仿真184.1.3 鍵盤掃描信號仿真184.1.4 鍵盤譯碼電路仿真194.1.5 鍵盤掃描總體電路仿真214.2引腳的鎖定224.3硬件驗證234.4本章小結25結 論26參考文獻27附 錄 28致 謝32IV第1章 緒論 1.1 課題的研究背景在現代計算機與電子系統中,一般都采用通用式的標準鍵盤將所需的數據和指令等信息通過鍵盤輸入到計算機和電子系統,以此來實現人機之間的接口交互。但是,在各種嵌入式

10、系統(如微波爐、手機、電風扇等)中的鍵盤按鍵個數有限,一般為幾個到十幾個左右,而標準鍵盤則一般在一百多個左右,并且每個按鍵都有其各自的功能含義。所以針對每一種電子設備對其鍵盤進行掃描程序的設計時,必須結合工程的實際情況以及設備自身的各種資源,使所設計的鍵盤能夠很好地融合到系統中,成為其重要的組成部分。在數字電路中,如果將每個按鍵的輸出信號連接到編碼器對應的輸入端,通過編碼邏輯在編碼器的輸出端得到每個按鍵對應的鍵值,利用編碼器實現按鍵鍵值的直接編碼,這種鍵盤在早期稱為編碼鍵盤。但是,這類鍵盤有許多缺點如按鍵數量較多時編碼邏輯的成本就會相對變高直接編碼的方法也具有很大的局限性,編碼邏輯一旦固定就難

11、以改變。現代數字電路中,一般當按鍵數量較多時,我們采用掃描的方式來產生鍵值。用矩陣的形式連接按鍵,使每個按鍵位于行、列的相交點上,通過輸入掃描信號確定所按按鍵的行值和列值,即位置碼也稱掃描碼,再通過查表或譯碼的方式將位置碼轉換為按鍵碼值,采用這類方式掃描的,我們習慣稱其為“非編碼鍵盤”。在執行鍵盤掃描的過程中,因大多數鍵盤采用的都是機械開關,所以按鍵在閉合時往往會出現一些難以避免的機械性抖動,輸出信號隨之也發生跳變,其跳變寬度一般在10 ms一20 ms之間。若不對其進行處理,則系統很有可能會將其誤認為多次按鍵。因此在系統中須設置硬件延時電路,按鍵輸入在經過一定時間的延遲后方可讀取鍵值,即鍵盤

12、系統中常出現的去抖電路。還有一種情況是當前面按鍵鍵值還沒輸出但已近有新的按鍵按下時,后按的鍵值就會覆蓋前面的鍵值,造成數據的丟失。這時可以在系統中設置一個控制信號,確保前一按鍵的鍵值輸出后才允許后一鍵值的產生,又或設置一組寄存器來保存按鍵的鍵值,然后系統依序對其進行處理。這類掃描鍵盤的優點在于不需要主機擔負掃描任務,而是由軟件程序完成,其次也可通過更改程序來改變按鍵的功能定義。基于FPGA的鍵盤掃描程序,由芯片中的鍵盤掃描程序對鍵盤進行掃描,按鍵時,系統通過時鐘模塊啟動掃描程序,依次對每行鍵值賦值來掃描每行,再通過鍵盤每列的輸出來確定按鍵位置,這種掃描方法被稱為逐行掃描法,當有鍵按下時首先獲得

13、此鍵的列值,然后逐行掃描就可以判斷按鍵所在的行值,由行、列的值可以得出按鍵的鍵值。此外,還需在鍵盤掃描程序的中加入延時程序,以消除機械鍵盤按鍵抖動所帶來的影響。如果鍵盤的掃描頻率設置過低,則在掃描顯示的過程中,會出現按鍵顯示遲緩,甚至亂碼等現象。因此在實際的設計中,需根據設計要求及系統的硬件規格選擇合適的掃描平率。現代數字設備中的鍵盤大多采用這樣的鍵盤掃描方法。1.2 課題的研究意義從計算機時代開始以來,數字系統設計就存在兩個大的分類,即系統硬件設計和系統軟件設計。早期的數字系統設計人員也因此被分為兩個族群:硬件設計人員和軟件設計人員,他們都只從事自己的工作領域,很少涉足對方的領域,尤其是軟件

14、設計人員。但是,隨著數字技術和硬件系統的發展,這兩個領域開始互相有所合作。在硬件描述語言HDL(Hardware Description Language)出現后,數字系統的設計已無軟硬件之分。設計人員可以用HDL語言來描述系統的硬件構成及其行為,并通過仿真確定其運用到系統硬件上時是否可行,設計出符合要求的硬件系統。不僅如此,利用HDL語言來設計系統硬件同傳統的硬件設計方法相比,具有其獨特的優勢,它為系統的硬件設計帶來了深遠的影響,是硬件設計領域的一次重要的變革。傳統的鍵盤掃描是以硬件電路來確定鍵盤的變化,特定的硬件電路只能應用于特定的鍵盤,因此它存在這樣一些缺點:不能根據實際應用的改變而變化

15、,形式固定。本文所采用的技術方案能克服上述所講的技術缺點,該鍵盤掃描程序是由軟件控制完成,不需要改變硬件電路,就可以適用于多種不同類型的鍵盤。整個系統設計是自動化過程,減少了工作量,主要把精力放在創造性的方案和概念構思上,提高了工作效率,縮短了產品的研制周期。1.3 本文的主要工作本設計主要是以計算機為設計平臺,綜合運用EDA軟件工具開發環境,使用硬件描述語言VHDL,采用自頂而下的設計方法,把系統由上至下的分成幾個模塊設計,最后達到系統的要求,然后在Quartus II9.0上通過編程、調試、編譯、仿真,從而實現鍵盤掃描的設計。第二章介紹了鍵盤掃描的基本特點和工作原理,查找有關可編程邏輯器件

16、、VHDL語言的相關資料,掌握一定的理論知識,熟悉Quartus II軟件的使用。第三章先對鍵盤掃描做出總體的設計方案,然后對鍵盤掃描進行分模塊設計,再對每個模塊做出詳細的分析。第四章根據第三章所做的工作,對程序編譯,然后進行仿真,對仿真出的結果進行詳細的分析,仿真完把程序下載到實驗箱上進行測試。最后對設計做出總結。第2章 FPGA開發工具簡介2.1 FPGA概述FPGA現在已經取代ASIC,實現其功能。通常ASIC包含三種:全定制,半定制(包括標準單元和陣列),和可編程器件。對于前面兩種,您需要支付的費用項目不能重復使用的NRE,主要用于芯片流片,在分析工程開銷,成本一般是10000美元以上

17、,數以萬計的。如果不成功,返工,甚至多次返工的成本,成本將上升。高成本,高風險,但通常的需求,各種ASIC的成本,NRE費用分配給每一個產品的價格太高,用戶通常是不能接受的。然而可編程邏輯器件PLD是可以解決上述問題的可編程邏輯器件,是一種新型的ASIC,它有著操作靈活,易于使用,投資風險小和開發迅速的突出優勢,非常適合產品的前期開發,研究樣本開發或小批量的產品。FPGA是一種新型的PLD,有著PLD所具有的優點,而且其規模比一般的PLD規模要大。FPGA主要特點有:用戶不需要投片生產,就能得到合用的芯片;FPGA可做其它全定制或半定制ASIC電路的中試樣片;其內部有豐富的觸發器和I/O引腳;

18、是ASIC電路中設計周期最短、開發費用最低、風險最小的器件之一; FPGA采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。可以說,FPGA芯片是小批量系統提高系統集成度、可靠性的最佳選擇之一。FPGA是由存放在片內RAM中的程序來設置其工作狀態的,因此,工作時需要對片內的RAM進行編程。用戶可以根據不同的配置模式,采用不同的編程方式。加電時,FPGA芯片將EPROM中數據讀入片內編程RAM中,配置完成后,FPGA進入工作狀態。掉電后,FPGA恢復成白片,內部邏輯關系消失,因此,FPGA能夠反復使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可

19、。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片FPGA,不同的編程數據,可以產生不同的電路功能。因此,FPGA的使用非常靈活。2.2 VHDL語言以及Quartus II應用 VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,誕生于1982 年。1987年底,VHDL被IEEE和美國國防部確認為標準硬件描述語言。VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風格與句法是十分類似于一般的計算機高級語言。VHDL的

20、程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。一個完整的VHDL程序通常包括實體(Entity)、結構體(Architecture)、配置 (Configuration)、程序包集合(Package)和庫(Library)5個部分。前4部分是可分別編譯的源設計單元。庫用來存放已經編譯的實體、結構體、配置和程序包集合。

21、 Quartus II支持多種設計輸入形式,如:原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等,是一種綜合性PLD開發軟件。由于其內嵌帶自有的仿真器和綜合器,因而能夠完成從輸入設計到配置硬件的整個PLD設計流程。而且它還支持Altera的IP核和可編程系統(SOPC)在Altera的片上開發,具有LPM宏功能的模塊庫,用戶可以使用這些成熟的功能模塊,讓FPGA的設計工作變得更簡單。同時,Quartus II支持很多第三方的EDA工具,因而用戶可以使用自己熟悉的第三方EDA工具來進行設計工作。此外,Quartus

22、II 集合了Matlab/Simulink與DSP Builder等優秀的EDA工具,各種DSP應用系統在其平臺上能夠很快得以實現;Quartus II是一個綜合性的開發平臺,集嵌入式軟件開發、系統級設計和可編程邏輯設計于一體。2.3 本章小結本章主要介紹了基于FPGA鍵盤掃描程序的開發工具,簡單地概述了FPGA,主要講述了FPGA的原理及FPGA的設計流程,另外還概述了VHDL語言的一些基本知識,最后簡單地介紹了Quartus II軟件。第章 基于FPGA的鍵盤掃描程序的設計本次設計根據鍵盤掃描程序的設計思路提出了系統的整體電路框圖,對硬件實體部分即本設計中4*4矩陣鍵盤的掃描原理和8位7段

23、數碼管的顯示方式進行了簡單概述,根據整體的電路構架和硬件的實現原理編寫鍵盤掃描程序,將系統進行模塊化設計,主要分為時序產生模塊設計、鍵盤掃描模塊設計、彈跳消除模塊設計、鍵盤譯碼模塊設計,用VHDL硬件描述語言分別編寫各模塊的程序,在QuartusII中為VHDL語言程序分別建立項目,在編譯、仿真通過,證實邏輯功能正確后,在File菜單下選擇Create/Update項中的Create Symbol Files for Current File即可為此實體生成一個后綴為.bsf的組件符號文件,以后就可以在圖形編輯器中調用此組件了。用Quartus II圖形編輯器將各模塊聯系起來,形成頂層文件即本

24、次設計的主體。模塊化的設計方法能明確設計思路,也便于調試和修改。3.1 鍵盤掃描程序的總體電路設計根據設計思路提出鍵盤掃描程序的總體電路設計圖,如圖3.1所示,主要由4*4矩陣鍵盤、鍵盤掃描電路、時序產生電路(即分頻電路)、彈跳消除電路、鍵盤譯碼電路、8位7段數碼管顯示電路構成。整體的工作原理為,通過對系統時鐘提供的頻率進行分頻,分別為鍵盤掃描電路和彈跳消除電路提供時鐘信號,鍵盤掃描電路通過由鍵盤掃描時鐘信號控制不斷產生的鍵盤掃描信號對鍵盤進行行掃描,同時彈跳消除電路實時的對鍵盤的按鍵列信號進行采集、并將采集到的按鍵列信號傳送到鍵盤譯碼電路進行譯碼,譯出與之對應的鍵碼,譯出的鍵碼將通過數碼管顯

25、示電路相對應的8段7位數碼管顯示出來,得到最終的按鍵結果,完成本次設計的電路設計部分。圖3.1 鍵盤掃描的電路框圖3.1.1 矩陣式鍵盤掃描的工作原理圖3.2 4*4矩陣式鍵盤的面板配置矩陣式鍵盤是一種常用的電子輸入裝置,在平常的生活中,矩陣式鍵盤在通信設備如手機,信息終端如計算機,家用電器如油煙機等各式電子產品上都具有很重要的作用。圖3.2是一個4*4矩陣式鍵盤的面板配置圖。鍵盤上上的每個按鍵都是一個機械開關,當按鍵被按下時,則該鍵的電路便會輸出低電平即賦值0,反之,如果沒有按下按鍵則輸出高電平即賦值1。鍵盤的掃描由行信號KY0KY3控制開始進行行掃描,變化的順序依次為11101101101

26、101111110。每一次掃描一行,依次進行循環。例如現在的行掃描信號為1011,表示目前正在掃描9、0、A、B這一行的按鍵,如果這行當中沒有按鍵按下的話,則KX3KX0輸出為1111;反之如果是9鍵按下,則由KX3KX0輸出為0111。根據上面所述原理,我們可得到各按鍵的位置與碼值的關系如表3.1和3.2所示。表3.1 按鍵位置與數碼的關系KY3-KY011101110111011101101110111011101KX3-KX001111011110111100111101111011110按鍵號12345678表3.2 按鍵位置與數碼的關系KY3-KY010111011101110110

27、111011101110111KX3-KX001111011110111100111101111011110按鍵號90ABCDEF若從KX3KX0讀出的值皆為1時,代表該列沒有按鍵按下,則不進行按鍵譯碼的動作,反之,如果有按鍵按下時,則應將KX3KX0讀出的值送至譯碼電路進行譯碼。3.1.2 數碼管的顯示原理數碼管的顯示數據的方式有靜態顯示和動態顯示之分。所謂靜態顯示,就是將被顯示的數據的BCD碼通過各自的47/8顯示譯碼器譯碼后,分別接到顯示譯碼器的顯示驅動端ag(p),而公共端COM則根據數碼管的類型(共陰/共陽)分別接GND/VCC。所謂動態顯示,就是將被顯示的數據的BCD碼按照一定的變

28、化頻率,在不同的時刻周期性地分別送到一個數據總線上,再通過一個公共的47/8顯示譯碼器譯碼后,接到多個顯示譯碼的公共顯示驅動端口ag(p)上,同時,在不同的時刻周期性的選通對應的數碼管的公共端口COM。本設計采用的是共陽極數碼管,采用的顯示方式是靜態顯示,其電路中只用到一個數碼管,當有鍵按下時,數碼管將顯示出對應的鍵碼值。其主要的VHDL程序如下:-數碼管顯示程序-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity smgxs isport(ym_in: in std_logic_vec

29、tor(4 downto 0); com0: out std_logic; qout8: out std_logic_vector(7 downto 0);end entity smgxs;architecture art of smgxs issignal qout8_s: std_logic_vector(7 downto 0);beginprocess(ym_in)isbegincase ym_in iswhen "00000"=>qout8_s<="11000000"-0when "00001"=>qout8

30、_s<="11111001"-1when "00010"=>qout8_s<="10100100"-2when "00011"=>qout8_s<="10110000"-3when "00100"=>qout8_s<="10011001"-4when "00101"=>qout8_s<="10010010"-5when "00110"=>

31、qout8_s<="10000010"-6when "00111"=>qout8_s<="11111000"-7when "01000"=>qout8_s<="10000000"-8when "01001"=>qout8_s<="10010000"-9when "01010"=>qout8_s<="10001000"-Awhen "01011"

32、=>qout8_s<="10000000"-Bwhen "01100"=>qout8_s<="11000110"-Cwhen "01101"=>qout8_s<="11000000"-Dwhen "01110"=>qout8_s<="10000110"-Ewhen "01111"=>qout8_s<="10001110"-Fwhen others=>q

33、out8_s<="11111111"end case;end process;qout8<=qout8_s;com0<='1'end architecture art;3.2 鍵盤掃描電路各主要功能模塊的設計3.2.1 時序產生模塊本時序產生模塊中使用了二種不同頻率的工作脈沖波形,通過對系統時鐘脈沖進行分頻得到鍵盤掃描模塊和鍵盤去抖模塊的時鐘信號。當系統需要使用多種操作頻率的時鐘脈沖時,較為直接和簡便的方法就是用一個自由計數器自由累加得到所需的各種頻率。也就是建立一個N位計數器,N的大小根據電路的需求決定,N的值越大,電路可以分頻的次數就越

34、多,這樣就可以獲得更多的頻率變化,以便提供多種不同頻率的時鐘信號。若輸入時鐘為CLK,N位計數器的輸出為QN-1.0,則Q(0)為CLK的2分頻脈沖信號,Q(1)為CLK的4分頻脈沖信號,Q(2)為CLK的8分頻脈沖信號Q(N-1)為CLK的2N 分頻脈沖信號。我們利用以上規律即可得到我們所需要頻率的信號或信號序列。時序產生模塊模塊電路圖如圖3.4所示。xd_clk輸出信號和ym_clk輸出信號分別為系統時鐘clk的8分頻和2分頻,其中xd_clk信號用作彈跳消除取樣電路的時鐘信號,ym_out信號用作鍵盤掃描電路的時鐘信號。時序產生模塊原理圖如圖3.3所示。 圖3.3 時序產生模塊時序產生模

35、塊VHDL描述如下:-掃描時鐘產生程序-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity smsz isport(clk: in std_logic; ym_clk: out std_logic; xd_clk: out std_logic);end entity smsz;architecture art of smsz issignal clk_s: std_logic_vector(3 downto 0);beginpro

36、cess(clk)isbeginif(clk'event and clk='1')then-上升沿if(clk_s="1111")thenclk_s<="0000"elseclk_s<=clk_s+1;-計數器分頻end if;end if;end process;ym_clk<=clk_s(0);xd_clk<=clk_s(2);end architecture art;3.2.2 鍵盤掃描模塊鍵盤掃描模塊的主要功能是為鍵盤提供掃描信號(表3.1中的行掃描信號KY0KY3),行掃描信號由時鐘控制按照順序依

37、次被賦值1110110110110111。掃描時從KY0-KY3分別掃描四行按鍵,將行掃描信號賦值0111時即可對KY0這一行按鍵進行掃描;將掃描信號賦值1011時則掃描KY1這一行按鍵;將掃描信號賦值1101時掃描KY2這一行按鍵;將掃描信號賦值1110時,檢測KY3這一行的按鍵情況。通過行掃描信號的循環依次檢查每一行是否有鍵按下,如果這行有按鍵按下則立刻進行對按鍵編碼進行譯碼,且將譯碼的結果傳送到數碼管。鍵盤掃描模塊模塊圖如圖3.4所示。圖3.4 鍵盤掃描模塊鍵盤掃描模塊VHDL描述如下:-掃描信號產生程序-library ieee;use ieee.std_logic_1164.all;

38、use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity smxh isport(clk: in std_logic; q_out: out std_logic_vector(1 downto 0); sm_out: out std_logic_vector(3 downto 0);end entity smxh;architecture art of smxh issignal sm_s: std_logic_vector(3 downto 0);signal q_s: std_logic_vector(1 dow

39、nto 0);beginprocess(clk)isbeginif(clk'event and clk='1')thenif(q_s="11")thenq_s<="00"elseq_s<=q_s+1;end if;end if;end process;process(q_s)isbegincase q_s iswhen "00"=>sm_s<="1110" -輸出掃描信號為1110when "01"=>sm_s<="1101&

40、quot; -輸出掃描信號為1101when "10"=>sm_s<="1011" -輸出掃描信號為1011when "11"=>sm_s<="0111" -輸出掃描信號為0111when others=>sm_s<="1111"end case;end process;sm_out<=sm_s;q_out<=q_s;end architecture art;3.2.3 彈跳消除模塊由于本設計中的4*4矩陣鍵盤用的是機械開關,因此在按鍵按下的時刻會

41、在觸片上出現信號來回彈跳的現象,因為這種彈跳現象很可能會造成亂碼現象,從而影響到按鍵結果的正確顯示。圖3.5為彈跳現象造成的錯誤的抽樣結果,從中可以看出雖然是只按鍵一次然后就馬上松開,然而實際的按鍵信號卻已躍變多次,通過取樣信號的檢查,就很有可能輸出錯誤的編碼。圖3.5 彈跳現象產生錯誤的抽樣結果如果調整抽樣頻率(如圖3.6所示),可以發現彈跳現象獲得了改善。圖3.6 調整抽樣頻率后得到的抽樣結果因此為系統加上此模塊,能有效避免亂碼現象的發生。另外,系統中彈跳消除模塊的脈沖信號頻率必須高于其他模塊中的脈沖信號頻率;一般情況下,掃描模塊的工作頻率為24Hz左右,而彈跳消除模塊的工作頻率則必須為1

42、28Hz左右,后者的工作頻率要高于前者。圖3.7 彈跳消除電路的內部實現原理圖彈跳消除電路的實現原理如圖3.7所示,按下按鍵時鍵盤的輸入信號為D_IN,CLK為此模塊的時鐘信號,也就是抽樣信號,將D_IN通過兩個D觸發器延時后再用RS觸發器處理。RS觸發器的前端連接和非門原理:(1)通常人的按鍵速度維持在10次/秒左右,也就是說每次按鍵的時間在100ms左右,所以按下的時間可估算為50ms,以取樣信號CLK的周期為8ms計,則可以取樣到6次。(2)對于不穩定的噪聲,在4ms以下則至多抽樣一次。(3)在觸發器之前,接上AND-NOT之后,SR的組態如表3.3所示。表3.3 RS觸發器真值表SRD

43、_OUT00不變101010(1)D0為1,且D1也為1時,結果S=1,R=0,D_OUT才會輸出1。這代表被取樣的D_IN信號能被連續取樣到兩次1,此時認定它已經穩定地按下按鈕。(2)D0為0,且D1也為0時,結果S=0,R=1,D_OUT才會輸出0。這代表被取樣的D_IN信號能被連續取樣到兩次0,此時認定它已經穩定地放掉按鈕。(3)D0為1,且D1也為0時,結果S=0,R=0,D_OUT將維持先前的輸出信號不變。D0=0,D1=1也是如此。總之,必須取樣到兩次1才會輸出1,兩次0才會輸出0.最后,由于D_OUT的信號輸出時間寬度過長,所以輸出必須再接一級微分電路后,才接到譯碼電路。彈跳消除

44、模塊的VHDL描述如下:-D觸發器程序-library ieee;use ieee.std_logic_1164.all;entity dcfq isport(clk,d: in std_logic; q: out std_logic);end entity dcfq;architecture art of dcfq isbeginprocess(clk)beginif clk'event and clk='1' then -上升沿q<=d;end if;end process;end architecture art;-SR觸發器-library ieee;us

45、e ieee.std_logic_1164.all;entity srcfq isport(r,s: in std_logic;q,qb: out std_logic);end entity srcfq;architecture art of srcfq issignal q_s,qb_s: std_logic;beginprocess(r,s)isbeginif(r='0' and s='1')then -RS觸發器輸出置1q_s<='1'qb_s<='0'elsif(r='1' and s='

46、;0')then -RS觸發器輸出置0q_s<='0'qb_s<='1'elsif(r='0' and s='0')then -RS觸發器輸出保存不變q_s<=q_s;qb_s<=qb_s;end if;q<=q_s;qb<=qb_s;end process;end architecture art;3.2.4 鍵盤譯碼電路鍵盤譯碼電路的主要工作原理是:首先根據輸入的鍵盤信號判斷是否有鍵盤按下再,如果有鍵盤按下,將根據輸入的鍵盤信號和掃描信號進行查表,根據查表可直接得出相應的鍵盤的譯碼值

47、。矩陣式鍵盤中每個按鍵的鍵值參照下表(表3.4鍵盤參數表)。表3.4 鍵盤參數表掃描位置KY3-KY0鍵盤輸出KX3-KX0相對應的鍵盤按鍵鍵盤譯碼電路輸出1110011110001101120010110130011111040100110101115010110116011011017011111108100010110111910011011000001101A10101110B101101110111C11001011D11011101E11101110F1111鍵盤譯碼模塊模塊原理圖如圖3.8所示。圖3.8 鍵盤譯碼模塊鍵盤譯碼模塊VHDL描述如下:-譯碼電路程序-library i

48、eee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity ymdl isport(clk: in std_logic; sm_in: in std_logic_vector(1 downto 0); jm_in: in std_logic_vector(3 downto 0); ym_out: out std_logic_vector(3 downto 0);end entity ymdl;architecture art of ymdl issigna

49、l jm_s: std_logic_vector(5 downto 0);signal ym_s: std_logic_vector(3 downto 0);beginprocess(clk)isbeginjm_s<=sm_in & jm_in;if(clk'event and clk='1')thencase jm_s iswhen "000111"=>ym_s<="0001" -譯碼值1when "001011"=>ym_s<="0010" -譯碼值

50、2when "001101"=>ym_s<="0011" -譯碼值3when "001110"=>ym_s<="0100" -譯碼值4when "010111"=>ym_s<="0101" -譯碼值5when "011011"=>ym_s<="0110" -譯碼值6when "011101"=>ym_s<="0111" -譯碼值7when

51、 "011110"=>ym_s<="1000" -譯碼值8when "100111"=>ym_s<="1001" -譯碼值9when "101011"=>ym_s<="0000" -譯碼值0when "101101"=>ym_s<="1010" -譯碼值Awhen "101110"=>ym_s<="1011" -譯碼值Bwhen &quo

52、t;110111"=>ym_s<="1100" -譯碼值Cwhen "111011"=>ym_s<="1101" -譯碼值Dwhen "111101"=>ym_s<="1110" -譯碼值Ewhen "111110"=>ym_s<="1111" -譯碼值Fwhen others=>ym_s<="XXXX"end case;end if;end process;ym_o

53、ut<=ym_s;end architecture art;3.2.5 鍵盤掃描程序的頂層文件設計設計好各個模塊后,要使其相互聯系起來要通過QUARTUS II的圖形編輯器將各個模塊按照一定的關系建立頂層文件jpsm.bdf,通過連線將各模塊整合后,整體電路用VHDL實現的總體的模塊電路圖如圖3.9所示:圖3.9 鍵盤掃描程序的頂層文件圖3.3本章小結本章首先是根據課題任務書和所查找的資料,給出本次設計的整體電路設計方案。然后對硬件部分如4*4矩陣鍵盤和8段7位數碼管的原理進行闡述,再對鍵盤掃描程序的主要模塊(時序產生模塊、鍵盤掃描模塊、彈跳消除模塊、鍵盤譯碼模塊)分別進行設計,將這幾個

54、模塊進行編程和生成電路元件,并對其進行詳細地分析。最后根據自己的設計思路,將各模塊的電路元件進行整合生成鍵盤掃描程序的頂層文件。33第4章 鍵盤掃描程序的波形仿真及硬件驗證系統采用ALTERA公司的軟件Quartus II9.0軟件進行編譯及仿真,硬件部分利用Creat-SOPC2000實驗箱上的時鐘頻率源、4*4矩陣鍵盤、8位7段數碼管、EP1C20F324C8芯片模塊搭建電路進行硬件驗證。Quartus II支持多種設計輸入形式,如:原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等,是一種綜合性PLD開發軟件。

55、由于其內嵌帶自有的仿真器和綜合器,因而能夠完成從輸入設計到配置硬件的整個PLD設計流程。而且它還支持Altera的IP核和可編程系統(SOPC)在Altera的片上開發,具有LPM宏功能的模塊庫,用戶可以使用這些成熟的功能模塊,讓FPGA的設計工作變得更簡單。同時,Quartus II支持很多第三方的EDA工具,因而用戶可以使用自己熟悉的第三方EDA工具來進行設計工作。此外,Quartus II 集合了Matlab/Simulink與DSP Builder等優秀的EDA工具,各種DSP應用系統在其平臺上能夠很快得以實現;Quartus II是一個綜合性的開發平臺,集嵌入式軟件開發、系統級設計和

56、可編程邏輯設計于一體。4.1 系統仿真在軟件Quartus II9.0上對程序進行編譯,編譯后進行波形仿真。為了方便觀察顯示結果,這里調節仿真時間為1s ,脈沖頻率clk的周期為10ms,保存之后,對各模塊的VWF文件執行Quartus軟件中的processing-> start simulation選項,就可以生產各個模塊的波形仿真圖像,觀察并分析其結果是否與設計方案中的設計思路一致。4.1.1 消抖電路仿真鍵盤的按鍵閉合與釋放瞬間,輸入信號會有按鍵抖動問題出現。如果不進行消抖處理,系統會將這些按鍵抖動誤以為是用戶的另一次輸入,導致系統的誤操作,出現亂碼。圖4.1為鍵盤輸入去抖電路的仿真結果圖,圖中的輸出信號為Q_OUT、QB_OUT,由圖上可以看出,輸出信號Q_OUT的信號

溫馨提示

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

評論

0/150

提交評論