實(shí)驗(yàn)七-矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料_第1頁(yè)
實(shí)驗(yàn)七-矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料_第2頁(yè)
實(shí)驗(yàn)七-矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料_第3頁(yè)
實(shí)驗(yàn)七-矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料_第4頁(yè)
實(shí)驗(yàn)七-矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料_第5頁(yè)
已閱讀5頁(yè),還剩107頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)七矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料(可以直接使用,可編輯完整版實(shí)用資料,歡迎下載)

一、實(shí)驗(yàn)設(shè)備實(shí)驗(yàn)七矩陣鍵盤(pán)應(yīng)用(完整版)實(shí)用資料(可以直接使用,可編輯完整版實(shí)用資料,歡迎下載)(1)PC一臺(tái)(2)單片機(jī)多功能試驗(yàn)板一塊(3)KEILuVision4.22集成開(kāi)發(fā)環(huán)境、STC-ISP燒錄軟件(電子工程基礎(chǔ)實(shí)驗(yàn)QQ群文件共享)二、實(shí)驗(yàn)?zāi)康模?)掌握矩陣鍵盤(pán)的基本原理。(2)了解“矩陣鍵盤(pán)掃描”電路原理圖,掌握矩陣鍵盤(pán)的應(yīng)用方法。(3)熟練使用矩陣鍵盤(pán)操作單片機(jī)上其它器件的方法。(4)復(fù)習(xí)上兩節(jié)的實(shí)驗(yàn)內(nèi)容(LED與數(shù)碼管)。三、實(shí)驗(yàn)要求與任務(wù)使用KEILuVision4軟件新建一個(gè)C51內(nèi)核工程,步驟如下:在”SoruceGroup1”新建C程序文件,文件名:main.c實(shí)驗(yàn)任務(wù):當(dāng)按下鍵時(shí),使用下面的顯示方法的選項(xiàng)之一來(lái)識(shí)別該按鍵:(1)點(diǎn)亮一組LED燈。(可事先設(shè)計(jì)16種組合)(2)在數(shù)碼管上顯示對(duì)應(yīng)的數(shù)字。(可事先約定哪個(gè)鍵盤(pán)對(duì)應(yīng)哪個(gè)數(shù)字)四、示例代碼五、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告文檔以word為格式,包含:1.請(qǐng)附上與單片機(jī)原理圖中矩陣鍵盤(pán)部分截圖2.請(qǐng)附上你完成部分的實(shí)驗(yàn)代碼。六、相關(guān)材料(1)矩陣鍵盤(pán)原理圖(2)獨(dú)立鍵盤(pán)當(dāng)獨(dú)立鍵盤(pán)與單片機(jī)相連時(shí),每一個(gè)按鍵都連接一個(gè)獨(dú)立的I/O口,這種鍵盤(pán)成為獨(dú)立鍵盤(pán)。優(yōu)點(diǎn):讀取按鍵數(shù)據(jù)方便。缺點(diǎn):由于單片機(jī)系統(tǒng)中I/O口數(shù)量有限,如果單片機(jī)需要較多的按鍵時(shí),這時(shí)使用獨(dú)立按鍵便會(huì)占用較多的I/O口資源。(3)矩陣鍵盤(pán)我們以4x4大小的矩陣鍵盤(pán)為例。4行4列可以排成將16個(gè)按鍵。第一行將每個(gè)按鍵的一端連接在一起構(gòu)成行線(xiàn),第一列將每個(gè)按鍵的另一端連接在一起構(gòu)成列線(xiàn),這樣一共有4行4列一共16個(gè)節(jié)點(diǎn)。通過(guò)程序掃描鍵盤(pán),即可檢測(cè)16個(gè)鍵。(4)矩陣鍵盤(pán)掃描原理檢測(cè)與該鍵對(duì)應(yīng)的I/O口是否為低電平。行線(xiàn)P20~P23為輸出線(xiàn),列線(xiàn)P24~P27為輸入線(xiàn)。檢測(cè)時(shí),先送一行為低電平,其余幾行為高電平,然后立即讀取各列是否有低電平。(5)矩陣鍵盤(pán)掃描流程圖單片機(jī)外接鍵盤(pán)電路一、原理簡(jiǎn)介鍵盤(pán)接口電路是單片機(jī)系統(tǒng)設(shè)計(jì)非常重要的一環(huán),作為人機(jī)交互界面里最常用的輸入設(shè)備。我們可以通過(guò)鍵盤(pán)輸入數(shù)據(jù)或命令來(lái)實(shí)現(xiàn)簡(jiǎn)單的人機(jī)通信。在設(shè)計(jì)鍵盤(pán)電路與程序前,我們需要了解鍵盤(pán)和組成鍵盤(pán)的按鍵的一些知識(shí)。1.按鍵的分類(lèi)一般來(lái)說(shuō),按鍵按照結(jié)構(gòu)原理可分為兩類(lèi),一類(lèi)是觸點(diǎn)式開(kāi)關(guān)按鍵,如機(jī)械式開(kāi)關(guān)、導(dǎo)電橡膠式開(kāi)關(guān)等;另一類(lèi)是無(wú)觸點(diǎn)式開(kāi)關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長(zhǎng)。目前,微機(jī)系統(tǒng)中最常見(jiàn)的是觸點(diǎn)式開(kāi)關(guān)按鍵(如本學(xué)習(xí)板上所采用按鍵)。按鍵按照接口原理又可分為編碼鍵盤(pán)與非編碼鍵盤(pán)兩類(lèi),這兩類(lèi)鍵盤(pán)的主要區(qū)別是識(shí)別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤(pán)主要是用硬件來(lái)實(shí)現(xiàn)對(duì)鍵的識(shí)別,非編碼鍵盤(pán)主要是由軟件來(lái)實(shí)現(xiàn)鍵盤(pán)的識(shí)別。全編碼鍵盤(pán)由專(zhuān)門(mén)的芯片實(shí)現(xiàn)識(shí)鍵及輸出相應(yīng)的編碼,一般還具有去抖動(dòng)和多鍵、竄鍵等保護(hù)電路,這種鍵盤(pán)使用方便,硬件開(kāi)銷(xiāo)大,一般的小型嵌入式應(yīng)用系統(tǒng)較少采用。非編碼鍵盤(pán)按連接方式可分為獨(dú)立式和矩陣式兩種,其它工作都主要由軟件完成。由于其經(jīng)濟(jì)實(shí)用,較多地應(yīng)用于單片機(jī)系統(tǒng)中(本學(xué)習(xí)板也采用非編碼鍵盤(pán))。2.按鍵的輸入原理在單片機(jī)應(yīng)用系統(tǒng)中,通常使用機(jī)械觸點(diǎn)式按鍵開(kāi)關(guān),其主要功能是把機(jī)械上的通斷轉(zhuǎn)換成為電氣上的邏輯關(guān)系。也就是說(shuō),它能提供標(biāo)準(zhǔn)的TTL邏輯電平,以便與通用數(shù)字系統(tǒng)的邏輯電平相容。此外,除了復(fù)位按鍵有專(zhuān)門(mén)的復(fù)位電路及專(zhuān)一的復(fù)位功能外,其它按鍵都是以開(kāi)關(guān)狀態(tài)來(lái)設(shè)置控制功能或輸入數(shù)據(jù)。當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下時(shí),計(jì)算機(jī)應(yīng)用系統(tǒng)應(yīng)完成該按鍵所設(shè)定的功能。因此,鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過(guò)程。對(duì)于一組鍵或一個(gè)鍵盤(pán),通過(guò)接口電路與單片機(jī)相連。單片機(jī)可以采用查詢(xún)或中斷方式了解有無(wú)按鍵輸入并檢查是哪一個(gè)按鍵按下,若有鍵按下則跳至相應(yīng)的鍵盤(pán)處理程序處去執(zhí)行,若無(wú)鍵按下則繼續(xù)執(zhí)行其他程序。3.按鍵的特點(diǎn)與去抖機(jī)械式按鍵再按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來(lái)。其抖動(dòng)過(guò)程如圖1(a)所示,抖動(dòng)時(shí)間的長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為5~10ms。從圖中可以看出,在觸點(diǎn)抖動(dòng)期間檢測(cè)按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯(cuò)。即按鍵一次按下或釋放被錯(cuò)誤地認(rèn)為是多次操作,這種情況是不允許出現(xiàn)的。為了克服按鍵觸點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)誤判,必須采取去抖動(dòng)措施,可從硬件、軟件兩方面予以考慮。一般來(lái)說(shuō),在鍵數(shù)較少時(shí),可采用硬件去抖,而當(dāng)鍵數(shù)較多時(shí),采用軟件去抖。(本學(xué)習(xí)板采用軟件去抖方式)。軟件去抖的流程圖如圖1(b)所示。圖1從按鍵的去抖流程圖我們可以知道,檢測(cè)到有鍵按下時(shí),應(yīng)延時(shí)等待一段時(shí)間(可調(diào)用一個(gè)5ms~10ms的延遲子程序),然后再次判斷按鍵是否被按下,若此時(shí)判斷按鍵仍被按下,則認(rèn)為按鍵有效,若此時(shí)判斷按鍵沒(méi)有被按下,說(shuō)明為按鍵抖動(dòng)或干擾,應(yīng)返回重新判斷。鍵盤(pán)真正被按下才可進(jìn)行相應(yīng)的處理程序,此時(shí)基本就算實(shí)現(xiàn)了按鍵輸入,進(jìn)一步的話(huà)可以判斷按鍵是否釋放。二、電路詳解電路圖如圖2所示。圖2從圖2中可知獨(dú)立式按鍵采用每個(gè)按鍵單獨(dú)占用一根I/O口線(xiàn)結(jié)構(gòu)。當(dāng)按下和釋放按鍵時(shí),輸入到單片機(jī)I/O端口的電平是不一樣的,因此可以根據(jù)不同端口電平的變化判斷是否有按鍵按下以及是哪一個(gè)按鍵按下。從圖2(a)中可以看出,按鍵和單片機(jī)引腳連接并加了上拉電阻,這樣當(dāng)沒(méi)有按鍵按下的時(shí)候,I/O輸入的電平是高電平,當(dāng)有按鍵按下的時(shí)候,I/O輸入的電平是低電平。雖然獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O口線(xiàn),因此,在按鍵較多時(shí),I/O口線(xiàn)浪費(fèi)較大。對(duì)于比較復(fù)雜的系統(tǒng)或按鍵比較多的場(chǎng)合,可以用到矩陣鍵盤(pán),圖2(b)中所示的為4×4的矩陣式鍵盤(pán),其他矩陣式鍵盤(pán)的設(shè)計(jì)方法類(lèi)似。4×4的矩陣式鍵盤(pán)由4根行線(xiàn)和4根列線(xiàn)交叉構(gòu)成,按鍵位于行列的交叉點(diǎn)上,這樣就構(gòu)成了16個(gè)按鍵。其中交叉點(diǎn)的行列線(xiàn)是不連接的,當(dāng)按鍵按下的時(shí)候,此交叉點(diǎn)處的行線(xiàn)和列線(xiàn)導(dǎo)通。圖2(b)行線(xiàn)通過(guò)上拉電阻接到VCC上。當(dāng)無(wú)鍵按下時(shí),行線(xiàn)處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線(xiàn)在交點(diǎn)導(dǎo)通,此時(shí),行線(xiàn)電平將由與此行線(xiàn)相連的列線(xiàn)電平?jīng)Q定。這是識(shí)別按鍵是否按下的關(guān)鍵。然而,矩陣鍵盤(pán)中的每條行線(xiàn)與4條列線(xiàn)相交,交點(diǎn)的按鍵按下與否均影響該鍵所在行線(xiàn)和列線(xiàn)的電平,各按鍵間將相互影響,鍵分析時(shí)必須將行線(xiàn)、列線(xiàn)信號(hào)配合起來(lái)作適當(dāng)處理,才能確定閉合鍵的位置。三、程序設(shè)計(jì)本文設(shè)計(jì)實(shí)例關(guān)鍵程序如下。獨(dú)立按鍵程序……#definekeyioP0(1)#definekey1P0_3(2)……keyio|=0X0F;(3)if(key1==0)(4){delay_nms(20);(5)if(key1==0)(6){while(key1==0);(7)return1;(8)}}程序說(shuō)明:(1)定義按鍵管腳。(2)定義按鍵連接管腳。(3)將按鍵連接管腳輸出高電平,從而接收輸入。(4)如果此時(shí)管腳所連接按鍵被按下。(5)延時(shí)一段時(shí)間,去抖作業(yè)。(6)如果此時(shí)按鍵仍然被按下,此時(shí)按鍵有效。(7)等待按鍵抬起,死循環(huán),如果按鍵一直按下則一直等待。(8)返回鍵值。矩陣鍵盤(pán)程序……#defineKEYIOP0(1)……codeksp[4]={0x7F,0xBF,0xDF,0xEF};(2)unsignedcharkeypad_scan()(3){charkey,i;(4)KEYIO=0xF0;(5)if(KEYIO!=0xF0)(6){for(i=0;i<=3;i++)(7){delaykey(10);(8)KEYIO=ksp[i];(9)delaykey(10);(10)if(KEYIO!=ksp[i])//不等于ox(11){delaykey(10);(12)key=KEYIO;(13)while(KEYIO==key);(14)return(key);(15)}}}}程序說(shuō)明:(1)定義矩陣鍵盤(pán)管腳。(2)將掃描時(shí)用到的管腳四種輸出電平狀態(tài)定義成一個(gè)數(shù)組。//確定第幾列數(shù)(3)按鍵掃描程序。(4)定義兩個(gè)臨時(shí)變量key,i。(5)讓鍵盤(pán)管腳的高四位輸出高電平,低四位為低電平,為掃描按鍵準(zhǔn)備。(6)如果此時(shí)管腳狀態(tài)電平發(fā)生變化。(7)將之前定義的數(shù)組中的值賦予管腳,開(kāi)始逐次掃描。(8)延時(shí)一段時(shí)間,去抖。(9)輸出掃描按鍵的電平。(10)再延時(shí)一段時(shí)間。(11)如果此時(shí)按鍵管腳電平依舊不是輸出的默認(rèn)電平,表示有鍵按下。(12)延時(shí)一段時(shí)間,讓電平穩(wěn)定。(13)讀取當(dāng)前按鍵管腳電平,即鍵值。(14)等待按鍵抬起,死循環(huán),如果按鍵一直按下則一直等待。(15)返回鍵值。四、調(diào)試要點(diǎn)與實(shí)驗(yàn)現(xiàn)象接好硬件,通過(guò)冷啟動(dòng)方式將程序所生成的。hex文件下載到單片機(jī)運(yùn)行后,打開(kāi)串口調(diào)試助手軟件,設(shè)置好波特率9600,復(fù)位單片機(jī),然后按下板上的4×4按鍵中的任意一個(gè),并注意觀串口調(diào)試助手上的顯示。(見(jiàn)圖3),可以觀察到在接收窗口有按鍵的數(shù)據(jù)顯示。圖3按鍵通過(guò)串口調(diào)試助手顯示界面此外,在本文所附的實(shí)驗(yàn)程序中,其中與串口通信中調(diào)用了發(fā)送字符函數(shù)與發(fā)送字符串函數(shù)。在沒(méi)有仿真器和遇到需要顯示一些提示信息的時(shí)候,可以采用串口打印的方式,這樣不僅直觀方便而且不增加其他成本。五、總結(jié)本文介紹了單片機(jī)外接鍵盤(pán)的工作原理并給出了實(shí)例,通過(guò)該文,我們可以知道一個(gè)完善的鍵盤(pán)控制程序應(yīng)具備以下功能:(1)檢測(cè)有無(wú)按鍵按下,并采取硬件或軟件措施,消除鍵盤(pán)按鍵機(jī)械觸點(diǎn)抖動(dòng)的影響。(2)有可靠的邏輯處理辦法。每次只處理一個(gè)按鍵,其間對(duì)任何按鍵的操作對(duì)系統(tǒng)不產(chǎn)生影響,且無(wú)論一次按鍵時(shí)間有多長(zhǎng),系統(tǒng)僅執(zhí)行一次按鍵功能程序。(3)準(zhǔn)確輸出按鍵值(或鍵號(hào)),以滿(mǎn)足按鍵功能要求。對(duì)于矩陣鍵盤(pán)而言,必須將行線(xiàn)、列線(xiàn)信號(hào)配合起來(lái)作適當(dāng)處理,才能確定閉合鍵的位置。此外,按鍵的掃描方式有多種,本文中所述的是程序掃描方式,另外常見(jiàn)的還有定時(shí)掃描方式和中斷掃描方式,這些方式均可以在本學(xué)習(xí)板上實(shí)現(xiàn),因此希望讀者結(jié)合前幾講的知識(shí),自行進(jìn)行程序的編寫(xiě)與調(diào)試。下講將講述單片機(jī)動(dòng)態(tài)驅(qū)動(dòng)數(shù)碼管原理與實(shí)例,敬請(qǐng)期待。矩陣鍵盤(pán)是單片機(jī)編程中所使用的鍵盤(pán).0b

|;}7[1m9M

z

1.矩陣式鍵盤(pán)的結(jié)構(gòu)與工作原理0c;J-@/M"O)y"X/|6}7k

在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I(mǎi)/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤(pán)中,每條水平線(xiàn)和垂直線(xiàn)在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線(xiàn)用于鍵盤(pán)多出了一倍,而且線(xiàn)數(shù)越多,區(qū)別越明顯,比如再多加一條線(xiàn)就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線(xiàn)則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。+D3p1l5K0_5j

矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線(xiàn)通過(guò)電阻接正電源,并將行線(xiàn)所接的單片機(jī)的I/O口作為輸出端,而列線(xiàn)所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線(xiàn)輸出是低電平,一旦有鍵按下,則輸入線(xiàn)就會(huì)被拉低,這樣,通過(guò)讀入輸入線(xiàn)的狀態(tài)就可得知是否有鍵按下了。具體的識(shí)別及編程方法如下所述。3?8h4S"s;W5r

2、矩陣式鍵盤(pán)的按鍵識(shí)別方法

確定矩陣式鍵盤(pán)上何鍵被按下介紹一種“行掃描法”。

i$I4W,J!v&C

行掃描法行掃描法又稱(chēng)為逐行(或列)掃描查詢(xún)法,是一種最常用的按鍵識(shí)別方法,如上圖所示鍵盤(pán),介紹過(guò)程如下。

1、判斷鍵盤(pán)中有無(wú)鍵按下將全部行線(xiàn)Y0-Y3置低電平,然后檢測(cè)列線(xiàn)的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線(xiàn)與4根行線(xiàn)相交叉的4個(gè)按鍵之中。若所有列線(xiàn)均為高電平,則鍵盤(pán)中無(wú)鍵按下。

2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線(xiàn)置為低電平,即在置某根行線(xiàn)為低電平時(shí),其它線(xiàn)為高電平。在確定某根行線(xiàn)位置為低電平后,再逐行檢測(cè)各列線(xiàn)的電平狀態(tài)。若某列為低,則該列線(xiàn)與置為低電平的行線(xiàn)交叉處的按鍵就是閉合的按鍵。

c9n6O.u6S

e

],t:^

下面給出一個(gè)具體的例子:6L'G#^:c$t

圖仍如上所示。8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線(xiàn)接到P1口的低4位,鍵盤(pán)的行線(xiàn)接到P1口的高4位。列線(xiàn)P1.0-P1.3分別接有4個(gè)上拉電阻到正電源+5V,并把列線(xiàn)P1.0-P1.3設(shè)置為輸入線(xiàn),行線(xiàn)P1.4-P.17設(shè)置為輸出線(xiàn)。4根行線(xiàn)和4根列線(xiàn)形成16個(gè)相交點(diǎn)。

1、檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,否則有鍵閉合。

2、去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。

3、若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤(pán)的行線(xiàn)進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:

P1.71110

P1.61101.L2m5?4g1r

P1.51011

P1.40111

在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值2O;w4w0C#}5[)D

4、為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。3u#\3u!Y!D"{5m

鍵盤(pán)掃描程序:

從以上分析得到鍵盤(pán)掃描程序的流程圖如圖2所示。程序如下

SCAN:MOVP1,#0FH

MOVA,P1

ANLA,#0FH!p*h

[4v&^&k

CJNEA,#0FH,NEXT1

SJMPNEXT3

NEXT1:ACALLD20MS$K9s*{)?"n/S$f2\

MOVA,#0EFH

NEXT2:MOVR1,A

MOVP1,A3`,h8q&}-P:]

C,_9X2C

MOVA,P1&Z/K-_)B8e'q

H7K

ANLA,#0FH

CJNEA,#0FH,KCODE;

MOVA,R1&{,J$\)x$t$|0m

SETBC

RLCA

JCNEXT2

NEXT3:MOVR0,#00H

RET

KCODE:MOVB,#0FBH

NEXT4:RRCA2v6E(W6A&L'o&T

INCB

JCNEXT40L8d/b

C:y,U"{;?8G'g

MOVA,R1

SWAPA8F2v%`"k"f

?5L;|(Y"n

NEXT5:RRCA

INCB8Q/C1x9x5e

INCB*j6I'b+n/I8z

INCB(r(]0N/b#~

INCB7j&t7T+G9a8L,{&m

JCNEXT5

NEXT6:MOVA,P18`/e0u3J9O$?*c3\#c%a!|

ANLA,#0FH

CJNEA,#0FH,NEXT6"^

o:r9k3J;R

MOVR0,#0FFH

RET6H2f&N3x+Y$D!R

鍵盤(pán)處理程序就作這么一個(gè)簡(jiǎn)單的介紹,實(shí)際上,鍵盤(pán)、顯示處理是很復(fù)雜的,它往往占到一個(gè)應(yīng)用程序的大部份代碼,可見(jiàn)其重要性,但說(shuō)到,這種復(fù)雜并不來(lái)自于單片機(jī)的本身,而是來(lái)自于操作者的習(xí)慣等等問(wèn)題,因此,在編寫(xiě)鍵盤(pán)處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?lái),最后再去寫(xiě)代碼,這樣,才能快速有效地寫(xiě)好代碼。.E-J7k8K"v,Q:u

鍵盤(pán)是由一組規(guī)則排列的按鍵組成,一個(gè)按鍵實(shí)際上是一個(gè)開(kāi)關(guān)元件,也就是說(shuō)鍵盤(pán)是一組規(guī)則排列的開(kāi)關(guān)。1i"_/D1l/z%\)N

鍵盤(pán)工作原理

1.按鍵的分類(lèi)7V6B8E$k&t:m*i

按鍵按照結(jié)構(gòu)原理可分為兩類(lèi),一類(lèi)是觸點(diǎn)式開(kāi)關(guān)按鍵,如機(jī)械式開(kāi)關(guān)、導(dǎo)電橡膠式開(kāi)關(guān)等;另一類(lèi)是無(wú)觸點(diǎn)開(kāi)關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長(zhǎng)。目前,微機(jī)系統(tǒng)中最常見(jiàn)的是觸點(diǎn)式開(kāi)關(guān)按鍵。

按鍵按照接口原理可分為編碼鍵盤(pán)與非編碼鍵盤(pán)兩類(lèi),這兩類(lèi)鍵盤(pán)的主要區(qū)別是識(shí)別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤(pán)主要是用硬件來(lái)實(shí)現(xiàn)對(duì)鍵的識(shí)別,非編碼鍵盤(pán)主要是由軟件來(lái)實(shí)現(xiàn)鍵盤(pán)的定義與識(shí)別。

全編碼鍵盤(pán)能夠由硬件邏輯自動(dòng)提供與鍵對(duì)應(yīng)的編碼,此外,一般還具有去抖動(dòng)和多鍵、竄鍵保護(hù)電路,這種鍵盤(pán)使用方便,但需要較多的硬件,價(jià)格較貴,一般的單片機(jī)應(yīng)用系統(tǒng)較少采用。非編碼鍵盤(pán)只簡(jiǎn)單地提供行和列的矩陣,其它工作均由軟件完成。由于其經(jīng)濟(jì)實(shí)用,較多地應(yīng)用于單片機(jī)系統(tǒng)中。下面將重點(diǎn)介紹非編碼鍵盤(pán)接口。

2.鍵輸入原理

在單片機(jī)應(yīng)用系統(tǒng)中,除了復(fù)位按鍵有專(zhuān)門(mén)的復(fù)位電路及專(zhuān)一的復(fù)位功能外,其它按鍵都是以開(kāi)關(guān)狀態(tài)來(lái)設(shè)置控制功能或輸入數(shù)據(jù)。當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下時(shí),計(jì)算機(jī)應(yīng)用系統(tǒng)應(yīng)完成該按鍵所設(shè)定的功能,鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過(guò)程。'["s9b8f)@9o5]

對(duì)于一組鍵或一個(gè)鍵盤(pán),總有一個(gè)接口電路與CPU相連。CPU可以采用查詢(xún)或中斷方式了解有無(wú)將鍵輸入并檢查是哪一個(gè)鍵按下,將該鍵號(hào)送入累加器ACC,然后通過(guò)跳轉(zhuǎn)指令轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完后再返回主程序。

3.按鍵結(jié)構(gòu)與特點(diǎn)

微機(jī)鍵盤(pán)通常使用機(jī)械觸點(diǎn)式按鍵開(kāi)關(guān),其主要功能是把機(jī)械上的通斷轉(zhuǎn)換成為電氣上的邏輯關(guān)系。也就是說(shuō),它能提供標(biāo)準(zhǔn)的TTL邏輯電平,以便與通用數(shù)字系統(tǒng)的邏輯電平相容。

機(jī)械式按鍵再按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來(lái)。其抖動(dòng)過(guò)程如圖7.2所示,抖動(dòng)時(shí)間的長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為5~10ms。7b2n0J*s'U&J

在硬件上可采用在鍵輸出端加R-S觸發(fā)器(雙穩(wěn)態(tài)觸發(fā)器)或單穩(wěn)態(tài)觸發(fā)器構(gòu)成去抖動(dòng)電路,圖7.3是一種由R-S觸發(fā)器構(gòu)成的去抖動(dòng)電路,當(dāng)觸發(fā)器一旦翻轉(zhuǎn),觸點(diǎn)抖動(dòng)不會(huì)對(duì)其產(chǎn)生任何影響。)}+e&M&f

`1l:p4V4|

電路工作過(guò)程如下:按鍵未按下時(shí),a=0,b=1,輸出Q=1,按鍵按下時(shí),因按鍵的機(jī)械彈性作用的影響,使按鍵產(chǎn)生抖動(dòng),當(dāng)開(kāi)關(guān)沒(méi)有穩(wěn)定到達(dá)b端時(shí),因與非門(mén)2輸出為0反饋到與非門(mén)1的輸入端,封鎖了與非門(mén)1,雙穩(wěn)態(tài)電路的狀態(tài)不會(huì)改變,輸出保持為1,輸出Q不會(huì)產(chǎn)生抖動(dòng)的波形。當(dāng)開(kāi)關(guān)穩(wěn)定到達(dá)b端時(shí),因a=1,b=0,使Q=0,雙穩(wěn)態(tài)電路狀態(tài)發(fā)生翻轉(zhuǎn)。當(dāng)釋放按鍵時(shí),在開(kāi)關(guān)未穩(wěn)定到達(dá)a端時(shí),因Q=0,封鎖了與非門(mén)2,雙穩(wěn)態(tài)電路的狀態(tài)不變,輸出Q保持不變,消除了后沿的抖動(dòng)波形。當(dāng)開(kāi)關(guān)穩(wěn)定到達(dá)b端時(shí),因a=0,b=0,使Q=1,雙穩(wěn)態(tài)電路狀態(tài)發(fā)生翻轉(zhuǎn),輸出Q重新返回原狀態(tài)。由此右圖雙穩(wěn)態(tài)去抖電路5y9X;@0X4Q3c'y(H2v3v

可見(jiàn),鍵盤(pán)輸出經(jīng)雙穩(wěn)態(tài)電路之后,輸出已變?yōu)橐?guī)范的矩形方波。'V1@1P.r(t#\.c

_

軟件上采取的措施是:在檢測(cè)到有按鍵按下時(shí),執(zhí)行一個(gè)10ms左右(具體時(shí)間應(yīng)視所使用的按鍵進(jìn)行調(diào)整)的延時(shí)程序后,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確認(rèn)該鍵處于閉合狀態(tài);同理,在檢測(cè)到該鍵釋放后,也應(yīng)采用相同的步驟進(jìn)行確認(rèn),從而可消除抖動(dòng)的影響。

4.按鍵編碼

一組按鍵或鍵盤(pán)都要通過(guò)I/O口線(xiàn)查詢(xún)按鍵的開(kāi)關(guān)狀態(tài)。根據(jù)鍵盤(pán)結(jié)構(gòu)的不同,采用不同的編碼。無(wú)論有無(wú)編碼,以及采用什么編碼,最后都要轉(zhuǎn)換成為與累加器中數(shù)值相對(duì)應(yīng)的鍵值,以實(shí)現(xiàn)按鍵功能程序的跳轉(zhuǎn)。

5.編制鍵盤(pán)程序/K4N4Y;H;o)g

一個(gè)完善的鍵盤(pán)控制程序應(yīng)具備以下功能:

(1)檢測(cè)有無(wú)按鍵按下,并采取硬件或軟件措施,消除鍵盤(pán)按鍵機(jī)械觸點(diǎn)抖動(dòng)的影響。5h8[,B$D8G/@;c

(2)有可靠的邏輯處理辦法。每次只處理一個(gè)按鍵,其間對(duì)任何按鍵的操作對(duì)系統(tǒng)不產(chǎn)生影響,且無(wú)論一次按鍵時(shí)間有多長(zhǎng),系統(tǒng)僅執(zhí)行一次按鍵功能程序。

(3)準(zhǔn)確輸出按鍵值(或鍵號(hào)),以滿(mǎn)足跳轉(zhuǎn)指令要求。

獨(dú)立式按鍵

^+F/C7[:C5h6B#x7V-|

單片機(jī)控制系統(tǒng)中,往往只需要幾個(gè)功能鍵,此時(shí),可采用獨(dú)立式按鍵結(jié)構(gòu)。

1.獨(dú)立式按鍵結(jié)構(gòu)9u+L

K5\*x)q%i

獨(dú)立式按鍵是直接用I/O口線(xiàn)構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每個(gè)按鍵單獨(dú)占用一根I/O

左圖獨(dú)立式按鍵電路

口線(xiàn),每個(gè)按鍵的工作不會(huì)影響其它I/O口線(xiàn)的狀態(tài)。獨(dú)立式按鍵的典型應(yīng)用如圖7.4所示。*X8f'y+Q,[7F-l

獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O口線(xiàn),因此,在按鍵較多時(shí),I/O口線(xiàn)浪費(fèi)較大,不宜采用。6Z#m

M*q,s2Y#e/z1F6p2S

圖7.4中按鍵輸入均采用低電平有效,此外,上拉電阻保證了按鍵斷開(kāi)時(shí),I/O口線(xiàn)有確定的高電平。當(dāng)I/O口線(xiàn)內(nèi)部有上拉電阻時(shí),外電路可不接上拉電阻。

2.獨(dú)立式按鍵的軟件結(jié)構(gòu)1_*b$x

T/z5M2G#l:v&T

獨(dú)立式按鍵軟件常采用查詢(xún)式結(jié)構(gòu)。先逐位查詢(xún)每根I/O口線(xiàn)的輸入狀態(tài),如某一根I/O口線(xiàn)輸入為低電平,則可確認(rèn)該I/O口線(xiàn)所對(duì)應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。圖7.4中的I/O口采用P1口,請(qǐng)讀者自行編制相應(yīng)的軟件。1^!@-w7o:r9}6s

7.1.3矩陣式按鍵

單片機(jī)系統(tǒng)中,若使按鍵較多時(shí),通常采用矩陣式(也稱(chēng)行列式)鍵盤(pán)。

1.矩陣式鍵盤(pán)的結(jié)構(gòu)及原理

矩陣式鍵盤(pán)由行線(xiàn)和列線(xiàn)組成,按鍵位于行、列線(xiàn)的交叉點(diǎn)上,其結(jié)構(gòu)如下圖所示。#d.n$m(g5G7S

由圖可知,一個(gè)4×4的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)含有16個(gè)按鍵的鍵盤(pán),顯然,在按鍵數(shù)量較多時(shí),矩陣式鍵盤(pán)較之獨(dú)立式按鍵鍵盤(pán)要節(jié)省很多I/O口。

矩陣式鍵盤(pán)中,行、列線(xiàn)分別連接到按鍵開(kāi)關(guān)的兩端,行線(xiàn)通過(guò)上拉電阻接到+5V上。當(dāng)無(wú)鍵按下時(shí),行線(xiàn)處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線(xiàn)將導(dǎo)通,此時(shí),行線(xiàn)電平將由與此行線(xiàn)相連的列線(xiàn)電平?jīng)Q定。這是識(shí)別按鍵是否按下的關(guān)鍵。然而,矩陣鍵盤(pán)中的行線(xiàn)、列線(xiàn)和多個(gè)鍵相連,各按鍵按下與否均影響該鍵所在行線(xiàn)和列線(xiàn)的電平,各按鍵間將相互影響,因此,必須將行線(xiàn)、列線(xiàn)信號(hào)配合起來(lái)作適當(dāng)處理,才能確定閉合鍵的位置。2L%F$r:]'x0N

2.矩陣式鍵盤(pán)按鍵的識(shí)別

識(shí)別按鍵的方法很多,其中,最常見(jiàn)的方法是掃描法。下面以圖7.5中8號(hào)鍵的識(shí)別為例來(lái)說(shuō)明掃描法識(shí)別按鍵的過(guò)程。

按鍵按下時(shí),與此鍵相連的行線(xiàn)與列線(xiàn)導(dǎo)通,行線(xiàn)在無(wú)鍵按下時(shí)處在高電平,顯然,如果讓所有的列線(xiàn)也處在高電平,那么,按鍵按下與否不會(huì)引起行線(xiàn)電平的變化,因此,必須使所有列線(xiàn)處在低電平,只有這樣,當(dāng)有鍵按下時(shí),該鍵所在的行電平才會(huì)由高電平變?yōu)榈碗娖?。CPU根據(jù)行電平的變化,便能判定相應(yīng)的行有鍵按下。8號(hào)鍵按下時(shí),第2行一定為低電平,然而,第2行為低電平時(shí),能否肯定是8號(hào)鍵按下呢?回答是否定的,因?yàn)?、10、11號(hào)鍵按下同樣使第2行為低電平。為進(jìn)一步確定具體鍵,不能使所有列線(xiàn)在同一時(shí)刻都處在低電平,可在某一時(shí)刻只讓一條列線(xiàn)處于低電平,其余列線(xiàn)均處于高電平,另一時(shí)刻,讓下一列處在低電平,依此循環(huán),這種依次輪流每次選通一列的工作方式稱(chēng)為鍵盤(pán)掃描。采用鍵盤(pán)掃描后,再來(lái)觀察8號(hào)鍵按下時(shí)的工作過(guò)程,當(dāng)?shù)?列處于低電平時(shí),第2行處于低電平,而第1、2、3列處于低電平時(shí),第2行卻處在高電平,由此可判定按下的鍵應(yīng)是第2行與第0列的交叉點(diǎn),即8號(hào)鍵。

3.鍵盤(pán)的編碼2D,z&z,\:I.T1s1H2W*H9g

對(duì)于獨(dú)立式按鍵鍵盤(pán),因按鍵數(shù)量少,可根據(jù)實(shí)際需要靈活編碼。對(duì)于矩陣式鍵盤(pán),按鍵的位置由行號(hào)和列號(hào)唯一確定,因此可分別對(duì)行號(hào)和列號(hào)進(jìn)行二進(jìn)制編碼,然后將兩值合成一個(gè)字節(jié),高4位是行號(hào),低4位是列號(hào)。如圖7.5中的8號(hào)鍵,它位于第2行,第0列,因此,其鍵盤(pán)編碼應(yīng)為20H。采用上述編碼對(duì)于不同行的鍵離散性較大,不利于散轉(zhuǎn)指令對(duì)按鍵進(jìn)行處理。因此,可采用依次排列鍵號(hào)的方式對(duì)安排進(jìn)行編碼。以圖7.5中的4×4鍵盤(pán)為例,可將鍵號(hào)編碼為:01H、02H、03H…0EH、0FH、10H等16個(gè)鍵號(hào)。編碼相互轉(zhuǎn)換可通過(guò)計(jì)算或查表的方法實(shí)現(xiàn)。"a1c/r1R0c+?7d(w)g)n"F

4.鍵盤(pán)的工作方式.k3d1W/p#}!N$Z,N1n

在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤(pán)掃描只是CPU的工作內(nèi)容之一。CPU對(duì)鍵盤(pán)的響應(yīng)取決于鍵盤(pán)的工作方式,鍵盤(pán)的工作方式應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作狀況而定,其選取的原則是既要保證CPU能及時(shí)響應(yīng)按鍵操作,又不要過(guò)多占用CPU的工作時(shí)間。通常,鍵盤(pán)的工作方式有三種,即編程掃描、定時(shí)掃描和中斷掃描。

1)編程掃描方式&i$U*H4g4P0Y0l%y

編程掃描方式是利用CPU完成其它工作的空余調(diào)用鍵盤(pán)掃描子程序來(lái)響應(yīng)鍵盤(pán)輸入的要求。在執(zhí)行鍵功能程序時(shí),CPU不再響應(yīng)鍵輸入要求,直到CPU重新掃描鍵盤(pán)為止。'c%h$H)}:{9}

鍵盤(pán)掃描程序一般應(yīng)包括以下內(nèi)容:

(1)判別有無(wú)鍵按下。/B#g"c$B*e:T:C0B/Y

(2)鍵盤(pán)掃描取得閉合鍵的行、列值。

(3)用計(jì)算法或查表法得到鍵值。4e0j!h0X9`2Y4b;L

(4)判斷閉合鍵是否釋放,如沒(méi)釋放則繼續(xù)等待。.I7s%{0r*`'v4j(Q0u,{

(5)將閉合鍵鍵號(hào)保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。:^'}+\&v&D8o1l

圖7.68155擴(kuò)展I/O口組成的矩陣鍵盤(pán)#@4\*v&T5H:j'h+Q$^

圖7.6是一個(gè)4×8矩陣鍵盤(pán)電路,由圖可知,其與單片機(jī)的接口采用8155擴(kuò)展I/O芯片,鍵盤(pán)采用編程掃描方式工作,8155C口的低4位輸入行掃描信號(hào),A口輸出8位列掃描信號(hào),二者均為低電平有效。8155的IO/與P2.0相連,與P2.1相連,、分別與單片機(jī)的、相連。由此可確定8155的口地址為:*m,P)Z0j#M)Q-t9g:L#F

命令/狀態(tài)口:0100H(P2未用口線(xiàn)規(guī)定為0)

A口:0101H$j:O!w)X9y(x9y/Z5K'G+t

B口:0102H)c$g8G)}

Q'N&b

C口:0103H

圖7.6中,A口為基本輸出口,C口為基本輸入口,因此,方式命令控制字應(yīng)設(shè)置為43H。在編程掃描方式下,鍵盤(pán)掃描子程序應(yīng)完成如下幾個(gè)功能:2x#`*u.~9A#{%m

(1)判斷有無(wú)鍵按下。其方法為:A口輸出全為0,讀C口狀態(tài),若PC0~PC3全為1,則說(shuō)明無(wú)鍵按下;若不全為1,則說(shuō)明有鍵按下。

(2)消除按鍵抖動(dòng)的影響。其方法為:在判斷有鍵按下后,用軟件延時(shí)的方法延時(shí)10ms后,再判斷鍵盤(pán)狀態(tài),如果仍為有鍵按下?tīng)顟B(tài),則認(rèn)為有一個(gè)按鍵按下,否則當(dāng)作按鍵抖動(dòng)來(lái)處理。

(3)求按鍵位置。根據(jù)前述鍵盤(pán)掃描法,進(jìn)行逐列置0掃描。圖7.6中,32個(gè)鍵的鍵值分布如下(鍵值由4位16進(jìn)制數(shù)碼組成,前兩位是列的值,即A口數(shù)據(jù),后兩位是行的值,即C口數(shù)據(jù),X為任意值):

FEXEFDXEFBXEF7XEEFXEDFXEBFXE7FXE

FEXDFDXDFBXDF7XDEFXDDFXDBFXD7FXD

FEXBFDXBFBXBF7XBEFXBDFXBBFXB7FXB9`.g4]#p!J"^/q

FEX7FDX7FBX7F7X7EFX7DFX7BFX77FX79b$g9I#^-y,g0B

按鍵鍵值確定后,即可確定按鍵位置。相應(yīng)的鍵號(hào)可根據(jù)下述公式進(jìn)行計(jì)算:鍵號(hào)=行首鍵號(hào)+列號(hào)。圖7.6中,每行的行首可給以固定的編號(hào)0(00H),8(08H),16(10H),24(18H),列號(hào)依列線(xiàn)順序?yàn)?~7。

(4)判別閉合的鍵是否釋放。按鍵閉合一次只能進(jìn)行一次功能操作,因此,等按鍵釋放后才能根據(jù)鍵號(hào)執(zhí)行相應(yīng)的功能鍵操作。

鍵盤(pán)掃描程序流程圖請(qǐng)參閱實(shí)訓(xùn)7圖7.1中的主程序流程圖。

鍵盤(pán)掃描程序請(qǐng)參閱實(shí)訓(xùn)7源程序中的鍵盤(pán)查詢(xún)程序、鍵盤(pán)掃描程序和按鍵查詢(xún)子程序三部分。*P,E'e)a-O;g*|

實(shí)訓(xùn)7是矩陣式鍵盤(pán)的一種典型應(yīng)用,與圖7.6相比,8155入口地址不同,矩陣鍵盤(pán)列數(shù)不同,再就是為兼顧鍵盤(pán)和顯示,防抖所用的延時(shí)子程序由顯示子程序替代。

2)定時(shí)掃描方式:

定時(shí)掃描方式就是每隔一段時(shí)間對(duì)鍵盤(pán)掃描一次,它利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間(例如10ms)的定時(shí),當(dāng)定時(shí)時(shí)間到就產(chǎn)生定時(shí)器溢出中斷,CPU響應(yīng)中斷后對(duì)鍵盤(pán)進(jìn)行掃描,并在有鍵按下時(shí)識(shí)別出該鍵,再執(zhí)行該鍵的功能程序。定時(shí)掃描方式的硬件電路與編程掃描方式相同,程序流程圖如下圖所示。

圖中,標(biāo)志1和標(biāo)志2是在單片機(jī)內(nèi)部RAM的位尋址區(qū)設(shè)置的兩個(gè)標(biāo)志位,標(biāo)志1為去抖動(dòng)標(biāo)志位,標(biāo)志2為識(shí)別完按鍵的標(biāo)志位。初始化時(shí)將這兩個(gè)標(biāo)志位設(shè)置為0,執(zhí)行中斷服務(wù)程序時(shí),首先判別有無(wú)鍵閉合,若無(wú)鍵閉合,將標(biāo)志1和標(biāo)志2置0后返回;若有鍵閉合,先檢查標(biāo)志1,當(dāng)標(biāo)志1為0時(shí),說(shuō)明還未進(jìn)行去抖動(dòng)處理,此時(shí)置位標(biāo)志1,并中斷返回。由于中斷返回后要經(jīng)過(guò)10ms后才會(huì)再次中斷,相當(dāng)于延時(shí)了10ms,因此,程序無(wú)須再延時(shí)。下次中斷時(shí),因標(biāo)志1為1,CPU再檢查標(biāo)志2,如標(biāo)志2為0說(shuō)明還未進(jìn)行按鍵的識(shí)別處理,這時(shí),CPU先置位標(biāo)志2,然后進(jìn)行按鍵識(shí)別處理,再執(zhí)行相應(yīng)的按鍵功能子程序,最后,中斷返回。如標(biāo)志2已經(jīng)為1,則說(shuō)明此次按鍵已做過(guò)識(shí)別處理,只是還未釋放按鍵,當(dāng)按鍵釋放后,在下一次中斷服務(wù)程序中,標(biāo)志1和標(biāo)志2又重新置0,等待下一次按鍵。

3)中斷掃描方式"B!m

k+u;A

采用上述兩種鍵盤(pán)掃描方式時(shí),無(wú)論是否按鍵,CPU都要定時(shí)掃描鍵盤(pán),而單片機(jī)應(yīng)用系統(tǒng)工作時(shí),并非經(jīng)常需要鍵盤(pán)輸入,因此,CPU經(jīng)常處于空掃描狀態(tài),為提高CPU工作效率,可采用中斷掃描工作方式。其工作過(guò)程如下:當(dāng)無(wú)鍵按下時(shí),CPU處理自己的工作,當(dāng)有鍵按下時(shí),產(chǎn)生中斷請(qǐng)求,CPU轉(zhuǎn)去執(zhí)行鍵盤(pán)掃描子程序,并識(shí)別鍵號(hào)。

左圖是一種簡(jiǎn)易鍵盤(pán)接口電路,該鍵盤(pán)是由8051P1口的高、低字節(jié)構(gòu)成的4×4鍵盤(pán)。鍵盤(pán)的列線(xiàn)與P1口的高4位相連,鍵盤(pán)的行線(xiàn)與P1口的低4位相連,因此,P1.4~P1.7是鍵輸出線(xiàn),P1.0~P1.3是掃描輸入線(xiàn)。圖中的4輸入與門(mén)用于產(chǎn)生按鍵中斷,其輸入端與各列線(xiàn)相連,再通過(guò)上拉電阻接至+5V電源,輸出端接至8051的外部中斷輸入端。具體工作如下:當(dāng)鍵盤(pán)無(wú)鍵按下時(shí),與門(mén)各輸入端均為高電平,保持輸出端為高電平;當(dāng)有鍵按下時(shí),端為低電平,向CPU申請(qǐng)中斷,若CPU開(kāi)放外部中斷,則會(huì)響應(yīng)中斷請(qǐng)求,轉(zhuǎn)去執(zhí)行鍵盤(pán)掃描子程序。.W0t!v+z1i.K4Z.^

這是初學(xué)時(shí)寫(xiě)的最簡(jiǎn)單、最詳細(xì)、效率最高的矩陣鍵盤(pán)掃描程序,只用了四條常用命令(MOV/送數(shù)、JB/高電平轉(zhuǎn)移、JMP/直接轉(zhuǎn)移、RET/子程序返回),保證初學(xué)者一看就懂!本程序已經(jīng)在本站電子實(shí)驗(yàn)板上驗(yàn)證通過(guò),占用CPU時(shí)間少,效率高,被選作單片機(jī)的測(cè)試程序!.T9o0v5w/X7G2a

矩陣按鍵掃描程序是一種節(jié)省IO口的方法,按鍵數(shù)目越多節(jié)省IO口就越可觀,本程序的思路跟書(shū)上一樣:先判斷某一列(行)是否有按鍵按下,再判斷該行(列)是那一只鍵按下。但是,在程序的寫(xiě)法上,站長(zhǎng)采用了最簡(jiǎn)單的方法,使得程序效率最高。

本程序中,如果檢測(cè)到某鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿(mǎn)足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。另外,本人認(rèn)為鍵盤(pán)用延時(shí)程序來(lái)消除抖動(dòng),完全是浪費(fèi)時(shí)間。試想,如果不用中斷執(zhí)行(用中斷執(zhí)行需要更多的硬件資源)的方法來(lái)掃描鍵盤(pán),每秒鐘掃描20-100次,每次都要延時(shí)10-20MS的話(huà),我們的單片機(jī)還有多少時(shí)間做正事呢?0I!u3N*Q8z4Z,j

其實(shí),延時(shí)的這段時(shí)間,CPU可以做其它的事呀。所以,本鍵盤(pán)掃描程序的前面后面都可以加入少少代碼,既可以達(dá)到完美的消抖動(dòng)效果,又可以擴(kuò)展其它的功能(例如按鍵封鎖、按鍵長(zhǎng)按等按鍵功能復(fù)用?。?/p>

本鍵盤(pán)掃描子程序名叫key,每次要掃描時(shí)用callkey調(diào)用即可。以下子程序內(nèi)容:

key:movp0,#00001111b;上四位和下四位分別為行和列,所以送出高低電壓檢查有沒(méi)有按鍵按下9E)V;P'U&v+n-j!p

jmpk10;跳到K10處開(kāi)始掃描,這里可以改成其它條件轉(zhuǎn)移指令來(lái)決定本次掃描是否要繼續(xù),例如減1為0轉(zhuǎn)移或者位為1或0才轉(zhuǎn)移,這主要用來(lái)增加功能,確認(rèn)上一按鍵功能是否完成?是否相當(dāng)于經(jīng)過(guò)了延時(shí)?是否要封鎖鍵盤(pán)?

goend:jmpkend;如果上面判斷本次不執(zhí)行鍵盤(pán)掃描程序,則立即轉(zhuǎn)到程序尾部,不要浪費(fèi)CPU的時(shí)間1a:K0@6m!?3r(?

k10:jbp0.0,k20;掃描正式開(kāi)始,先檢查列1四個(gè)鍵是否有鍵按下,如果沒(méi)有,則跳到K20檢查列2

k11:movp0,#11101111b;列1有鍵按下時(shí),P0.0變低,到底是那一個(gè)鍵按下?現(xiàn)在分別輸出各行低電平5g$P;s0F#|1t8u

jbp0.0,k12;該行的鍵不按下時(shí),p0.0為高電平,跳到到K12,檢查其它的行:x+W%R0z5Q+a#@6J%R!v

movr1,#1;如果正好是這行的鍵按下,將寄存器R0寫(xiě)下1,表示1號(hào)鍵按下了%S8S&g3c;j!I

k12:movp0,#11011111b/g

x1t"P"G-V3b

jbp0.0,k13

movr1,#2;如果正好是這行的鍵按下,將寄存器R0寫(xiě)下2,表示2號(hào)鍵按下了/g6Y#g/K;R,k&c

k13:movp0,#10111111b(d(b!}/|!i){

jbp0.0,k14

movr1,#3;如果正好是這行的鍵按下,將寄存器R0寫(xiě)下3,表示3號(hào)鍵按下了)|#I-u/g.s-W7A7?

k14:movp0,#01111111b/Y"[)S5W5v!G

r9O'n

jbp0.0,kend;如果現(xiàn)在四個(gè)鍵都沒(méi)有按下,可能按鍵松開(kāi)或干擾,退出掃描(以后相同)

movr1,#4如果正好是這行的鍵按下,將寄存器R0寫(xiě)下4,表示4號(hào)鍵按下了

jmpkend;已經(jīng)找到按下的鍵,跳到結(jié)尾吧

k20:jbp0.1,k30;列2檢查為高電平再檢查列3、42F+J8V+J&U$Q%`

L;}

k21:movp0,#11101111b;列2有健按下時(shí),P0.0會(huì)變低,到底是那一行的鍵按下呢?分別輸出行的低電平1q9O4\:m5a4u#C7v

jbp0.1,k22;該行的鍵不按下時(shí)p0.0為高電平,跳到到K22,檢查另外三行5m%^*n8_.Z:Z%d.R0o6s

movr1,#5;如果正好是這行的鍵按下,將寄存器R0寫(xiě)下5,表示5號(hào)鍵按下了(以后相同,不再重復(fù)了)7C:q0q/C7`*|

k22:movp0,#11011111b

jbp0.1,k23!F4z0m6i3@*]!w#S(j&X

movr1,#62S"@5z4j!i*|5@

k23:movp0,#10111111b(T3T1r#?1b.U,E1o

jbp0.1,k241A9P:X"V!d4n0F:}

movr1,#7

k24:movp0,#01111111b.]9j$K"J-W4_-`

jbp0.1,kend1i

]0_$c;`"L*`

movr1,#8.g%g9e1b2D.D1D+b

jmpkend;已經(jīng)找到按下的鍵,跳到結(jié)尾吧(以后相同,不要重復(fù)了)!`'c2m5k4|;U

k30:jbp0.2,k40

k31:movp0,#11101111b

jbp0.2,k32

movr1,#9

k32:movp0,#11011111b;U0m2z;n4p;v*z

jbp0.2,k33

movr1,#10(l%D/Q*q*X5p'~0Z4Z

k33:movp0,#10111111b

jbp0.2,k34

movr1,#11

k34:movp0,#01111111b

jbp0.2,kend

movr1,#125y:p2B$K+l.z(c

jmpkend

k40:jbp0.3,kend,O&\,S3a:\

V

i

k41:movp0,#11101111b*r%c1a.J!h-k

jbp0.3,k42

movr1,#138R&A0A9_0`7h1@9a

k42:movp0,#11011111b*i&R'P

T-A-n

jbp0.3,k43

movr1,#14*_/Q#j)@3~7C3L

k43:movp0,#10111111b

jbp0.3,k44%@1n:t!M8]!`*o3Y

movr1,#152c)@&h-H,G;^2J;R

k44:movp0,#01111111b,p%c/s:B*d

jbp0.3,kend

movr1,#161m6e"~/h7V*n$H%Z-{

kend:ret

鍵盤(pán)掃描結(jié)束了,寄存器R1的值就直接表示了是那個(gè)鍵按下的,根據(jù)不同的鍵值去執(zhí)行不同的程序,從而實(shí)現(xiàn)了十六個(gè)矩陣鍵盤(pán)掃描,同樣原理,最多可以識(shí)別255個(gè)按鍵的矩陣掃描。&P$]8u'}%^

?3\

我們可以每次鍵盤(pán)掃描開(kāi)始時(shí)檢查R0的值是否為0,只有在為0才掃描鍵盤(pán),不為0就證明剛剛掃描過(guò)鍵值,相應(yīng)的按鍵工作還沒(méi)有完成。但是必須記得,每個(gè)按鍵命令執(zhí)行完成后,要給R0寫(xiě)上0,表示可以?huà)呙桄I盤(pán)。

本鍵盤(pán)掃描程序的優(yōu)點(diǎn)在于:不用專(zhuān)門(mén)的按鍵延時(shí)程序,提高了CPU效率,也不用中斷來(lái)掃描鍵盤(pán),節(jié)省了硬件資源。另外,本鍵盤(pán)掃描程序,每次掃描占用CPU時(shí)最短,不論有鍵按下或者無(wú)鍵按下都可以在很短的時(shí)間完成一次掃描。9月17日鍵盤(pán)是一組按鍵的組合,它是最常用的單片機(jī)輸入設(shè)備,操作人員可以通過(guò)鍵盤(pán)輸入數(shù)據(jù)或命令,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話(huà)。單片機(jī)使用的鍵盤(pán)是一種常開(kāi)型的開(kāi)關(guān),通常鍵的兩個(gè)觸點(diǎn)處于斷開(kāi)狀態(tài),按下鍵時(shí)它們才閉合。鍵盤(pán)分編碼和非編碼鍵盤(pán),鍵盤(pán)的識(shí)別可用軟件識(shí)別也可用專(zhuān)用芯片識(shí)別。

MCS-51單片機(jī)擴(kuò)展鍵盤(pán)接口的方法用很多,從硬件結(jié)構(gòu)上,可通過(guò)單片機(jī)I/0接口擴(kuò)展鍵盤(pán),也可通過(guò)擴(kuò)展I/O接口設(shè)計(jì)鍵盤(pán),還有些用的是專(zhuān)用鍵盤(pán)芯片。1.鍵盤(pán)的工作原理:

鍵盤(pán)從結(jié)構(gòu)上分為獨(dú)立式鍵盤(pán)與矩陣式鍵盤(pán)。一般按鍵較少時(shí)采用獨(dú)立式鍵盤(pán),按鍵較多時(shí)采用矩陣式鍵盤(pán)。

(1)

獨(dú)立式鍵盤(pán)。

在由單片機(jī)組成的測(cè)控系統(tǒng)及智能化儀器中,用的最多的是獨(dú)立式鍵盤(pán)。這種鍵盤(pán)具有硬件與軟件相對(duì)簡(jiǎn)單的特點(diǎn),其缺點(diǎn)是按鍵數(shù)量較多時(shí),要占用大量口線(xiàn)。圖1是一個(gè)利用MCS-51單片機(jī)的P1口設(shè)計(jì)的非編碼鍵盤(pán)。

圖1

獨(dú)立式鍵盤(pán)

當(dāng)按鍵沒(méi)按下時(shí),CPU對(duì)應(yīng)的I/O接口由于內(nèi)部有上拉電阻,其輸入為高電平;當(dāng)某鍵被按下后,對(duì)應(yīng)的I/O接口變?yōu)榈碗娖?。只要在程序中判斷I/O接口的狀態(tài),即可知道哪個(gè)鍵處于閉合狀態(tài)。以下是非編碼鍵盤(pán)鍵處理子程序。JNB

P1.0,

KEY00

;轉(zhuǎn)按鍵1處理程序JNB

P1.1,

KEY01

;轉(zhuǎn)按鍵1處理程序JNB

P1.2,

KEY02

;轉(zhuǎn)按鍵1處理程序JNB

P1.3,

KEY03

;轉(zhuǎn)按鍵1處理程序JNB

P1.4,

KEY04

;轉(zhuǎn)按鍵1處理程序JNB

P1.5,

KEY05

;轉(zhuǎn)按鍵1處理程序JNB

P1.6,

KEY06

;轉(zhuǎn)按鍵1處理程序JNB

P1.7,

KEY07

;轉(zhuǎn)按鍵1處理程序RET

;無(wú)鍵按下,返回

KEY00:

RET

KEY01:

RET

…(2)

矩陣式鍵盤(pán)。

矩陣式鍵盤(pán)使用于按鍵數(shù)量較多的場(chǎng)合,它由行線(xiàn)與列線(xiàn)組成,按鍵位于行、列的交叉點(diǎn)上。一個(gè)3*3的行列結(jié)構(gòu)可以構(gòu)成一個(gè)有9個(gè)按鍵的鍵盤(pán)。同理,一個(gè)4*4的行列可以構(gòu)成一個(gè)16按鍵的鍵盤(pán)。很明顯,在按鍵數(shù)量較多的場(chǎng)合,與獨(dú)立式鍵盤(pán)相比,矩陣式鍵盤(pán)要節(jié)省很多I/0接口。

2.鍵盤(pán)按鍵識(shí)別方法(1)掃描法。下面以圖2的K2鍵按下為例,說(shuō)明此鍵是如何識(shí)別出來(lái)的。

圖2

8031與鍵盤(pán)連接

掃描法有行掃描和列掃描兩種,無(wú)論采用哪種,無(wú)論采用哪種,其效果是一樣的,只是在程序中的處理方法有所區(qū)別。下面以列掃描法為例來(lái)介紹掃描法識(shí)別按鍵的方法。首先在鍵處理程序中將P1.4-P1.7依次按位變低,P1.4-P1.7在某一時(shí)刻只有一個(gè)為低。在某一位為低時(shí)讀行線(xiàn),根據(jù)行線(xiàn)的狀態(tài)即可判斷出哪一個(gè)按鍵被按下。如2號(hào)鍵按下,當(dāng)列線(xiàn)P1.5為低時(shí),讀回的行線(xiàn)狀態(tài)中P1.0被拉低,由此可知K2鍵被按下。一般在掃描法中分兩步處理按鍵,首先是判斷有無(wú)鍵按下,如行線(xiàn)有一個(gè)為低,則有鍵按下。當(dāng)判斷有鍵按下時(shí),使列線(xiàn)依次變低,讀行線(xiàn),進(jìn)而判斷出具體哪個(gè)鍵被按下。(2)線(xiàn)反轉(zhuǎn)法。

掃描法是逐行或逐列掃描查詢(xún),當(dāng)被按下的鍵處于最后一列時(shí),要經(jīng)過(guò)多次掃描才能最后獲得此按鍵所處的行列值。而線(xiàn)反轉(zhuǎn)法則顯的簡(jiǎn)練,無(wú)論被按的鍵處于哪列,均可經(jīng)過(guò)兩步即能獲得此按鍵所在的行列值,仍以圖4.38為例來(lái)介紹線(xiàn)反轉(zhuǎn)法。

首先將行線(xiàn)P1.0-P1.3作為輸入線(xiàn),列線(xiàn)P1.4-P1.7作為輸出線(xiàn),并且輸出線(xiàn)輸出全為低電平,讀行線(xiàn)狀態(tài),則行線(xiàn)中電平為低的是按鍵所在的行。然后將列線(xiàn)作為輸入線(xiàn),行線(xiàn)作為輸出線(xiàn),并將輸出線(xiàn)輸出為低電平,讀列線(xiàn)狀態(tài),則列線(xiàn)是電平為低的是按鍵所在的列。綜合上述兩步結(jié)果,確定按鍵所在的行和列,從而識(shí)別出所按下的鍵。

假設(shè)10號(hào)鍵被按下,在第一步P1.3-P1.0全為低電平時(shí),讀P1.4-P1.7的值,則P1.5為低電平;在第二步P1.4-P1.7輸出全為低電平時(shí),讀P1.3-P1.0時(shí),P1.2為低電平。由此可判斷第3行第2列有鍵被按下,此鍵就是K10鍵。

3.鍵盤(pán)的接口電路

設(shè)計(jì)MCS-51單片機(jī)鍵盤(pán)時(shí)可根據(jù)單片機(jī)系統(tǒng)的實(shí)際情況來(lái)靈活處理。在使用內(nèi)部有程序存儲(chǔ)器的單片機(jī)時(shí),如單片機(jī)的I/O接口夠用,可直接利用單片機(jī)的I/O接口連接鍵盤(pán)。如果I/O接口不夠用,可利用擴(kuò)展I/O接口連接鍵盤(pán),有時(shí)也可使用專(zhuān)用的鍵盤(pán)接口芯片。

(1)

利用單片機(jī)的I/O接口連接鍵盤(pán)。

利用MCS-51單片機(jī)的I/O接口連接鍵盤(pán)時(shí)分兩種情況,一是當(dāng)P0、P1、P2、P3均為普通輸入/輸出時(shí),可使用任意I/0接口連接鍵盤(pán);二是當(dāng)單片機(jī)系統(tǒng)擴(kuò)展程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、I/O時(shí),由于P0、P2作為地址數(shù)據(jù)總線(xiàn)的使用,所以擴(kuò)展鍵盤(pán)時(shí)只能使用P1口、P3口。如圖2所示為利用MCS-51單片機(jī)的P1口設(shè)計(jì)的4*4矩陣鍵盤(pán)。注意如果用P0口設(shè)計(jì)鍵盤(pán),要給P0口各口線(xiàn)提供上拉電阻,其大小一般為2-10kn。(2)

利用擴(kuò)展I/O接口設(shè)計(jì)鍵盤(pán)。

MCS-51單片機(jī)在總線(xiàn)擴(kuò)展凡是時(shí)由于P0口、P2口分別作為數(shù)據(jù)總線(xiàn)及地址總線(xiàn),而P1口、P3口又有其他用途時(shí),擴(kuò)展鍵盤(pán)可利用擴(kuò)展的I/O接口。利用8255的PC口設(shè)計(jì)的4*4矩陣鍵盤(pán)如圖3所示,利用8255的PC口設(shè)計(jì)的編碼鍵盤(pán),PC0-PC3為行輸入,PC4-PC7為列輸出。

圖3

8255與鍵盤(pán)連接圖

(3)

按鍵去抖。

由于通常的按鍵所用的開(kāi)關(guān)是機(jī)械開(kāi)關(guān),當(dāng)開(kāi)關(guān)閉合、斷開(kāi)時(shí)并不是馬上穩(wěn)定地接通和斷開(kāi),而是在閉合與斷開(kāi)瞬間均伴隨有一連串的抖動(dòng)。為了確保CPU對(duì)鍵的一次閉合僅做一次處理,必須要在程序或硬件上進(jìn)行防抖處理。為節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動(dòng),而是用軟件消抖方法。即檢測(cè)鍵閉合后延時(shí)5-10ms,讓前延抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5-10ms的延時(shí),待后延抖動(dòng)消失后才轉(zhuǎn)入該鍵處理程序。以下是具有消抖功能的鍵程序,只有按鍵按下再放開(kāi)后才做一次鍵處理。

KEY_00:

JB

P1.0,

KEY_01

;無(wú)鍵按下,查下一個(gè)鍵

LCALL

DELAY

;延時(shí)10ms

JNB

P1.0,

$

;鍵一直按下,等待

LCALL

DELAY

;鍵松開(kāi),延時(shí)10ms

JB

P1.0,

KEY_00

;一次按鍵完成,轉(zhuǎn)鍵盤(pán)處理程序KEY_01:…

RET(4)

鍵盤(pán)的編碼。

對(duì)于獨(dú)立式按鍵鍵盤(pán),由于按鍵數(shù)目較少,可根據(jù)實(shí)際情況靈活編碼。對(duì)于矩陣式鍵盤(pán),按鍵的位置由行號(hào)和列號(hào)唯一確定,所以分別對(duì)行號(hào)與列號(hào)進(jìn)行二進(jìn)制編碼,然后將兩值合成一個(gè)字節(jié),高4位是行號(hào),低4位是列號(hào)。如10號(hào)鍵被按下時(shí),列號(hào)讀回的值為1011,行號(hào)讀回的值為1101,此兩值合成為11011011=0DBH,據(jù)此值可轉(zhuǎn)到10號(hào)鍵處理程序。這種方式雖然簡(jiǎn)單,但其離散性很大,在讀程序時(shí)必須要結(jié)合硬件電路。也可將讀回的鍵值按一定的方式運(yùn)算后,算出對(duì)應(yīng)的鍵值進(jìn)行散轉(zhuǎn),但這樣會(huì)增加程序的工作量,因而大多數(shù)單片機(jī)系統(tǒng)在鍵盤(pán)處理程序中只根據(jù)讀回的鍵值進(jìn)行散轉(zhuǎn)。

(5)

常用的專(zhuān)用鍵盤(pán)芯片。

無(wú)論是利用CPU的I/O接口擴(kuò)展鍵盤(pán),還是利用擴(kuò)展I/O芯片擴(kuò)展鍵盤(pán),由于均是用普通I/O接口擴(kuò)展,如果要在單片機(jī)的程序中設(shè)計(jì)專(zhuān)用的鍵盤(pán)程序,特別是矩陣式鍵盤(pán),其程序相對(duì)復(fù)雜一些。因而在較復(fù)雜一些的單片機(jī)系統(tǒng)中可選用專(zhuān)用的鍵盤(pán)芯片設(shè)計(jì)鍵盤(pán)?,F(xiàn)常用的鍵盤(pán)擴(kuò)展芯片有Intel8279、CH451、ICM7218、PCF8574等。

(6)

單片機(jī)對(duì)鍵盤(pán)的控制方式。

在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,為了節(jié)省硬件,無(wú)論是采用獨(dú)立式鍵盤(pán)還是采用矩陣式鍵盤(pán),單片機(jī)對(duì)鍵盤(pán)的控制有以下3種方式。

i

程序控制掃描方式。

這種方式只有單片機(jī)空閑時(shí),才可調(diào)用鍵盤(pán)掃描子程序,查詢(xún)鍵盤(pán)的輸

入狀態(tài)是否改變。

ii

定時(shí)掃描方式。

單片機(jī)對(duì)鍵盤(pán)的掃描也可采用定時(shí)掃描方式,即單片機(jī)每隔一定的時(shí)間對(duì)鍵盤(pán)掃描一次。在這種方式中,通常采用單片機(jī)內(nèi)部的定時(shí)器,產(chǎn)生10ms的定時(shí)中斷,CPU響應(yīng)定時(shí)中斷請(qǐng)求后對(duì)鍵盤(pán)進(jìn)行掃描,以查詢(xún)鍵盤(pán)是否有鍵按下。

iii

中斷掃描方式。

雖然采用程序查詢(xún)與定時(shí)對(duì)鍵盤(pán)的掃描方式時(shí)的程序編制簡(jiǎn)單,但一個(gè)單片機(jī)系統(tǒng)在運(yùn)行時(shí)的大多數(shù)時(shí)間里鍵盤(pán)基本是不工作的。為了進(jìn)一步提高CPU的工作效率,可采用中斷方式。當(dāng)鍵盤(pán)有鍵動(dòng)作時(shí)產(chǎn)生中斷,CPU響應(yīng)鍵盤(pán)中斷后,執(zhí)行鍵盤(pán)中斷程序,判別鍵盤(pán)按下鍵的鍵號(hào),并做相應(yīng)處理。,578次

1、先讀取鍵盤(pán)的狀態(tài),得到按鍵的特征編碼。

先從P1口的高四位輸出低電平,低四位輸出高電平,從P1口的低四位讀取鍵盤(pán)狀態(tài)。再?gòu)腜1口的低四位輸出低電平,高四位輸出高電平,從P1口的高四位讀取鍵盤(pán)狀態(tài)。將兩次讀取結(jié)果組合起來(lái)就可以得到當(dāng)前按鍵的特征編碼。使用上述方法我們得到16個(gè)鍵的特征編碼。

2、根據(jù)按鍵的特征編碼,查表得到按鍵的順序編碼。

將16個(gè)鍵的特征編碼按順序排成一張表,然后用當(dāng)前讀得的特征編碼來(lái)查表,當(dāng)表中有該特征編碼時(shí),它的位置就是對(duì)應(yīng)的順序編碼。

3、特征編碼與順序編碼的對(duì)應(yīng)關(guān)系

KEYTABLE:

DB

0EEH,0EDH,0EBH,0E7H,0DEH

;0,1,2,3,4,

順序碼

DB

0DDH,0DBH,0D7H,0BEH,0BDH

;5,6,7,8,9,

DB

0BBH,0B7H,07EH,07DH,07BH

;A,B,C,D,E,

DB

077H,0FFH

;F,

0FF為結(jié)束碼矩陣控制鍵盤(pán)操作說(shuō)明鍵盤(pán)概述鍵盤(pán)概述控制器是智能電視監(jiān)控系統(tǒng)中的控制鍵盤(pán),也是個(gè)監(jiān)控系統(tǒng)中人機(jī)對(duì)話(huà)的主要設(shè)備??勺鳛橹骺劓I盤(pán),也可作為分控鍵盤(pán)使用。對(duì)整個(gè)監(jiān)控系統(tǒng)中的每個(gè)單機(jī)進(jìn)行控制。鍵盤(pán)功能鍵盤(pán)功能中文/英文液晶屏顯示比例操縱桿(二維、三維可選)可全方位控制云臺(tái),三維比例操縱桿可控制攝像機(jī)的變倍攝像機(jī)可控制光圈開(kāi)光、聚集遠(yuǎn)近、變倍大小室外云臺(tái)的防護(hù)罩可除塵和除霜控制矩陣的切換、序切、群組切換、菜單操作等控制高速球的各種功能,如預(yù)置點(diǎn)參數(shù)、巡視組、看守衛(wèi)設(shè)置、菜單操作等對(duì)報(bào)警設(shè)備進(jìn)行布/撤防及報(bào)警聯(lián)動(dòng)控制控制各種協(xié)議的云臺(tái)、解碼器、輔助開(kāi)頭設(shè)置、自動(dòng)掃描、自動(dòng)面掃及角度設(shè)定在菜單中設(shè)置各項(xiàng)功能10.鍵盤(pán)鎖定可避免各種誤操作,安全性高11.內(nèi)置蜂鳴器桌面上直接聽(tīng)到聲音,可判斷操作是否有效技術(shù)參數(shù)技術(shù)參數(shù)1.控制模式主控、分控2.可接入分控?cái)?shù)16個(gè)3.可接入報(bào)警模塊數(shù)239個(gè)4.最大報(bào)警器地址1024個(gè)5.最大可控制攝像機(jī)數(shù)量1024個(gè)6.最大可控制監(jiān)視器數(shù)量64個(gè)7.最大可控制解碼器數(shù)量1024個(gè)8.電源AC/DC9V(最低500mA的電源)9.功率5W10.通訊協(xié)議Matri、PEL-D、PEL-P、VinPD11.通訊波特率1200Bit/S,2400Bit/S,4800Bit/S,9600Bit/S,Startbit1,Databit8,Stopbit1

控制線(xiàn)連接圖控制線(xiàn)連接圖鍵盤(pán)按鍵說(shuō)明鍵盤(pán)按鍵說(shuō)明液晶顯示區(qū)液晶顯示區(qū)鏡頭控制區(qū)功能區(qū)數(shù)值區(qū)特殊功能鍵操縱桿lrislrisOpenop光圈開(kāi)lrisCloseop光圈關(guān)FocusFar聚焦遠(yuǎn)FocusNear聚焦近ZoomTele變倍大ZoomWide變倍小DVR設(shè)備操作DVR功能鍵Shift用戶(hù)登入Login退出鍵Exit輸入數(shù)字77輸入數(shù)字88報(bào)警點(diǎn)布防Enabl查詢(xún)報(bào)警點(diǎn)布/撤防ACK報(bào)警記錄查詢(xún)List進(jìn)入鍵盤(pán)主菜單MENU啟動(dòng)功能F1/ON關(guān)閉功能F2/OFF清零輸入內(nèi)容Clear輸入數(shù)字9清零輸入內(nèi)容Clear輸入數(shù)字99選擇下一項(xiàng)菜單Auto輸入數(shù)字00輸入數(shù)字4輸入數(shù)字00輸入數(shù)字44調(diào)預(yù)置點(diǎn)Call組群切換GRP確認(rèn)鍵組群切換GRP確認(rèn)鍵Enter輸入數(shù)字55序切SEQ輸入數(shù)字66Pan_A序切SEQ輸入數(shù)字66Pan_A設(shè)置云臺(tái)掃描角度1矩陣向后切換Next輸入數(shù)字1矩陣向后切換Next輸入數(shù)字11選擇上一項(xiàng)菜單MPX設(shè)置云臺(tái)掃描角度2區(qū)域鍵AREA設(shè)置云臺(tái)掃描角度2區(qū)域鍵AREA輸入數(shù)字22Pan_BPan_B輸出通道號(hào)MON輸入數(shù)字3輸出通道號(hào)MON輸入數(shù)字33啟動(dòng)巡視組Scan視頻切換視頻切換CAM鍵盤(pán)基本提示鍵盤(pán)基本提示蜂鳴聲提示說(shuō)明2.1“嘀”一聲,表示有按鍵操作。2.2“嘀,嘀,嘀”三聲,表示本次操作錯(cuò)誤或無(wú)效。2.3“嘀嘀嘀…”連續(xù)發(fā)聲,表示有報(bào)警發(fā)生。報(bào)警顯示提示當(dāng)系統(tǒng)有報(bào)警時(shí),液晶顯示如下:ALARM=>No:addrareaNN=DDDDZZZZ其中:NN表示第幾個(gè)報(bào)警序號(hào),ZZZZ表示報(bào)警區(qū)號(hào),DDDD表示報(bào)警地址。當(dāng)系統(tǒng)多點(diǎn)報(bào)警時(shí),報(bào)警號(hào)NN,報(bào)警區(qū)號(hào)ZZZZ,報(bào)警地址DDDD,循環(huán)顯示報(bào)警點(diǎn)號(hào)。(注:最多可循環(huán)顯示10個(gè)報(bào)警點(diǎn))常規(guī)顯示鍵盤(pán)上電后的啟動(dòng)界面就是常規(guī)操作,在常規(guī)操作時(shí),LCD顯示如下:MONMONCAMDATA0100010000鍵盤(pán)對(duì)矩陣的基本操作鍵盤(pán)對(duì)矩陣的基本操作1.輸出通道號(hào):輸入1-99的數(shù)字,按MON鍵選擇監(jiān)視器號(hào)。2.視頻切換: 輸入視頻輸入編號(hào)(1-1024),按CAM鍵切換矩陣。3.組群切換:輸入群組編號(hào)(1-16),按GRP鍵矩陣組群切換。4.序切:輸入序切編號(hào)(1-99),按SEQ鍵矩陣序切。5.序切停:輸入序切編號(hào)(1-99),按Shift+SEQ鍵矩陣序切。6.切換下一路視頻:按NEXT鍵矩陣切換下一路。7.切換上一路視頻:按Shift+NEXT鍵矩陣切換上一路。鍵盤(pán)對(duì)高速球的基本操作鍵盤(pán)對(duì)高速球的基本操作設(shè)預(yù)置點(diǎn):輸入預(yù)置點(diǎn)號(hào)(1-128),按Shift+CALL鍵設(shè)置球機(jī)預(yù)置點(diǎn)。調(diào)預(yù)置點(diǎn):輸入預(yù)置點(diǎn)號(hào)(1-128),按CALL鍵調(diào)球機(jī)預(yù)置點(diǎn)。刪除預(yù)置點(diǎn):輸入預(yù)置點(diǎn)號(hào)(1-128),按MPX鍵刪除球機(jī)預(yù)置點(diǎn)。(注:CAM欄數(shù)據(jù)為球機(jī)地址,DATA欄數(shù)據(jù)為預(yù)置點(diǎn)號(hào))設(shè)置云臺(tái)兩點(diǎn)掃描角度1:輸入掃描滯留時(shí)間(1-60),按Pan_A鍵設(shè)置掃描起點(diǎn)。(注:CAM欄數(shù)據(jù)為球機(jī)地址,DATA欄數(shù)據(jù)為掃描滯留時(shí)間)設(shè)置云臺(tái)兩點(diǎn)掃描角度2:輸入掃描滯留時(shí)間(1-60),按Pan_B鍵設(shè)置掃描終點(diǎn)。(注:CAM欄數(shù)據(jù)為球機(jī)地址,DATA欄數(shù)據(jù)為掃描終點(diǎn))自動(dòng)線(xiàn)掃啟(兩點(diǎn)掃描):輸入掃描速度(1-64),按Auto鍵。面掃啟(360度掃描):輸入掃描速度(1-64),按Shift+Auto鍵。(注:CAM欄數(shù)據(jù)為球機(jī)地址,DATA欄數(shù)據(jù)為掃描速度)啟動(dòng)巡視組:輸入巡視組號(hào)(1-8),按Scan鍵啟動(dòng)巡視組。啟動(dòng)往復(fù)掃描:輸入巡視組號(hào)(1-8),按Shift+Scan鍵啟動(dòng)往復(fù)掃描。(注:CAM欄數(shù)據(jù)為球機(jī)地址,DATA欄數(shù)據(jù)為巡視組號(hào))報(bào)警布防報(bào)警布防、查詢(xún)及消警的操作在常規(guī)操作時(shí):1.報(bào)警布防:輸入報(bào)警點(diǎn)號(hào)(0-1024),按Enable鍵對(duì)此報(bào)警點(diǎn)進(jìn)行布防。2.報(bào)警撤防:輸入報(bào)警點(diǎn)號(hào)(0-1024),按Shift+Enable鍵對(duì)此報(bào)警點(diǎn)進(jìn)行撤防。3.報(bào)警查詢(xún):輸入報(bào)警點(diǎn)號(hào)(0-1024),按ACK鍵查詢(xún)報(bào)警點(diǎn)布/撤防狀態(tài),“DATA”欄布防時(shí)顯示“AON”,撤防時(shí)顯示“AOFF”。4.報(bào)警消警:當(dāng)系統(tǒng)有報(bào)警時(shí),按Shift+Clear鍵對(duì)報(bào)警設(shè)備進(jìn)行消警。其它設(shè)備的操作其它設(shè)備的操作 在常規(guī)操作時(shí),進(jìn)入鍵盤(pán)編程及特殊功能菜單,操作如下進(jìn)入鍵盤(pán)編程菜單:按MENU鍵進(jìn)入鍵盤(pán)編程菜單。進(jìn)入DVR菜單:按DVR鍵進(jìn)入DVR菜單,對(duì)DVR設(shè)備進(jìn)行操作。(3)進(jìn)入報(bào)警記錄查詢(xún)菜單:按List鍵進(jìn)入報(bào)警記錄查詢(xún)菜單。(4)進(jìn)入用戶(hù)管理菜單:按Login鍵進(jìn)入用戶(hù)管理菜單。2.DVR菜單在常規(guī)操作時(shí),按“DVR”鍵進(jìn)入DVR菜單,此時(shí)可對(duì)DVR設(shè)備進(jìn)行操作。鍵盤(pán)顯示如下:第一行:POS-WATCHDVR第二行:ID:XXXX→DVR地址DATA:XXXX→輸入數(shù)據(jù)再按“DVR”鍵則退出DVR菜單,返回到常規(guī)操作狀態(tài)。3.報(bào)警記錄查詢(xún)菜單在常規(guī)操作時(shí),按“List”鍵進(jìn)入報(bào)警記錄查詢(xún)菜單,此時(shí)LCD顯示如下: 第一行:ALARMLIST:addrarea第二行:NN=YYYYZZZZ→NN為第幾號(hào)記錄(可記錄10條),YYYY為報(bào)警地址,ZZZZ表示報(bào)警區(qū)號(hào),操作:按鍵功能Auto查詢(xún)下一條記錄MPX查詢(xún)上一條記錄Exit退出菜單,返回到常規(guī)操作狀態(tài)4.用戶(hù)管理菜單在常規(guī)操作時(shí),按“Login”鍵進(jìn)入用戶(hù)管理菜單,此時(shí)LCD顯示如下:PleaseenteryourPleaseenteryourPassword:輸入用戶(hù)密碼按“Enter”鍵鎖定鍵盤(pán)或解鎖鍵盤(pán)。(密碼為6688)5.操縱桿控制把操縱桿往不同方向偏時(shí),云臺(tái)相對(duì)應(yīng)操縱桿的方向運(yùn)動(dòng)。當(dāng)操作變速云臺(tái)時(shí),操縱桿偏離中心越大時(shí),云臺(tái)速度越快。(三維搖桿)把操縱桿中間圓柱往順時(shí)針?lè)较驍Q時(shí)攝像機(jī)鏡頭變倍大,往逆時(shí)針?lè)较驎r(shí)攝像機(jī)鏡頭變倍小。注:當(dāng)“DATA”欄非“0”時(shí),“DATA”當(dāng)“DATA”欄等于“0”時(shí),“CAM”6.鏡頭控制按下鏡頭動(dòng)作鍵不放直到達(dá)到所需效果時(shí)放開(kāi)。操作:按鍵功能IrisOpen光圈開(kāi)IrisClose光圈關(guān)FocusFar聚焦遠(yuǎn)FocusNear聚焦近ZoomTele變倍大ZoomWide變倍小鍵盤(pán)主菜單鍵盤(pán)主菜單在常規(guī)操作時(shí),按“MENU”鍵進(jìn)入鍵盤(pán)主菜單(包括高速球設(shè)置菜單、鍵盤(pán)設(shè)置菜單、輔助開(kāi)關(guān)設(shè)置(雨刷)、輔助開(kāi)關(guān)設(shè)置(加熱)、輔助開(kāi)關(guān)1設(shè)置、輔助開(kāi)關(guān)2設(shè)置、矩陣菜單操作、操縱桿設(shè)置),此時(shí)可按“MPX”鍵上翻菜單或按“Auto”鍵下翻菜單。1.高速球設(shè)置菜單按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:1)1)SpeeddomesetupNumber:0001 →高速球地址操作:輸入需設(shè)置的高速球地址碼(0-1024),按“Enter”鍵進(jìn)入高速球設(shè)置子菜單。(1)高速球預(yù)置點(diǎn)參數(shù)設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:11.Position:000Speed:00Time:00→預(yù)置點(diǎn)(128個(gè)預(yù)置點(diǎn))操作:按“F1/ON”移動(dòng)光標(biāo),當(dāng)光標(biāo)移到Position:000位置時(shí),輸入預(yù)置點(diǎn)號(hào)(1-128),再按“Enter”鍵選擇要設(shè)的預(yù)置點(diǎn),此時(shí)就可設(shè)置當(dāng)前所選的預(yù)置點(diǎn)的速度和滯留時(shí)間。按“F1/ON”移動(dòng)光標(biāo)至Speed:00位置,輸入速度值(1-64),再按“Enter”鍵設(shè)置到預(yù)置點(diǎn)的速度。按“F1/ON”移動(dòng)光標(biāo)至Time:00位置,輸入滯留時(shí)間(1-60),再按“Enter”鍵設(shè)置預(yù)置點(diǎn)的滯留時(shí)間。按“F1/ON”移動(dòng)光標(biāo)設(shè)置另一個(gè)預(yù)置點(diǎn)。按“Exit”鍵退出高速球子菜單回到設(shè)置菜單(2)巡視組設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:22.AddPre_positionGroupNumber:0 →巡視組號(hào)操作:輸入巡視組號(hào)(1-8),按“Enter”鍵選擇,LCD顯示如下:AAdd:操作:輸入預(yù)置點(diǎn)(1-128),按“Enter”鍵加預(yù)置點(diǎn),最多可加16個(gè)預(yù)置點(diǎn),按“F1/ON”加預(yù)置點(diǎn)結(jié)束。按“Exit”鍵退到設(shè)置巡視組菜單,重新輸入數(shù)字設(shè)置另外一組巡視組。按“Exit”鍵退出高速球子菜單回到設(shè)置菜單(3)守衛(wèi)設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:操作:操作操縱桿,把云臺(tái)移至所需要的看守衛(wèi)點(diǎn),按“Enter”鍵設(shè)置這點(diǎn)為看守衛(wèi)點(diǎn)。按“Exit”鍵退出高速球子菜單回到設(shè)置菜單(4)看守衛(wèi)參數(shù)設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:4.WatchPosition4.WatchPositionTime:000Switch:看守衛(wèi)時(shí)間看守衛(wèi)開(kāi)/關(guān)操作:輸入看守衛(wèi)時(shí)間(1-240),再按“Enter”鍵設(shè)置看守衛(wèi)時(shí)間,按“F1/ON”設(shè)置看守衛(wèi)開(kāi),按“F2/OFF”設(shè)置看守衛(wèi)關(guān)。(第8組巡視組為看守衛(wèi)巡視點(diǎn))按“Exit”鍵退出高速球子菜單回到設(shè)置菜單(5)高速球菜單操作按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:55.DomeMenuPressentertomenu操作:按“Enter”鍵進(jìn)入高速球菜單,LCD顯示如下:55.DomeMenudata:0001→輸入數(shù)據(jù),操作:按鍵功能Enter進(jìn)入Login退出MPX光標(biāo)上Auto光標(biāo)下Call光標(biāo)右Scan光標(biāo)左Pan_A選擇DVR輸入任意的數(shù)字,按“DVR”鍵確認(rèn)按“Exit”鍵退出高速球子菜單回到設(shè)置菜單,再按“Exit”鍵退到主菜單。2.鍵盤(pán)設(shè)置菜單按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:2)2)Keyboardsetup操作:按“Enter”鍵進(jìn)入鍵盤(pán)設(shè)置子菜單。(1)鍵盤(pán)ID設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:Cur.KeyboardID:00Cur.KeyboardID:000=Mast,1→16=Slave:00→鍵盤(pán)當(dāng)前ID→輸入新ID操作:輸入0-16的任意的數(shù)字,按“Enter”鍵設(shè)置鍵盤(pán)ID。注:0為主控,1-16為分控,當(dāng)控制臺(tái)只有一臺(tái)鍵盤(pán)時(shí),鍵盤(pán)必須設(shè)為主控。按“Exit”鍵退出鍵盤(pán)子菜單回到設(shè)置菜單(2)鍵盤(pán)波特率設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:2.Cur.BaudRate:2.Cur.BaudRate:960012/24/48/9600:0000→鍵盤(pán)當(dāng)前波特率→輸入新波特率 操作:輸入1200/2400/4800/9600數(shù)字,按“Enter”鍵設(shè)置鍵盤(pán)波特率。按“Exit”鍵退出鍵盤(pán)子菜單回到設(shè)置菜單(3)鍵盤(pán)聲音開(kāi)/關(guān)設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:3.3.Currentsound:ONYourselect:ON/OFF→鍵盤(pán)當(dāng)前狀態(tài)→選擇新?tīng)顟B(tài)操作:按“F1/ON”選擇聲音開(kāi),再按“Enter”鍵確認(rèn)。按“F2/OFF”選擇聲音關(guān),再按“Enter”鍵確認(rèn)。按“Exit”鍵退出鍵盤(pán)子菜單回到設(shè)置菜單(4)匹配電阻設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:4.Matchresister:ON4.Matchresister:ONYourselect:ON→鍵盤(pán)當(dāng)前狀態(tài)→選擇新?tīng)顟B(tài)操作:按“F1/ON”選擇區(qū)配電阻開(kāi),再按“Enter”鍵確認(rèn)。按“F2/OFF”選擇區(qū)配電阻關(guān),再按“Enter”鍵確認(rèn)。按“Exit”鍵退出鍵盤(pán)子菜單回到設(shè)置菜單(5)鍵盤(pán)協(xié)議設(shè)置按“MPX”鍵或按“Auto”鍵直至LCD顯示如下:5.Protocol:MatriNewProtocol:5.Protocol:MatriNewProtocol:→鍵盤(pán)當(dāng)前狀態(tài)→選擇新?tīng)顟B(tài)6.Keyboardtest操作:輸入1-4的數(shù)字,1→Matri(矩陣),2→Pel-D

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論