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