0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的4x4矩陣鍵盤驅(qū)動(dòng)設(shè)計(jì)

CHANBAEK ? 來源:哈勒昆 ? 作者:沈長棋 ? 2023-07-23 11:41 ? 次閱讀

本次設(shè)計(jì)采用FPGA驅(qū)動(dòng)4x4矩陣鍵盤,這個(gè)原理其實(shí)很簡單,但是我在做的時(shí)候曾經(jīng)理解錯(cuò)了一個(gè)地方,導(dǎo)致走了一天的彎路,因?yàn)楦杏X比較有意思,所以想在這分享一下。

014x4矩陣鍵盤驅(qū)動(dòng)原理

首先看一下矩陣鍵盤的原理圖,矩陣鍵盤的原理與獨(dú)立按鍵類似,可以將單獨(dú)的一行或一列當(dāng)做一個(gè)獨(dú)立按鍵使用。圖中的row_one ~ row_four表示矩陣鍵盤的四行,col_one~col_four表示矩陣鍵盤的四列。

圖片

矩陣鍵盤的掃描識(shí)別可以通過行列掃描來完成,首先我們先將4行的I/O口(row_one、row_two、row_three、row_four)全部輸出高電平,4列的I/O口(col_one、col_two、col_three、col_four)全部輸出低電平,若是這4行按鍵里有按鍵按下,那么按鍵按下的那一行對(duì)應(yīng)的I/O口電平就會(huì)被拉低,這樣我們就能確定按下按鍵的行坐標(biāo)。接下來便需要確定列坐標(biāo),獲取列坐標(biāo)的方法與行坐標(biāo)的方法類似,就是先讓4行的I/O口全部輸出低電平,4列的I/O口全部輸出高電平,這樣按鍵按下的那一列I/O口的電平就會(huì)被拉低,這樣我們便確定了對(duì)應(yīng)的列坐標(biāo),如此便能獲取到對(duì)應(yīng)按下按鍵的行列坐標(biāo)。

02設(shè)計(jì)思路

這里需要討論的便是如何實(shí)現(xiàn)4×4矩陣鍵盤的程序,其邏輯流程圖如下圖所示。首先需要定義8個(gè)輸出端口,分別表示四行四列,然后先讓四行的I/O輸出高電平,四列的I/O輸出低電平,這是初始狀態(tài)。然后便是編寫消抖程序,當(dāng)有按鍵按下時(shí),首先便是進(jìn)行消抖,利用狀態(tài)機(jī)編寫消抖程序,識(shí)別判斷當(dāng)前狀態(tài)是否為抖動(dòng)。確定為按鍵按下后便開始判斷4行中哪一行的電平被拉低,這樣便能確定是哪一行的按鍵被按下,這里需要定義一個(gè)表示行的標(biāo)志位,用來標(biāo)志是哪一行按鍵按下。隨后便將四行的I/O輸出低電平,四列的I/O輸出高電平,然后便開始逐列判斷哪一列的電平被拉低,如此便能判斷按下按鍵的列坐標(biāo)。此處也需要定義一個(gè)表示列的標(biāo)志位。最后便是綜合判斷,通過行的標(biāo)志位和列的標(biāo)志位來判斷按下按鍵的行列坐標(biāo),如此便確定具體按下的按鍵。

圖片

接下來看程序(此處分享的程序?yàn)闆]有帶按鍵消抖的,只是按照矩陣鍵盤的掃描識(shí)別思路大致寫了一下),首先是端口的定義,定義四行四列,但是有一點(diǎn),原理上講解的是輸出電平,在這里這四個(gè)端口先定義為輸入狀態(tài),因?yàn)檫@不是頂層文件,在頂層文件中再定義為輸出。然后定義的key_lock為輸出控制端,我這里是利用矩陣鍵盤設(shè)置的密碼鎖,每一個(gè)矩陣按鍵對(duì)應(yīng)一個(gè)鍵值,當(dāng)按下四個(gè)按鍵對(duì)應(yīng)密碼正確時(shí),key_lock輸出高電平。key_row_flag為行標(biāo)志位,當(dāng)檢測(cè)到第一行的按鍵被按下時(shí)標(biāo)志位置1,當(dāng)?shù)谝恍械陌存I被按下時(shí)標(biāo)志位置2,同理,第三行置3第四行便置4。key_col_flag為列標(biāo)志位,原理與行標(biāo)志位一樣。然后row_flag與col_flag為行掃描標(biāo)志位與列掃描標(biāo)志位,當(dāng)row_flag為1時(shí)進(jìn)行行掃描,當(dāng)col_flag為1時(shí)進(jìn)行列掃描。key_output為輸出按下對(duì)應(yīng)按鍵的鍵值。key_row_col為當(dāng)前掃描狀態(tài),為1時(shí)表示行掃描結(jié)束,為2時(shí)表示列掃描結(jié)束,標(biāo)志列掃描結(jié)束后便開始獲取按鍵的鍵值。

圖片

接下來便開始看行掃描,行掃描和列掃描初始狀態(tài)為row_flag為1、col_flag為0。然后開始捕捉四行的引腳哪一行的引腳出現(xiàn)下降沿置0,若有一行的引腳被拉低置0時(shí),行標(biāo)志位立刻記下是第幾行被拉低,然后行列狀態(tài)標(biāo)志位便置1,行掃描標(biāo)志位row_flag清零,列掃描標(biāo)志位置1,開始進(jìn)入列掃描。

圖片

然后就是列掃描,在列掃描中與行掃描原理一樣,檢測(cè)每一列引腳的電平,若其中一列的電平被拉低,則列標(biāo)志位立刻記錄被拉低的列數(shù)為第幾列,然后恢復(fù)行掃描標(biāo)志位準(zhǔn)備進(jìn)入下一輪掃描,同時(shí)將列掃描標(biāo)志位清零,行列狀態(tài)標(biāo)志位置2,準(zhǔn)備進(jìn)入判斷按下按鍵鍵值模式。

圖片

接下來便是開始判斷按下按鍵的鍵值,因?yàn)槲疫@里只需要0~9這十個(gè)數(shù)字,而矩陣鍵盤有16個(gè)按鍵,所以寫的稍微簡單一點(diǎn)。從第一行第一列開始為1,第一行第二列為2,后面的依次類推。將第四列和第四行的鍵值全部設(shè)置的為0。這里進(jìn)入判斷鍵值的條件為行列標(biāo)志位key_row_col置2,也就是必須在列掃描完成之后才能進(jìn)入判斷。

圖片

這里在鍵值判斷完成之后便是將當(dāng)前獲取的鍵值存儲(chǔ)起來。這里因?yàn)樾辛袠?biāo)志位key_row_col比按鍵輸出鍵值key_output差了一個(gè)時(shí)鐘周期,所以賦值錯(cuò)誤,然后我便重新定義了一個(gè)寄存器key_row_col_r用來過渡一下。下面定義的one起初是為了在key_row_col為2時(shí)不重復(fù)賦值才寫的,是為了避免賦值后面輸出的按鍵鍵值,也就是20ns的周期中只進(jìn)去賦值一次,但是后面發(fā)現(xiàn)了時(shí)序相差一個(gè)時(shí)鐘周期便在else中加入了那段,還未解決便定義了寄存器key_row_col_r,這才得以解決。

圖片

圖片

圖片

最后便是設(shè)置密碼,輸出控制部分。此處將密碼設(shè)置為2653。

圖片

接下來便是波形仿真部分,在這里寫入2653每一個(gè)鍵值對(duì)應(yīng)按鍵的行列坐標(biāo)便可。仿真腳本文件寫好之后便可導(dǎo)入仿真。

圖片

圖片

圖片

圖片

03仿真波形

在仿真波形圖中根據(jù)寫入的對(duì)應(yīng)鍵值來觀察行、列標(biāo)志位中的行列坐標(biāo)是否正確,然后根據(jù)行列坐標(biāo)來觀察按鍵輸出鍵值key_output是否一致,key_temp系列的值為存儲(chǔ)的四位密碼,當(dāng)每一位與設(shè)置的密碼一致時(shí),key_lock輸出高電平。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600492
  • 原理圖
    +關(guān)注

    關(guān)注

    1289

    文章

    6239

    瀏覽量

    231991
  • 矩陣鍵盤
    +關(guān)注

    關(guān)注

    7

    文章

    205

    瀏覽量

    31384
  • 驅(qū)動(dòng)設(shè)計(jì)

    關(guān)注

    1

    文章

    109

    瀏覽量

    15248
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載19:4X4矩陣按鍵電路

    `勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載19:4X4矩陣按鍵電路特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUD FPGA
    發(fā)表于 11-03 18:46

    基于FPGA4x4鍵盤矩陣

    基于FPGA4x4鍵盤矩陣
    發(fā)表于 12-14 01:26

    【案例分享】基于FPGA4x4矩陣鍵盤驅(qū)動(dòng)調(diào)試

    首先找了本書看了下矩陣鍵盤驅(qū)動(dòng)原理,一般來說4x4矩陣鍵盤的原理圖如下,有四根行線和四根列線,
    發(fā)表于 07-09 08:30

    如何接口矩陣4x4鍵盤接口與spartan 3e fpga?

    嗨,請(qǐng)幫我接口矩陣4x4鍵盤接口與spartan 3e fpga,描述fpga上要使用的引腳和要寫入的代碼。
    發(fā)表于 11-11 11:51

    帶有stm32的宏鍵盤4x4矩陣

    描述帶有stm32的宏鍵盤4x4矩陣
    發(fā)表于 08-16 06:48

    4X4鍵盤程序

    4X4鍵盤程序 //-----------4X4鍵盤程序--------------// uchar keboard(void) { uchar xxa,yyb,i,key
    發(fā)表于 10-17 15:15 ?1329次閱讀

    4x4矩陣鍵盤程序及原理圖PCB

    4x4矩陣鍵盤程序及原理圖PCB,供大家下載。
    發(fā)表于 12-21 18:25 ?0次下載

    4x4矩陣鍵盤工作原理及掃描程序

    矩陣鍵盤的動(dòng)態(tài)掃描確實(shí)略顯復(fù)雜,不可能就是讀一個(gè)端口數(shù)據(jù),然后馬上就出來結(jié)果。這需要對(duì)依次每一行的按鍵進(jìn)行掃描、判斷,然后得出結(jié)果。本文主要介紹了矩陣鍵盤掃描以及
    的頭像 發(fā)表于 02-24 15:30 ?24.1w次閱讀
    <b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>工作原理及掃描程序

    使用單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤的程序免費(fèi)下載。
    發(fā)表于 08-20 17:31 ?12次下載
    使用單片機(jī)實(shí)現(xiàn)<b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的程序免費(fèi)下載

    使用51單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤的程序免費(fèi)下載。
    發(fā)表于 07-04 17:41 ?11次下載
    使用51單片機(jī)實(shí)現(xiàn)<b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的程序免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤的程序免費(fèi)下載。
    發(fā)表于 06-27 17:42 ?16次下載
    使用51單片機(jī)設(shè)計(jì)<b class='flag-5'>4X4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的程序免費(fèi)下載

    微雪電子4x4矩陣式按鍵模塊小鍵盤簡介

    4x4矩陣式按鍵模塊 16個(gè)按鍵 占用8個(gè)IO接口 提供測(cè)試程序 原理圖 型號(hào) 4x4 Keypad
    的頭像 發(fā)表于 12-30 09:27 ?2845次閱讀
    微雪電子<b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b>式按鍵模塊小<b class='flag-5'>鍵盤</b>簡介

    數(shù)碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費(fèi)下載。
    發(fā)表于 12-31 10:04 ?45次下載
    數(shù)碼管顯示<b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b><b class='flag-5'>矩陣</b>按鍵的仿真原理圖免費(fèi)下載

    4X4矩陣鍵盤的應(yīng)用仿真電路圖和keil程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是4X4矩陣鍵盤的應(yīng)用仿真電路圖和keil程序免費(fèi)下載。
    發(fā)表于 05-14 17:31 ?38次下載
    <b class='flag-5'>4X4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的應(yīng)用仿真電路圖和keil程序免費(fèi)下載

    帶有stm32的宏鍵盤4x4矩陣

    電子發(fā)燒友網(wǎng)站提供《帶有stm32的宏鍵盤4x4矩陣.zip》資料免費(fèi)下載
    發(fā)表于 07-28 14:19 ?5次下載
    帶有stm32的宏<b class='flag-5'>鍵盤</b><b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b>