華南理工大學數(shù)電課程設計要點_第1頁
華南理工大學數(shù)電課程設計要點_第2頁
華南理工大學數(shù)電課程設計要點_第3頁
華南理工大學數(shù)電課程設計要點_第4頁
華南理工大學數(shù)電課程設計要點_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計報告書題目:矩陣鍵盤識別電路的設計 學 院 自動化學院 專 業(yè) 自動化控制 學生姓名 學生學號 201330581089 班內(nèi)序號 9 指導教師 馬楚儀 課程編號 135070 課程學分 1學分 起止日期 2015.05 192015.07.03 教師評語教師簽名:日期:成績評定備注目錄第1章、選題背景1第2章、方案論證(設計理念)11設計任務12方案論證;2第3章、過程論述21總電路22分頻模塊33掃描模塊:44譯碼模塊5第4章、結(jié)果分析61分頻模塊62譯碼模塊63掃描模塊74總電路7第5章、課程設計總結(jié)81收獲與心得82致謝9附錄1:參考文獻10參考文獻10附錄2:部分采用VERI

2、LOG語言編寫的模塊的原程序 10掃描模塊程序10譯碼模塊程序:15課題名稱:數(shù)字電子技術基礎第1章、選題背景在現(xiàn)代電子工業(yè)的控制電路中,鍵盤掃描和顯示電路對系統(tǒng)的調(diào)試和設置有著重要的作用。隨著EDA技術的發(fā)展,基于FPGA的掃描鍵盤因其結(jié)構(gòu)簡單能有效防止機械鍵盤按鍵抖動帶來的數(shù)據(jù)錯誤等優(yōu)點在許多電子設備中都得到了廣泛的應用。本課題的內(nèi)容是設計一個電路來識別4x4矩陣鍵盤,單獨按某個鍵,數(shù)碼管顯示該鍵的數(shù)字,如J0,顯示00,J1,顯示01,J15顯示15,同時發(fā)出發(fā)出一音“嘀”同時按兩個或以上按鍵,數(shù)碼管顯示ER,發(fā)出一音“嘀”,連續(xù)發(fā)出“嘟嘟嘟”,直到松開按鍵,聲音關閉。所主要解決的問題是

3、設計電路,通過運用Quartus軟件平臺生成電路符號,并仿真分析,消除各種存在的問題,直到下載到芯片中通過硬件實現(xiàn)上述所要求的功能。對該系統(tǒng)要求:應具有集成度高、穩(wěn)定性好、設計靈活和設計效率高等優(yōu)點。設計指導思想:矩陣鍵盤識別電路從原理上講就是一個典型的數(shù)字電路,包括組合邏輯電路和時序邏輯電路。設計鍵盤掃描程序,將程序劃分為時序產(chǎn)生模塊、鍵盤掃描模塊、鍵值譯碼模塊,蜂鳴器模塊四個模塊,時序產(chǎn)生模塊為鍵盤掃描和蜂鳴器模塊產(chǎn)生時鐘信號,鍵盤掃描模塊采用行掃描法對4*4矩陣鍵盤進行掃描,鍵值譯碼模塊將所按鍵值譯碼為共陰極8位7段數(shù)碼管的顯示碼幾個模塊組合起來實現(xiàn)鍵盤掃描的設計要求。第2章、方案論證(

4、設計理念)1設計任務設計任務的設計功能包括:1單獨按某個鍵,數(shù)碼管顯示該鍵的數(shù)字,如J0,顯示00,J1,顯示01,J15顯示15。2 同時按兩個或以上按鍵,顯示ER。3單獨按某個鍵,發(fā)出一音“嘀”, 同時按兩個或以上按鍵,發(fā)出一音“嘀”,連續(xù)發(fā)出“嘟嘟嘟”,直到松開按鍵,聲音關閉。(1)設計理念:將矩陣鍵盤識別電路各個功能分成模塊來實現(xiàn),包括分頻模塊描模塊、鍵值譯碼模塊,蜂鳴器模塊四個模塊, 在主電路中通過連線實現(xiàn)識別功能。分模塊能使電路看起來更有條理,接線更清晰,功能更加可靠,排查錯誤更簡單和更有針對性。2方案論證;一:識別方式:判斷鍵盤上哪個鍵被按下,可以采用靜態(tài)譯碼法或掃描法,靜態(tài)譯碼

5、法原理簡單,容易理解,但電路復雜,掃描法比較抽象,電路相對簡單,通常采用,掃描法又稱為逐行或列掃描查詢法,它是一種最常用的多按鍵識別方法。綜上,選取掃描方法二:實現(xiàn)方式方案1:采用用門電路和各種寄存器等搭建組合時序電路的方式來實現(xiàn),可以采用移位寄存器循環(huán)掃描信號,并通過數(shù)據(jù)選擇器來判斷各種情況,這種方法實現(xiàn)原理簡單,但搭電路的時候復雜,接線繁多,尤其是識別兩個以上的按鍵時不靈活,容易漏接錯接,且檢查錯誤比較麻煩。方案2:采用用硬件描述語言Verilog hdl來實現(xiàn),Verilog hdl語言和c語言比較類似,所以上手比較快,因此,雖然之前沒接觸過該語言,但在做課程設計的這段時間里,用它來實現(xiàn)

6、課程設計所要實現(xiàn)的功能還是可以的。用這種方法的話,程序簡單易懂,而且比較簡潔,思路比較清晰,尤其在識別兩個按鍵以上的時候優(yōu)越性特別明顯。方案3:采用用硬件描述語言vhdl來實現(xiàn),與Verilog hdl 相似,但是vhdl的語法比Verilog hdl復雜一點,由于沒有學過,對該語言一竅不通。所以該方案不考慮。綜上所述,選取方案二。第3章、過程論述1總電路作用:將各個模塊串連起來以實現(xiàn)識別電路的功能。圖1總電路圖輸入1kHZ的頻率,首先經(jīng)過分頻器成1HZ ,100HZ,250HZ, 500HZ的脈沖,用于驅(qū)動蜂鳴器,1kHZ的脈沖進入掃描模塊,掃描模塊將掃描結(jié)果分別送給顯示譯碼器模塊和蜂鳴器模

7、塊,從而驅(qū)動兩個led數(shù)碼管顯示結(jié)果,只有一個鍵按下時,蜂鳴器發(fā)出一音“嘀”,當同時按兩個或以上按鍵,發(fā)出一音“嘀”,連續(xù)發(fā)出“嘟嘟嘟”。2分頻模塊作用:在輸入脈沖只有11kHZ的情況下,將 1kHZ的脈沖分頻成1HZ ,100HZ,250HZ, 500HZ的脈沖,用于驅(qū)動蜂鳴器,不同的頻率使蜂鳴器發(fā)出不同的聲音。圖2 分頻模塊電路圖圖中各成分的作用,和成分之間的交互:輸入1kHZ的脈沖,運用7490芯片構(gòu)成分頻電路,當7490的SET9A,SET9B,CLRA.CLRB管腳接低電平CLKA接QD輸出管腳,CLKB接輸入脈沖,QA輸出脈沖,構(gòu)成十分頻電路。依據(jù)這樣的原理,經(jīng)過三個十分頻即可輸出

8、100,1HZ的脈沖信號。分頻模塊的下部分是用D觸發(fā)器構(gòu)成的二分頻電路,因此可以分頻出500HZ,250HZ的脈沖信號。3掃描模塊:作用:判斷按鍵的狀態(tài),即識別按鍵,按照識別結(jié)果輸出一個按鍵標志位flag,錯誤按鍵標志位flag2,和按鍵值key_value。圖3.掃描模塊電路邏輯符號圖圖4矩陣鍵盤結(jié)構(gòu)圖程序見附錄,各成分的作用,和成分之間的交互:掃描流程1、 判斷鍵盤中有無鍵按下 將全部列線KR0-KR3置低電平然后檢測行線KL0-KL3的狀態(tài),只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中,若所有行線均為高電平則表示鍵盤中無鍵按下。 2

9、、 判斷按鍵所在的位置 在確認有鍵按下后,即可進入確定具體閉合鍵的過程,其方法是依次將列線置為低電平,即在置某根列線為低電平時,其它線為高電平,例如: KR0 KR1 KR2 KR3 置0111,之后掃描KL端,當J0鍵按下,則KL0輸出為0,其余則為1,即KL3 KL2 KL1 KL0輸出為1110,此時就可以判斷為J0鍵被按下,數(shù)碼管顯示01,依此類推,判斷其他鍵。而在一次掃描過程中,當掃描到某列有鍵按下,即將該列的按鍵標志置1,在掃描結(jié)束后,如果有多列置1,就判斷有多個鍵按下,從而key_value=16,即報錯,而在一行之中的最后判斷之中,例如KR0-KR3置1110時,當KL3 KL

10、2 KL1 KL0輸出至少兩個管腳為低電平時,也判斷為多個按鍵按下,即就報錯。即識別思想是在一次輪回中,依次將KR0 KR1 KR2 KR3分別置為00000,0111,1011,1101,1101,此次掃描結(jié)束才判斷掃描結(jié)果,判斷按鍵錯誤的順序是先列后行。表1按鍵位置與數(shù)碼的關系KRKLJ0J1J2J3J4J51110_11101101_11101011_11100111_11101110_11011101_1101J6J7J8J9J10J111011_11010111_11011110_10111101_10111011_10110111_1011J12J3J14J15J16(即報錯標志)

11、1110_01111101_01111011_01110111_0111defualt4譯碼模塊作用:將輸進來的key_value譯碼出相應的碼給led1,led2顯示。程序見附錄。圖5.譯碼模塊邏輯符號圖第4章、結(jié)果分析1分頻模塊Clk輸入1KHZ的脈沖信號,分頻出500HZ,250HZ,100HZ,1HZ的信號,分析波形結(jié)果正確。圖6分頻模塊仿真波形2譯碼模塊當電路輸入key_value分別為:00000,00001,00010,00011,00100,00101,00110,00111,01000,01001,01010,01011,01100,01101,01110,01111,100

12、00led1輸出:00111111,00111111,00111111,00111111,0011111100111111,00111111,00111111,00111111,00111111,0011000000110000,00110000,00110000,00110000,00110000,01111001led2輸出:00111111,00110000,01011011,01001111,0110011001101101,01111100,00000111,01111111,01101111,0011111100110000,01011011,01001111,01100110,0

13、1101101, 01110111圖7.譯碼模塊的仿真波形圖3掃描模塊掃描程序依次將KR0 KR1 KR2 KR3 置0111,1011,1101,1110,進行掃描。圖8.掃描模塊的仿真波形圖4總電路在時鐘的控制下,掃描程序依次將KR0 KR1 KR2 KR3 置0111,1011,1101,1110,進行掃描,如果第一個鍵按下時,此時flag置一,數(shù)碼管中l(wèi)ed1,led2都置00111111。其他的同理。圖9.總電路仿真波形圖第5章、課程設計總結(jié)1收獲與心得通過本次課程設計,我收獲到在課堂上所不能給予我的知識和處理問題的能力,也深刻體會到,正如老師在任務書中說的一樣,做設計是一件很辛苦的

14、事情,千萬不能夠浮躁,想走捷徑,只有靜下心來,根據(jù)本課程的知識、查找資料、學習前人經(jīng)驗,才能有自己的作品。在設計過程中,感覺自己收獲到了很多比僅僅做題,上課更豐富的知識,同時也加深了對數(shù)電知識的理解,并且這個過程現(xiàn)在回想起來真的很奇妙自己能夠獨立地運用自己學的知識來設計電路,真的很有成就感。讓我感受最深的是在這次設計之中出現(xiàn)的那些問題,真的,做設計如同人生,并不是一帆風順的,也不能一蹴而就。從選擇矩陣鍵盤的這道題開始,就意味著我要開始接受一個新的挑戰(zhàn)。說實話,一開始選擇這道題目是因為之前有接觸過矩陣鍵盤,后來才發(fā)現(xiàn)用數(shù)電知識來實現(xiàn)和我之前接觸的有特別大的區(qū)別,真的可以說天壤之別。在選擇方案的時

15、候,一開始挺糾結(jié),是要用描述語言還是用搭電路的方法,因為我之前沒接觸過硬件描述語言。后來通過論證,果斷選了硬件語言,硬件語言對我來說真的是一個新的東西,所以這不得不說是一個新的挑戰(zhàn)。也正因為此次設計,我對Verilog hdl語言有了一個大概的了解。選擇了用描述語言來描述電路,首先就是要補充知識,我把數(shù)電課本的關于硬件語言的那章看了,然后就到處于找關于Verilog hdl的語法資料。在寫掃描程序的過程中,單個按鍵檢測比較容易,但當然這個過程出現(xiàn)了很多小問題,這些小問題有時候也是挺難發(fā)現(xiàn)的,有時候就改了一個地方,然后程序就可以正常工作了,所以程序編譯了數(shù)不清n遍,出現(xiàn)問題的時候就找找書,例如阻

16、塞語句和非阻塞語句的區(qū)別,還有case語句在Verilog hdl中的應用等,尤其是阻塞語句和非阻塞語句,花了很久才搞懂是什么回事。最困難的部分是兩個以上按鍵的檢測,首先是掃描方法,如何檢測出兩個以上的按鍵,真的想了好久,看著那個矩陣鍵盤原理圖想了不知道多少遍了。一開始想出來的程序,按照原理,它應該能夠檢測出不同行的兩個按鍵以上的,但是結(jié)果卻出乎我意料,竟然只能夠識別同一列的兩個以上按鍵,然后檢測很久也沒發(fā)現(xiàn)問題,真的考驗人的耐心,奇怪的是在之后的寫的程序,沒怎么改,它就正常工作了。之后用它又寫了一個程序,雖然感覺那個原理能夠檢測任意兩個以上按鍵但結(jié)果卻是只能檢測不同行。迫于無奈,只能改另外一

17、種掃描方法,前一種掃描方法由于時間關系,只能先放下查找它的錯誤,自己感覺可能對Verilog hdl有些細節(jié)的東西還不是很清楚 ,可能這也是此次設計遇到的最大問題。之后的那個程序掃描方法在實現(xiàn)過程中也是遇到各種問題,經(jīng)過查資料,最后很幸運都解決了。在程序調(diào)試的時候,需要的是發(fā)現(xiàn)問題的細心和耐心,程序問題才能夠一一解決。數(shù)電課程設計過程充滿挑戰(zhàn),既有有趣的地方,又有困難的讓人想要放棄的地方。每當想到一個新方法,就想去用它,驗證它,有時睡在床上想著,想出一些解決方案,于是跳下床,到電腦前操作,這也許就是它的魅力,每一個困難都讓人躍躍欲試下想要克服它。在每一個問題解決的背后需要一顆有耐心的心和思考的

18、大腦。在不斷發(fā)現(xiàn)問題和解決問題的過程中,收獲的不僅僅是知識,更是一種主動的態(tài)度。學習是一種態(tài)度。我覺得我很享受做課程設計的過程,它讓我經(jīng)歷了柳暗花明的喜悅,讓我在這個過程中的到很多的滿足感。2致謝衷心感謝老師在實驗過程中的諄諄教導,通過實驗,我更加鞏固了課堂上的知識,也感謝學校安排了這次數(shù)電設計,讓我有了這次不同以往的經(jīng)歷,增加了我實踐的機會。 附錄1:參考文獻參考文獻 1閻石.數(shù)學電子技術基礎.北京:高等教育出版社2夏宇聞.Verilog 數(shù)字系統(tǒng)設計教程.北京.北京航空航天大學出版社3 魏家明.Verilog編程藝術.電子工業(yè)出版社附錄2:部分采用verilog語言編寫的模塊的原程序 掃描

19、模塊程序/*時鐘CLK管腳:PIN_18 *鍵盤col輸入管腳:PIN_8,PIN_7,PIN_6,PIN_5 *鍵盤row輸出管腳:PIN_14,PIN_13,PIN_12,PIN_11 *實驗結(jié)果:按鍵每個數(shù)字對應亮燈數(shù),其它按鍵對應不同結(jié)果 */module juzhen(clk,incol,outrow,key_value,key_flag,key_flag1);input clk; /定義時鐘引腳input3:0incol; /定義橫向數(shù)據(jù)輸入output3:0outrow; /定義縱向數(shù)據(jù)輸出 output4:0key_value; /定義識別的按鍵值output key_flag

20、,key_flag1; /定義按鍵標志,flag表示一個flag/flag2表示兩個按鍵 reg 3:0row;reg3:0incol_reg ; /寄存掃描行值reg3:0 outrow_reg; /寄存掃描列值reg2:0state; /狀態(tài)標志reg key_flag,key_flag1; /按鍵標志位reg 4:0 key_value; /讀取的狀態(tài)值reg 3:0incol_1,incol_2,incol_3,incol_4;reg state1,state2,state3,state4;reg 3:0 statez;/總的按鍵標志always(posedge clk)beginca

21、se(state)0:begin row<=4'b0000; key_flag<=1'b0;key_flag1<=1'b0; if(incol!=4'b1111)begin state<=1;row<=4'b1110;endelse state<=0;end1:beginif(incol!=4'b1111)beginincol_1<=incol;state1<=1'b1;state<=2;row<=4'b1101;endelsebeginstate<=2;row&l

22、t;=4'b1101;state1<=1'b0;endend2:beginif(incol!=4'b1111)beginincol_2<=incol;state2<=1'b1;state<=3;row<=4'b1011;endelsebeginstate<=3;row<=4'b1011;state2<=1'b0;endend3:beginif(incol!=4'b1111)beginincol_3<=incol;state3<=1'b1;state<=4;r

23、ow<=4'b0111;endelsebeginstate<=4;row<=4'b0111;state3<=1'b0;endend4:beginif(incol!=4'b1111)beginincol_4<=incol;state4<=1'b1;state<=5;endelse begin state<=5;state4<=1'b0;end end 5:beginstatez<=state4,state3,state2,state1;case(statez)4'b1000:beg

24、in incol_reg<=incol_4;outrow_reg<=4'b0111;case(incol_4)4'b1110:key_flag<=1'b1;4'b1101:key_flag<=1'b1;4'b1011:key_flag<=1'b1;4'b0111:key_flag<=1'b1;4'b0011:key_flag1<=1'b1;4'b1100:key_flag1<=1'b1;4'b1001:key_flag1<=1&#

25、39;b1;4'b0101:key_flag1<=1'b1;4'b1010:key_flag1<=1'b1;4'b0110:key_flag1<=1'b1;default:key_flag<=1'b0;endcaseend4'b0100:begin incol_reg<=incol_3;outrow_reg<=4'b1011;case(incol_3)4'b1110:key_flag<=1'b1;4'b1101:key_flag<=1'b1;4

26、'b1011:key_flag<=1'b1;4'b0111:key_flag<=1'b1;4'b0011:key_flag1<=1'b1;4'b1100:key_flag1<=1'b1;4'b1001:key_flag1<=1'b1;4'b0101:key_flag1<=1'b1;4'b1010:key_flag1<=1'b1;4'b0110:key_flag1<=1'b1;default:key_flag<=1&

27、#39;b0;endcaseend4'b0010:begin incol_reg<=incol_2;outrow_reg<=4'b1101;case(incol_2)4'b1110:key_flag<=1'b1;4'b1101:key_flag<=1'b1;4'b1011:key_flag<=1'b1;4'b0111:key_flag<=1'b1;4'b0011:key_flag1<=1'b1;4'b1100:key_flag1<=1'

28、b1;4'b1001:key_flag1<=1'b1;4'b0101:key_flag1<=1'b1;4'b1010:key_flag1<=1'b1;4'b0110:key_flag1<=1'b1;endcaseend4'b0001:begin incol_reg<=incol_1;outrow_reg<=4'b1110;case(incol_1)4'b1110:key_flag<=1'b1;4'b1101:key_flag<=1'b1

29、;4'b1011:key_flag<=1'b1;4'b0111:key_flag<=1'b1;4'b0011:key_flag1<=1'b1;4'b1100:key_flag1<=1'b1;4'b1001:key_flag1<=1'b1;4'b0101:key_flag1<=1'b1;4'b1010:key_flag1<=1'b1;4'b0110:key_flag1<=1'b1;default:key_flag<=

30、1'b0;endcaseenddefault:begin incol_reg<=4'b0000;outrow_reg<=4'b0000;key_flag1<=1'b1;endendcase state<=0;endendcaseendalways(clk or outrow_reg or incol_reg)begincase(outrow_reg,incol_reg)8'b1110_1110:begin key_value<=5'b00000;end8'b1101_1110:begin key_value&

31、lt;=5'b00001;end8'b1011_1110:begin key_value<=5'b00010;end8'b0111_1110:begin key_value<=5'b00011;end8'b1110_1101:begin key_value<=5'b00100;end8'b1101_1101:begin key_value<=5'b00101;end8'b1011_1101:begin key_value<=5'b00110;end8'b0111_110

32、1:begin key_value<=5'b00111;end8'b1110_1011:begin key_value<=5'b01000;end8'b1101_1011:begin key_value<=5'b01001;end8'b1011_1011:begin key_value<=5'b01010;end8'b0111_1011:begin key_value<=5'b01011;end8'b1110_0111:begin key_value<=5'b01100;

33、end8'b1101_0111:begin key_value<=5'b01101;end8'b1011_0111:begin key_value<=5'b01110;end8'b0111_0111:begin key_value<=5'b01111;enddefault:begin key_value<=5'b10000;endendcaseendassign outrow=row;endmodule譯碼模塊程序:module yima(key_value,led1,led2);input 4:0 key_value;reg7:0led_reg1,led_reg2;output7:0led1; output7:0led2;always(key_value)begin case(key_value)5'b00000:begin led_reg1=8'b00111111;led_reg2=8'b00111111; end 5'b00001:begin led_reg1=8'b00111111;led_reg2=8'b00110000; end 5'b00010:begin led_reg1=8'b00

溫馨提示

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

最新文檔

評論

0/150

提交評論