熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 應用方案 > FPGA學習系列:.矩陣鍵盤的設計

FPGA學習系列:.矩陣鍵盤的設計

時間:2018-08-09 11:36:58來源:網絡轉載

導語:?矩陣鍵盤在工程設計越來越多的被用到,已然成為了我們做開發接觸到的不可缺少的小型項目,利于我們理解設計方向的原理為以后的強化學習打好了堅實的基礎。

設計背景:

矩陣鍵盤在工程設計越來越多的被用到,已然成為了我們做開發接觸到的不可缺少的小型項目,利于我們理解設計方向的原理為以后的強化學習打好了堅實的基礎。

設計原理:

在使用按鍵的時候,如果按鍵不多的話,我們可以直接按鍵與FPGA相連接,但是如果按鍵比較多的時候,如何還繼續使用直接按鍵與FPGA相連接的話,所會大量增加FPGA端口的消耗,為了減少FPGA端口的消

耗,我們可以把按鍵設計成矩陣的形式,就如下圖所示:

由上圖可以知道,矩陣鍵盤的行row(行)與col(列)的交點,都是通過一個按鍵來相連接。傳統的一個按鍵一個端口的方法,若要實現16個按鍵,則需要16個端口,而現在這個矩陣鍵盤的設計,16個按鍵,僅僅需要8個端口,如果使用16個端口來做矩陣鍵盤的話,可以識別64個按鍵,端口的利用率遠遠比傳統的設計好的多,所以如果需要的按鍵少的話,可以選擇傳統的按鍵設計,如果需要的按鍵比較多的話,可以采用這種矩陣鍵盤的設計。而我們現在就以掃描法為例來介紹矩陣鍵盤的工作原理。

首先col(列)是FPGA給矩陣鍵盤輸出的掃描信號,而row(行)是矩陣鍵盤反饋給FPGA的輸入信號,用于檢測哪一個按鍵被按下來,如下圖所示:

詳細如上圖所示,FPGA給出掃描信號COL[3:0],COL=4’b0111,等下一個時鐘周期COL=4’b1011,再等下一個時鐘周期COL=4’b1101,再等下一個時鐘周期COL=4’b1110,再等下一個時鐘周期COL=4’b0111,COL就是這樣不斷循環,給矩陣鍵盤一個低電平有效的掃描信號,當FPGA給矩陣鍵盤COL掃描信號的同時,FPGA也要在檢測矩陣鍵盤給FPGA的的反饋信號ROW,舉個例子,假若矩陣鍵盤中的9號案件被按下了:

當COL=4’b1101,ROW=4’b1011;

當9號按鍵被按下的時候,9號按鍵的電路就會被導通,掃描電路COL開始掃描,當掃描到COL[1]的時候,由于9號按鍵的電路被導通了,COL[1]的電壓等于ROW[2]的電壓,所以會出現當COL=4’b1101的時候ROW=4’b1011;然后我們就可以利用這一種現象,來設計一個識別按鍵的電路。

設計架構圖:

設計代碼:

設計模塊

0modulekey_borad(clk,rst_n,row,col,key_num);

1inputclk;

2inputrst_n;

3input[3:0]row;//輸入反饋信號

4

5

6outputreg[3:0]col;//輸出掃描信號

7outputreg[3:0]key_num;//按鍵值得輸除

8

9reg[15:0]count;

10

11parameterT1ms=50000;//掃描的時間間隔50000*20ns

12//parameterT1ms=5;

13

14regflag;

15always@(posedgeclkornegedgerst_n)

16if(!rst_n)

17begin

18count<=16'd0;

19flag<=1'b0;

20end

21else

22begin

23if(count

24begin

25count<=count+1'b1;

26flag<=0;

27end

28else

29begin

30flag<=1'b1;//計數到了就給一個標志位

31count<=16'b0;

32end

33end

34always@(posedgeclkornegedgerst_n)

35if(!rst_n)

36begin

37col<=4'b0111;

38end

39else

40begin

41if(flag)

42col<={col[2:0],col[3]};//列掃描

43else

44col<=col;

45end

46

47//鍵值得翻譯模塊

48always@(posedgeclkornegedgerst_n)

49if(!rst_n)

50key_num=4'd0;

51else

52case({row,col})//位拼接行和列的信號,翻譯出對應的鍵值

538'b0111_0111:key_num=4'hf;

548'b0111_1011:key_num=4'he;

558'b0111_1101:key_num=4'hd;

568'b0111_1110:key_num=4'hc;

57

588'b1011_0111:key_num=4'hb;

598'b1011_1011:key_num=4'ha;

608'b1011_1101:key_num=4'h9;

618'b1011_1110:key_num=4'h8;

62

638'b1101_0111:key_num=4'h7;

648'b1101_1011:key_num=4'h6;

658'b1101_1101:key_num=4'h5;

668'b1101_1110:key_num=4'h4;

67

688'b1110_0111:key_num=4'h3;

698'b1110_1011:key_num=4'h2;

708'b1110_1101:key_num=4'h1;

718'b1110_1110:key_num=4'h0;

72default:;

73endcase

74endmodule

測試模塊

0`timescale1ns/1ps

1

2modulekey_borad_tb();

3regclk;

4regrst_n;

5reg[4:0]pressnum;//按鍵的值

6wire[3:0]row;

7

8wire[3:0]col;

9wire[3:0]key_num;//輸出的值

10

11initialbegin

12clk=1'b1;

13rst_n=1'b0;

14pressnum=5'd16;

15

16#200.1

17rst_n=1'b1;

18#1000

19pressnum=5'd16;

20

21#1000

22pressnum=5'd8;

23

24#1000

25pressnum=5'd16;

26

27#1000

28pressnum=5'd15;

29#1000

30pressnum=5'd16;

31#1000

32$stop;

33

34end

35always#10clk=~clk;

36//例化對應的模塊

37key_topborad_dut(

38.clk(clk),

39.rst_n(rst_n),

40.row(row),

41.col(col),

42.key_num(key_num)

43);

44yingjianyingjian_dut(//硬件檢測電路//此模塊自己可以設計

45.clk(clk),

46.rst_n(rst_n),

47.col(col),

48.row(row),

49.pressnum(pressnum)

50);

51endmodule

仿真圖:

在仿真圖中可以清晰的看出當按鍵按下的時候為8,顯示出來的鍵值也為8,當抬起的時候為16,那么鍵值就保持不變,在設置的時候我們設置的是按鍵抬起為16,通過驗證我們得到我們的設計是正確的。

標簽:

點贊

分享到:

上一篇:伺服電機的分類與特性

下一篇:伺服電機兵法十三章,輕松拿...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 栖霞市| 双柏县| 宁都县| 九江市| 永平县| 信阳市| 高阳县| 通山县| 大埔区| 正宁县| 囊谦县| 元朗区| 白河县| 上思县| 青岛市| 瓦房店市| 山东省| 绍兴市| 张掖市| 鸡泽县| 封开县| 衡水市| 洪雅县| 鄂托克前旗| 阿拉善盟| 修武县| 托克逊县| 奉新县| 乡城县| 崇阳县| 治县。| 从江县| 会宁县| 张掖市| 富民县| 鸡东县| 隆德县| 永兴县| 桃园市| 都昌县| 乌恰县|