在單片機(jī)系統(tǒng)中鍵盤中按鈕數(shù)量較多時(shí),為了減少I/O口的占用,常常將按鈕排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鈕加以連接。這樣,一個(gè)端口(如P1口)就能組成4*4=16個(gè)按鈕,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就能組成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。
<單片機(jī)矩陣式鍵盤接口技術(shù)及編程接口圖>
矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鈕沒有按下時(shí),所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識(shí)別及編程辦法如下所述。
矩陣式鍵盤的按鈕識(shí)別辦法
確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。
行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鈕識(shí)別辦法,如上圖所示鍵盤,介紹過程如下。
判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鈕之中。若所有列線均為高電平,則鍵盤中無鍵按下。
判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其辦法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。
下面給出一個(gè)具體的例程:
圖仍如上所示。8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個(gè)上拉電阻到正電源+5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的辦法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。
去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。辦法是對(duì)鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:
P1.7 1 1 1 0
P1.6 1 1 0 1
P1.5 1 0 1 1
P1.4 0 1 1 1
在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,不然有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值
為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。
《單片機(jī)矩陣式鍵盤接口技術(shù)及編程》
鍵盤掃描程序:
從以上分析得到單片機(jī)鍵盤掃描程序的流程圖如圖2所示。程序如下
SCAN: MOV P1,#0FH
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT1
SJMP NEXT3
NEXT1: ACALL D20MS
MOV A,#0EFH
NEXT2: MOV R1,A
MOV P1,A
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,KCODE;
MOV A,R1
SETB C
RLC A
JC NEXT2
NEXT3: MOV R0,#00H
RET
KCODE: MOV B,#0FBH
NEXT4: RRC A
INC B
JC NEXT4
MOV A,R1
SWAP A
NEXT5: RRC A
INC B
INC B
INC B
INC B
JC NEXT5
NEXT6: MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT6
MOV R0,#0FFH
RET
鍵盤處理程序就作這么一個(gè)簡(jiǎn)單的介紹,實(shí)際上,鍵盤、顯示處理是很復(fù)雜的,它一般占到一個(gè)應(yīng)用程序的大部份代碼,可見其重要性,但說到,這種復(fù)雜并不來自于單片機(jī)的本身,而是來自于操作者的習(xí)慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?,最后再去寫代碼,這樣,才能快速有效地寫好代碼。
上一篇:25課:單片機(jī)鍵盤接口程序設(shè)計(jì)
下一篇:27課:關(guān)于單片機(jī)的一些基本概念
推薦閱讀
史海拾趣
隨著公司規(guī)模的不斷擴(kuò)大,Analog Microwave Design公司開始將目光投向國(guó)際市場(chǎng)。為了更好地拓展海外業(yè)務(wù),公司制定了一套完善的國(guó)際化戰(zhàn)略。首先,公司加強(qiáng)了與國(guó)際知名企業(yè)的合作,通過技術(shù)交流和合作研發(fā),提升了公司的技術(shù)水平和國(guó)際影響力。其次,公司積極參加國(guó)際展覽和會(huì)議,展示公司的最新產(chǎn)品和技術(shù)成果,吸引了眾多海外客戶的關(guān)注。通過這些努力,公司的海外業(yè)務(wù)得到了快速發(fā)展,成為公司新的增長(zhǎng)點(diǎn)。
輝芒微(FMD)成立于2005年6月,作為一家新興的芯片設(shè)計(jì)企業(yè),其成立之初便專注于EEPROM(電可擦除可編程只讀存儲(chǔ)芯片)的研發(fā)與生產(chǎn)。在成立的同一年,輝芒微便成功實(shí)現(xiàn)了EEPROM芯片的量產(chǎn)銷售,這一里程碑式的成就為公司后續(xù)的快速發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。隨著技術(shù)的不斷積累和市場(chǎng)的持續(xù)拓展,輝芒微在集成電路設(shè)計(jì)領(lǐng)域逐漸嶄露頭角。
在電子元件領(lǐng)域,F(xiàn)rolyt Condensers & Elements GmbH起初是一家專注于電容器研發(fā)的小型制造商。2005年,公司研發(fā)團(tuán)隊(duì)成功開發(fā)出一種新型高性能鋁電解電容器,該電容器在耐高溫、長(zhǎng)壽命和低阻抗方面表現(xiàn)出色,迅速吸引了市場(chǎng)的關(guān)注。通過持續(xù)的技術(shù)創(chuàng)新和嚴(yán)格的品質(zhì)控制,F(xiàn)rolyt的電容器產(chǎn)品在汽車電子、通信設(shè)備等多個(gè)領(lǐng)域得到廣泛應(yīng)用,公司因此實(shí)現(xiàn)了市場(chǎng)份額的快速增長(zhǎng)。
面對(duì)電子行業(yè)日益增長(zhǎng)的定制化需求,F(xiàn)rolyt Condensers & Elements GmbH積極調(diào)整策略,提供從設(shè)計(jì)咨詢到產(chǎn)品生產(chǎn)的全方位定制化服務(wù)。公司建立了一支專業(yè)的技術(shù)團(tuán)隊(duì),能夠根據(jù)客戶的具體需求,快速響應(yīng)并設(shè)計(jì)出符合要求的電容器產(chǎn)品。這種高度定制化的服務(wù)模式贏得了眾多客戶的信賴和好評(píng),使得Frolyt在競(jìng)爭(zhēng)激烈的市場(chǎng)中脫穎而出。
FlexiPanel深知研發(fā)投入是企業(yè)持續(xù)發(fā)展的動(dòng)力源泉。因此,公司每年都將大量資金用于技術(shù)研發(fā)和創(chuàng)新項(xiàng)目的實(shí)施。通過不斷投入研發(fā),F(xiàn)lexiPanel在RF模塊領(lǐng)域取得了多項(xiàng)專利和技術(shù)突破,推動(dòng)了整個(gè)行業(yè)的產(chǎn)業(yè)升級(jí)和技術(shù)進(jìn)步。同時(shí),公司還積極參與國(guó)際技術(shù)交流與合作,引進(jìn)和吸收國(guó)際先進(jìn)技術(shù)和理念,為企業(yè)的長(zhǎng)遠(yuǎn)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
應(yīng)用技巧/由Rabbit2000微處理器構(gòu)成的網(wǎng)絡(luò)消防報(bào)警系統(tǒng) 介紹以Rabbit2000微處理器為核心新型網(wǎng)絡(luò)消防警控制系統(tǒng)的基本工作原理以及系統(tǒng)的軟硬件設(shè)計(jì)。該控制系統(tǒng)是采用模塊化和智能式分布技術(shù)而設(shè)計(jì)的,由于采用具有先進(jìn)通信能力微處理器控制,系統(tǒng)具有編程快捷、組網(wǎng)能力強(qiáng)、通信傳輸可靠、實(shí)時(shí)性高的特 ...… 查看全部問答∨ |
值得好好學(xué)習(xí),周立功講述其創(chuàng)業(yè)故事(完整版) 轉(zhuǎn) 盡管我們不能改變制度,也不一定能夠改變別人,但我們可以改變自己,因?yàn)闆]有人能夠阻止我們不斷進(jìn)步,如果失敗或者失意,那只能怪我們自己無能,怪我們自己不善于學(xué)習(xí),不能怪別人沒有給您機(jī)會(huì),更不能怪這個(gè)社會(huì)...... 我創(chuàng)業(yè)至今 ...… 查看全部問答∨ |
示波器數(shù)字示波器一直是工程師設(shè)計(jì)、調(diào)試產(chǎn)品的好幫手。但隨著計(jì)算機(jī)、半導(dǎo)體和通信技術(shù)的發(fā)展,電路系統(tǒng)的信號(hào)時(shí)鐘速度越來越快,信號(hào)上升時(shí)間也越來越短,導(dǎo)致因底層模擬信號(hào)完整性問題引發(fā)的數(shù)字錯(cuò)誤日益突出。針對(duì)這些新的測(cè)試挑戰(zhàn),示波器供應(yīng) ...… 查看全部問答∨ |
|
在工業(yè)控制和數(shù)據(jù)采集系統(tǒng)中,單片機(jī)以其低成本,編程靈活、方便,實(shí)時(shí)性強(qiáng)和具有一定的智能而得到了廣泛的應(yīng)用。然而,許多復(fù)雜任務(wù)的實(shí)現(xiàn),如人機(jī)對(duì)話、 任務(wù)的切換、算法的實(shí)現(xiàn)、大數(shù)據(jù)的運(yùn)算等,單片機(jī)就顯得有些力不從心,而 PC 機(jī)在這方面卻 ...… 查看全部問答∨ |
允許喚醒系統(tǒng)的中斷源,在哪個(gè)寄存器設(shè)置?? 為什么我有的外部中斷能喚醒,有的卻不能呢?? 還想問一下是不是有一個(gè)專門的寄存器能設(shè)置只允許某些外部中斷可以喚醒系統(tǒng)?? 看了三星的datasheet,貌似是不用設(shè)置任何一個(gè)EINT都能喚醒系統(tǒng),但我的系統(tǒng)卻不是這樣。 謝謝… 查看全部問答∨ |
WM60系統(tǒng) CPU:s3c2443 gprs模塊是MC52i 現(xiàn)在通過RIL,希望同時(shí)獲取信號(hào)強(qiáng)弱及IMEI,以及可以撥號(hào)上網(wǎng)。 現(xiàn)在可以獲取信號(hào)及IMEI,但GPRS撥號(hào)不上,一下是撥號(hào)中的debug message,那位DX可以幫忙指點(diǎn)一下 ####################Debug message## ...… 查看全部問答∨ |
老師讓做個(gè)多點(diǎn)溫度檢測(cè)通過RS232協(xié)議傳給上位機(jī)。就剩下最關(guān)鍵18B20的通過讀64位ROM中的48位序列號(hào)來確定具體的那個(gè)18B20了。我想盡快結(jié)項(xiàng)啊啊啊?。?! 哪位大俠能出來指點(diǎn)一二,給個(gè)參考代碼更是感激不盡,毫無頭緒中…………………………代碼啊 ...… 查看全部問答∨ |
我的程序是這么寫的,到open哪兒就打不開了.有人說是路徑的問題,可是我看不出來路徑有問題啊?哪位大俠幫幫忙吧! if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED))) return FA ...… 查看全部問答∨ |
一個(gè)RS232一個(gè)RS485接口,都是用來做什么收發(fā)器,電平邏輯轉(zhuǎn)化的,但這些都是純理論上的作用,我只想知道他們實(shí)際中能干什么,不要有太多專業(yè)術(shù)語,還有這2個(gè)有什么區(qū)別?… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會(huì)議時(shí)間安排
- 利用人工智能提升車間生產(chǎn)效率
- 方案分享 | ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測(cè)試方案
- 車載SerDes產(chǎn)業(yè)起飛!國(guó)產(chǎn)新品密集炸場(chǎng)
- 出貨量激增1.34倍! 5G車規(guī)模組成標(biāo)配,三大廠商新品同臺(tái)競(jìng)技
- 6月新能源市場(chǎng):零跑創(chuàng)新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規(guī)MCU的LED矩陣大燈應(yīng)用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計(jì)概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺(tái)硅驗(yàn)證
- Microchip有獎(jiǎng)問答 | 新品 MCU 獨(dú)立于內(nèi)核的外設(shè)(CIP)技術(shù)解密
- 泰克示波器,朝第二個(gè)百萬臺(tái)銷售紀(jì)錄前進(jìn)!
- TI 工業(yè)周系列研討會(huì)誠(chéng)邀您預(yù)報(bào)名參加,驚喜獎(jiǎng)不停
- 雙旦搶樓送祝?;顒?dòng)
- 注冊(cè)贏好禮~京東卡等您拿!
- 調(diào)查 | 電機(jī)驅(qū)動(dòng)的那些坎兒,我們幫你過!
- PI 電源小課堂:集成式半橋驅(qū)動(dòng)IC BridgeSwitch 2, 助力高效永磁同步電機(jī)逆變器的設(shè)計(jì)
- 月度原創(chuàng)精選評(píng)選2018年4月(總第3期)
- 3月26日上午10:00直播:開拓IoT社會(huì) 尼吉康的新蓄電裝置
- 一組數(shù)據(jù)看清美國(guó)半導(dǎo)體的真正實(shí)力
- 中國(guó)推出千億元科技基金 挑戰(zhàn)軟銀“愿景基金”
- 高通無線耳機(jī)SoC可節(jié)能50%
- 厲害!用意念就能讓機(jī)器人動(dòng)起來
- 第四代領(lǐng)導(dǎo)下,LG產(chǎn)業(yè)結(jié)構(gòu)或?qū)⒅亟M
- 神奇,硅+石墨烯可檢測(cè)冠狀病毒顆粒
- 用萬用表測(cè)量判斷結(jié)型場(chǎng)效應(yīng)管及主要參數(shù)方法
- 四針探測(cè)和萬用表探測(cè)電阻有什么不同?工作原理是什么?
- 如何用萬用表測(cè)量微波爐高壓二極管 淺談高壓二極管的檢測(cè)
- 小米11問市,充沛算力打響手機(jī)影像拐點(diǎn)之戰(zhàn)