1 引言 鍵盤越來越廣泛地應用于嵌入式系統(tǒng)中。不同的應用領域鍵盤掃描方式的設計也各不相同,一般有以下=三種:①軟件方法來實現(xiàn)對鍵盤的掃描。②采用專用芯片實現(xiàn)對鍵盤的掃描。這是嵌入式系統(tǒng)中設計鍵盤普遍使用的方法。常用的鍵盤控制芯片有zl97289A等。這些芯片的內(nèi)部集成了鍵盤的驅(qū)動電路。配合一定的軟件設計即可使用。③與方式②相仿,由于按鍵的狀態(tài)變化體現(xiàn)在電平高低的變化,因此通過I/O口模擬鍵盤的驅(qū)動信號也可實現(xiàn)鍵盤的控制。 隨著芯片技術的發(fā)展,處理器內(nèi)部的資源越來越豐富。如韓國三星半導體公司的32位ARM處理器S3C44BOX芯片.其內(nèi)部集成了外部存儲器控制器、LCD控制器、4個DMA通道、2通道異步UART單元、1個同步串行口(SIO),1個多主I2C總線控制器、1個I2S總線控制器。5通道PWM定時器及1個內(nèi)部定時器、71個通用I/O、8個外部中斷源、實時時鐘、8通道10位ADC等。由于其內(nèi)部豐富的I/O口及I/O口擴展,可以通過S3C44BOX的I/O 口模擬鍵盤的驅(qū)動信號實現(xiàn)鍵盤的控制。 2 鍵盤工作原理 嵌入式系統(tǒng)中應用較多的為矩陣鍵盤.現(xiàn)以4x4的矩陣鍵盤為例,說明其下作原理。,4x4行、列結(jié)構(gòu)的16按鍵矩陣鍵盤由行線和列線組成。按鍵位于其行列的交叉點上。結(jié)構(gòu)圖如圖1所示。要與4x4的矩陣鍵盤接口,最多需要16根口線,為節(jié)省口線。在此選擇“鍵盤循環(huán)掃描”方法來檢測鍵盤.采用此方法只需8根口線。 按鍵設置在行、列交叉點上,行、列分別連接到按鍵開關的兩端。行線通過上拉電阻接到+5V上。平時無按鍵動作時.行線電平狀態(tài)將由通過此按鍵的列線電平?jīng)Q定:列線電平如果為低.行線電平為低;列線電平如果為高,則行線電平亦為高。因各按鍵之間相互發(fā)生影響,所以必須將行、列線信號配合起來并作適當?shù)奶幚恚拍艽_定閉合鍵的位置。 圖1 矩陣式鍵盤結(jié)構(gòu) 矩陣鍵盤循環(huán)掃描的識別方法,分兩步進行:①識別鍵盤哪一行的鍵被按下。讓所有列線均為低電平,檢杳各行線電平是否為低。如果有行線為低,則說明該行有鍵被按下,否則說明無鍵被按下。②如果某行有鍵被按下。識別鍵盤哪一列的鍵被按下(亦稱之為掃描法)。逐列置低電平,并置其余各列為高電平,檢查各行線電平的變化。如果行電平變?yōu)榈碗娖剑畡t可確定此行此列交叉點處按鍵被按下。 3 S3C44BOX與鍵盤硬件接口電路 S3C44BOX核心ARM板具有71個多功能輸入/輸出腳,包含在以下7組端口中:1個lO位輸出端口 A、1個11位輸出端口B、1個16位輸入/輸出端口c、2個8位輸入/輸出端口D和G、2個9位輸入/輸出端口E和F。從端口A~G的功能描述看出.在一般的應用中,PA作為地址線使用;PB作為板塊bank選擇線和SDRAM的接口線使用;PC可以作為數(shù)據(jù)線、I2S接口、或LCD數(shù)據(jù)線等使用;在系統(tǒng)具備LCD的情況下,PD主要作為LCD的信號線使用;PE可以作為串口信號線和定時器輸出使用;PF和PG則是多功能I/O口。在ARMsys平臺中,很多端口線已被指定了一定的作用,例如PA,PB,PC,PD等;再者PF口集中分布在芯片右側(cè)引腳上,便于硬件連接。因此,在此選取PF口作為檢測鍵盤端口,并設定PF0~PF3為輸出掃描碼的端口,PF4~PF7為鍵值讀入口。 4 系統(tǒng)的軟件設計 鍵盤的掃描程序采用C語言編寫。主要由三個部分組成:與S3C44BOX硬件有關的初始化程序、應用主程序、讀鍵子程序。在編寫與S3C44BOX硬件有關的初始化程序時主要是對S3C44BOX內(nèi)部各寄存器進行初始化.首先通過設置PCONF(端口配置)寄存器,來實現(xiàn)端口功能配置。然后再分別設置PDATF(端口數(shù)據(jù))及PUPF(端口上拉設置)寄存器。初始化設置程序如下: //設置PF0~3為輸出口(列線),PF4~7位輸入口 rfPCONF = Ox55: //設置PF0~3作為輸出口輸出掃描碼 rPDATF = 0xf0;//PFO~3全寫入0 //設置PF4~7作為輸入口讀入鍵值 Keyvalue = (rPDATF&Oxf0)>>4; //設置內(nèi)部上拉電阻 rPUPF = OxOO.//使能PFO~7的內(nèi)部上拉電阻 主程序以一定的時間間隔反復調(diào)用讀鍵字程序.從而實時響應鍵入。主、子程序流程圖如圖2、3所示。 圖2 主程序流程圖 圖3 掃描按鍵子程序流程圖 子程序中定義了鍵值表格、掃描碼數(shù)組,程序如下: const char Keyboard[4][4]= { {'7','8','9','/'}, {'4','5','6','*'} {'1','2','3','-'} {'0','.','+','='} } 掃描碼數(shù)組為scanvalue[4]={0xfe,0xfd,0xfb,0xf7} 5 結(jié)束語 鍵盤已成為現(xiàn)代嵌入式設備人機交互的首選輸入設備。本文介紹了鍵盤循環(huán)掃描的工作原理,以三星公司ARM7內(nèi)核芯片S3C44BOX為基礎.完成了鍵盤的軟硬件設計,實踐證明系統(tǒng)是穩(wěn)定的、可靠的。 本文作者的創(chuàng)新點是:以ARM內(nèi)核芯片S3CA4BOX為基礎.實現(xiàn)嵌入式設備的輸入功能,此系統(tǒng)具有擴展性好、用戶界面友好。外圍電路簡單,可靠性高的特點,其硬件接口采用插板的形式,結(jié)構(gòu)簡單、易于裝卸,方便系統(tǒng)集成和維護。 作者:余貴水 來源:《微計算機信息》(嵌入式與SOC)2009年第7-2期 |