技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > FPGA學(xué)習(xí)系列:.矩陣鍵盤(pán)的設(shè)計(jì)

FPGA學(xué)習(xí)系列:.矩陣鍵盤(pán)的設(shè)計(jì)

時(shí)間:2018-08-09 11:36:58來(lái)源:網(wǎng)絡(luò)轉(zhuǎn)載

導(dǎo)語(yǔ):?矩陣鍵盤(pán)在工程設(shè)計(jì)越來(lái)越多的被用到,已然成為了我們做開(kāi)發(fā)接觸到的不可缺少的小型項(xiàng)目,利于我們理解設(shè)計(jì)方向的原理為以后的強(qiáng)化學(xué)習(xí)打好了堅(jiān)實(shí)的基礎(chǔ)。

設(shè)計(jì)背景:

矩陣鍵盤(pán)在工程設(shè)計(jì)越來(lái)越多的被用到,已然成為了我們做開(kāi)發(fā)接觸到的不可缺少的小型項(xiàng)目,利于我們理解設(shè)計(jì)方向的原理為以后的強(qiáng)化學(xué)習(xí)打好了堅(jiān)實(shí)的基礎(chǔ)。

設(shè)計(jì)原理:

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

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

由上圖可以知道,矩陣鍵盤(pán)的行row(行)與col(列)的交點(diǎn),都是通過(guò)一個(gè)按鍵來(lái)相連接。傳統(tǒng)的一個(gè)按鍵一個(gè)端口的方法,若要實(shí)現(xiàn)16個(gè)按鍵,則需要16個(gè)端口,而現(xiàn)在這個(gè)矩陣鍵盤(pán)的設(shè)計(jì),16個(gè)按鍵,僅僅需要8個(gè)端口,如果使用16個(gè)端口來(lái)做矩陣鍵盤(pán)的話(huà),可以識(shí)別64個(gè)按鍵,端口的利用率遠(yuǎn)遠(yuǎn)比傳統(tǒng)的設(shè)計(jì)好的多,所以如果需要的按鍵少的話(huà),可以選擇傳統(tǒng)的按鍵設(shè)計(jì),如果需要的按鍵比較多的話(huà),可以采用這種矩陣鍵盤(pán)的設(shè)計(jì)。而我們現(xiàn)在就以?huà)呙璺槔齺?lái)介紹矩陣鍵盤(pán)的工作原理。

首先col(列)是FPGA給矩陣鍵盤(pán)輸出的掃描信號(hào),而row(行)是矩陣鍵盤(pán)反饋給FPGA的輸入信號(hào),用于檢測(cè)哪一個(gè)按鍵被按下來(lái),如下圖所示:

詳細(xì)如上圖所示,F(xiàn)PGA給出掃描信號(hào)COL[3:0],COL=4’b0111,等下一個(gè)時(shí)鐘周期COL=4’b1011,再等下一個(gè)時(shí)鐘周期COL=4’b1101,再等下一個(gè)時(shí)鐘周期COL=4’b1110,再等下一個(gè)時(shí)鐘周期COL=4’b0111,COL就是這樣不斷循環(huán),給矩陣鍵盤(pán)一個(gè)低電平有效的掃描信號(hào),當(dāng)FPGA給矩陣鍵盤(pán)COL掃描信號(hào)的同時(shí),F(xiàn)PGA也要在檢測(cè)矩陣鍵盤(pán)給FPGA的的反饋信號(hào)ROW,舉個(gè)例子,假若矩陣鍵盤(pán)中的9號(hào)案件被按下了:

當(dāng)COL=4’b1101,ROW=4’b1011;

當(dāng)9號(hào)按鍵被按下的時(shí)候,9號(hào)按鍵的電路就會(huì)被導(dǎo)通,掃描電路COL開(kāi)始掃描,當(dāng)掃描到COL[1]的時(shí)候,由于9號(hào)按鍵的電路被導(dǎo)通了,COL[1]的電壓等于ROW[2]的電壓,所以會(huì)出現(xiàn)當(dāng)COL=4’b1101的時(shí)候ROW=4’b1011;然后我們就可以利用這一種現(xiàn)象,來(lái)設(shè)計(jì)一個(gè)識(shí)別按鍵的電路。

設(shè)計(jì)架構(gòu)圖:

設(shè)計(jì)代碼:

設(shè)計(jì)模塊

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

1inputclk;

2inputrst_n;

3input[3:0]row;//輸入反饋信號(hào)

4

5

6outputreg[3:0]col;//輸出掃描信號(hào)

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

8

9reg[15:0]count;

10

11parameterT1ms=50000;//掃描的時(shí)間間隔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;//計(jì)數(shù)到了就給一個(gè)標(biāo)志位

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})//位拼接行和列的信號(hào),翻譯出對(duì)應(yīng)的鍵值

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

測(cè)試模塊

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//例化對(duì)應(yīng)的模塊

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(//硬件檢測(cè)電路//此模塊自己可以設(shè)計(jì)

45.clk(clk),

46.rst_n(rst_n),

47.col(col),

48.row(row),

49.pressnum(pressnum)

50);

51endmodule

仿真圖:

在仿真圖中可以清晰的看出當(dāng)按鍵按下的時(shí)候?yàn)?,顯示出來(lái)的鍵值也為8,當(dāng)抬起的時(shí)候?yàn)?6,那么鍵值就保持不變,在設(shè)置的時(shí)候我們?cè)O(shè)置的是按鍵抬起為16,通過(guò)驗(yàn)證我們得到我們的設(shè)計(jì)是正確的。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:伺服電機(jī)的分類(lèi)與特性

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

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢(xún)采購(gòu)咨詢(xún)媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)