專利名稱:鍵盤掃描方法
技術領域:
本發明涉及一種鍵盤掃描方法,特別是涉及一種使用擴展芯片實現的鍵 盤掃描方法。
背景技術:
當前鍵盤掃描算法都是采用了行列矩陣方式,這樣5*5鍵盤需要10個 引腳,在實際開發中有時引腳數目不夠,因此需要擴展以支持更多的引腳。
發明內容
本發明要解決的技術問題是為了克服現有技術中引腳不夠的缺陷,提供 一種鍵盤掃描方法,該鍵盤掃描方法通過一擴展芯片以支持更多的引腳。
本發明是通過下述技術方案來解決上述技術問題的 一種鍵盤掃描方
法, 一鍵盤包括復數個行信號引腳和復數個列信號引腳組成的矩陣,每一行 信號引腳和每一列信號引腳分別對應一開關的兩端, 一主芯片和一擴展芯片
通過一總線連接, 一中斷引腳的一端與該擴展芯片的一中斷請求信號輸出端 連接,另一端與該主芯片的一外部通用輸入輸出端,這些行信號引腳和列信 號引腳與該擴展芯片上對應的控制引腳對應連接,其中該鍵盤掃描方法包括
以下步驟
51、 初始化擴展芯片;
52、 將一中斷處理程序注冊到中斷引腳上;
53、 在鍵盤上進行按鍵;
54、 讀出為低電平的列信號引腳并確定按鍵的列號;
55、 重新配置行信號引腳和列信號引腳的輸入輸出端和電平信號;56、 讀出為低電平的行信號引腳并確定按鍵的行號;
57、 恢復擴展芯片的初始化設置,回到步驟S3,等待下一次按鍵;
58、 根據確定的行號和列號,確定具體按鍵碼,并發送給一應用層進行 相應的處理。
其中,該總線包括一串行數據線和一串行時鐘線。
其中,該步驟S1包括以下過程將行信號引腳設置為輸出端和低電平,
同時將列信號引腳設置為輸入端和高電平。
其中,該步驟S3包括以下過程當該擴展芯片的中斷請求信號輸出端 發生變化時,通過該中斷引腳將產生一個中斷,進入中斷處理程序,同時按 鍵將一對應的開關打開,該開關將對應的列信號引腳與行信號引腳連接并導 通。
其中,該步驟S4包括以下過程對應的一列信號引腳被拉底變為低電 平,讀出為低電平的列信號引腳,以確定該按鍵的列號。
其中,該步驟S5包括以下過程將行信號引腳設置為輸入端和高電平, 同時將列信號引腳設置為輸出端和低電平。
其中,該步驟S6包括以下過程對應的一行信號引腳被拉底變為低電 平,讀出為低電平的行信號引腳,以確定該按鍵的行號。
本發明的積極進步效果在于
本發明采用一擴展芯片來擴展16個引腳,利用芯片的特性,實現了鍵 盤掃描算法,掃描過程相對比較簡單;而且本發明利用輸入輸出方向的改變, 速度較快,簡化了檢測過程,利用該擴展芯片既節約了引腳,又使得算法簡 單明了。
圖1為本發明一實施例使用的鍵盤示意圖。 圖2為本發明一實施例使用的電路示意圖。圖3為本發明的一實施例的流程圖。
具體實施例方式
下面結合附圖給出本發明較佳實施例,以詳細說明本發明的技術方案。 如圖1所示,本發明使用鍵盤掃描方法的鍵盤包括復數個行信號引腳 KBR1 KBR5和復數個列信號引腳KBC1 KBC5組成的矩陣,每一行信號引腳 和列信號引腳對應一開關的兩端,比如第一行信號引腳KBR1和第一列信號 引腳KBC1分別對應第一行第一列開關SW11的兩端,當開關SW11被打開(對 應的按鍵被按下時),開關SW11將第一行信號引腳KBR1和第一列信號引腳 KBC1導通連接。如圖2所示, 一主芯片MSM6280和一擴展芯片PCA9555通過 12C總線連接,該I2C總線包括串行數據線SDA和串行時鐘線SCL。 一中斷引 腳I2C—INT —端與擴展芯片的中斷請求信號輸出端I^T連接,另一端與主芯 片的外部通用輸入輸出端GPIO連接,當擴展芯片的中斷請求信號輸出端I ^ 有變化時,通過中斷引腳I2C—INT產生中斷。行信號引腳KBR1 KBR5和擴展 芯片上對應的控制引腳P01 P05對應連接,列信號引腳KBC1 KBC5和擴展 芯片上對應的控制引腳P12 P15對應連接。其中,擴展芯片PCA9555的第 一地址輸入端AO連接一第五電阻R5和第六電阻R6,第五電阻R5連接第一 電源端VDD1,第六電阻R6接地,類似地,第二地址輸入端A1連接一第一電 阻Rl和第三電阻R3,第三地址輸入端A2連接一第二電阻R2和第四電阻R4, 第一電阻Rl和第二電阻R2連接第二電源端VDD2,第三電阻R3和第四電阻 R4接地;在使用時,只要在第五電阻R5和第六電阻R6、第一電阻R1和第 三電阻R3、第二電阻R2和第四電阻R4之間選擇一電阻即可,比如選擇第一 電阻Rl、第二電阻R2和第五電阻R5,則A0A1A2二111,選通控制芯片PCA9555 上對應的引腳。
本發明鍵盤掃描方法的包括以下步驟-步驟IOI、初始化擴展芯片將行信號引腳KBR1 KBR5設置為輸出端和 低電平,同時將列信號引腳KBC1 KBC5設置為輸入端和高電平; 步驟102、將一中斷處理程序注冊到中斷引腳I2C_INT上; 步驟103、在鍵盤上進行按鍵擴展芯片的中斷請求信號輸出端TST發 生變化,通過中斷引腳lt—INT將產生一個中斷,進入中斷處理程序,同時 按鍵將一對應的開關打開,該開關將對應的列信號引腳與行信號引腳連接并 導通;比如按了 "H"鍵,并設它對應的開關為第一行第一列開關SWll,則 此時開關SW11打開并將第一列信號引腳KBC1與第一行信號引腳KBR1連接 并導通;
步驟104、讀出為低電平的列信號引腳并確定按鍵的列號通過上述按 鍵打開對應的開關將對應的列信號引腳和對應的行信號引腳連接并導通,列 信號引腳被拉底變為低電平,讀出為低電平(其值為"0")的列信號引腳, 就能確定列號;比如上述第一列信號引腳KBC1與第一行信號引腳KBR1連接 并導通后,第一列信號引腳KBC1由高電平變為低電平,其它列信號引腳 KBC2 KBC5保持不變,都為高電平;因此,讀出各個列信號引腳的值,只要 有一列信號引腳的電平信號值為"0",就是被按鍵的,就能確定該按鍵的 列號了;
步驟105、重新配置行信號引腳和列信號引腳的輸入輸出端和電平信號 將行信號引腳KBR1 KBR5設置為輸入端和高電平,同時將列信號引腳KBC1 KBC5設置為輸出端和低電平;
步驟106、讀出為低電平的行信號引腳并確定按鍵的行號因為上述按 鍵將對應的行信號引腳和對應的列信號引腳連接并選通,對應的行信號引腳 被拉底變為低電平,讀出為低電平(其值為"0")的行信號引腳,就能確 定行號;比如還是以"H"鍵為例,當按了 "H"鍵后,則第一行第一列開關 SW11導通,第一列信號引腳KBC1與第一行信號引腳KBR1連接并選通,第一 行信號引腳KBR1由高電平變為低電平,其它行信號引腳KBR2 KBR5保持不
7變,都為高電平;因此,讀出各個行信號引腳的值,只要有一行信號引腳的 電平信號值為"0",就能確定該按鍵的行號了;
步驟107、恢復擴展芯片的初始化設置,回到步驟S3,等待下一次按鍵;
步驟108、根據確定的行號和列號,確定具體按鍵碼,并發送給應用層 進行相應的處理;比如通過上述步驟后,"H"鍵的行號和列號被確定了, 就能確定具體按鍵碼,最后手機或電腦鍵盤就可以完成相應的操作了。
其中,以一種編程語言為例給出步驟101中的初始化擴展芯片的實現方
式,該參考代碼如下
Void PCA9555—iic—initialize0
/氺initializing default settings承/ /氺configure Row 10 to output*/ result = PCA9555—IICWrite(REG—CONFIG—0, 0x00); if (!result)
{
return ;
/^configure Column 10 to i叩ut, for PCA9555, it is default 1 when 10 is configured i叩ut承/
result = PCA9555—IICWrite(REG—CONFIG—1, 0xFF); if (!result)
return ;
A configure row to low result = PCA9555—IICWrite(REG_0UTPUT_0, (0x00));if (!result) return;
其中,以一種編程語言為例給出步驟102和103中的中斷處理程序的實 現方式,該實例中由于在處理過程中,檢測行號時,會產生一個新的電平轉 換信號,導致新的中斷產生,但該信號完全可以由軟件編程屏蔽掉,不產生 負作用。該參考代碼如下
void PCA9555一keypad—handler0
byte read—input—0, read一input」;/*byte is unsigned char*/
byte read—row, read—col;
boolean result 二 false;
read—input_0 = read—input—1 二 OxFF;
read一row二Oxff = read_col=0xff; /氺5氺5=25 keypad氺/ /氺read column*/
result = PCA9555—1ICRead(REG—INPUT—1, (byte
氺)(&read—input—1));
if (!result)
return;
if ((read—input—1&0xF8)==0x78) read_col = 0;<formula>formula see original document page 10</formula>ifwj) ddv^9Mpu9s /氺9TpuBij o:^ uo"fTB3]:];ddB o:)_ puss pire 9p03 04 cJbui氺/
((SM03—pB9J[)卵(S〉叢OJ—pB9J) ) JT
/承ss9。3cxid j叫i:mj cn uo卩bw[(Wb en puss pure 9p03 叫:;oq_ dsui u叫4 ':;o3叢cu:氺/
(JOXO二二 (Jlxo30飛ndu廠pB9J))ssp
(丄口0== (Jix0恥飛ndu廠pe3j))jt 9S];a
二叢cxi—pB9j; (q i xo二 (j t xo恥l幽t —p腿))j t 3S ia
:g 二 AVCXI—pB9J[
(p i xq== (j i xo o飛ndu廠pB9J)) j t 9S13
:,二 AVOJ—pB9J
(31 xo== (J1 x。恥飛ndu廠p簡))j t
(,s叫)h
雖6/8彰法能改
9 'z^s0,00i800sresult = PCA9555—IICWrite(REG—CONFIG—1, OxFF); if (!result)
return ;
result = PCA9555—IICWrite(REG—OUTPUT—0, (0x00)); if (!result)
return;
雖然以上描述了本發明的具體實施方式
,但是本領域的技術人員應當理 解,這些僅是舉例說明,在不背離本發明的原理和實質的前提下,可以對這 些實施方式做出多種變更或修改,甚至將本發明的掃描算法可以集成到主芯 片中。因此,本發明的保護范圍由所附權利要求書限定。
權利要求
1、一種鍵盤掃描方法,鍵盤包括復數個行信號引腳和復數個列信號引腳組成的矩陣,每一行信號引腳和每一列信號引腳分別對應一開關的兩端,一主芯片和一擴展芯片通過一總線連接,一中斷引腳的一端與該擴展芯片的一中斷請求信號輸出端連接,另一端與該主芯片的一外部通用輸入輸出端,這些行信號引腳和列信號引腳與該擴展芯片上對應的控制引腳對應連接,其特征在于,該鍵盤掃描方法包括以下步驟S1、初始化該擴展芯片;S2、將一中斷處理程序注冊到中斷引腳上;S3、在鍵盤上進行按鍵;S4、讀出為低電平的列信號引腳并確定按鍵的列號;S5、重新配置行信號引腳和列信號引腳的輸入輸出端和電平信號;S6、讀出為低電平的行信號引腳并確定按鍵的行號;S7、恢復擴展芯片的初始化設置,回到步驟S3,等待下一次按鍵;S8、根據確定的行號和列號,確定具體按鍵碼,并發送給一應用層進行相應的處理。
2、 如權利要求1所述的鍵盤掃描方法,其特征在于,該總線包括一串 行數據線和一串行時鐘線。
3、 如權利要求1所述的鍵盤掃描方法,其特征在于,該步驟S1包括以 下過程將行信號引腳設置為輸出端和低電平,同時將列信號引腳設置為輸 入端和高電平。
4、 如權利要求1所述的鍵盤掃描方法,其特征在于,該步驟S3包括以 下過程當該擴展芯片的中斷請求信號輸出端發生變化時,通過該中斷引腳 將產生一個中斷,進入中斷處理程序,同時按鍵將一對應的開關打開,該開 關將對應的列信號弓I腳與行信號弓I腳連接并導通。
5、 如權利要求1所述的鍵盤掃描方法,其特征在于,該步驟S4包括以下過程對應的一列信號引腳被拉底變為低電平,讀出為低電平的列信號引 腳,以確定該按鍵的列號。
6、 如權利要求1所述的鍵盤掃描方法,其特征在于,該步驟S5包括以下過程將行信號引腳設置為輸入端和高電平,同時將列信號引腳設置為輸 出端和低電平。
7、 如權利要求1所述的鍵盤掃描方法,其特征在于,該步驟S6包括以 下過程對應的一行信號引腳被拉底變為低電平,讀出為低電平的行信號引腳,以確定該按鍵的行號。
全文摘要
本發明公開了一種鍵盤掃描方法,其包括以下步驟S1.初始化擴展芯片;S2.將中斷處理程序注冊到中斷引腳上;S3.在鍵盤上進行按鍵;S4.讀出為低電平的列信號引腳并確定按鍵的列號;S5.重新配置行信號引腳和列信號引腳的輸入輸出端和電平信號;S6.讀出為低電平的行信號引腳并確定按鍵的行號;S7.恢復擴展芯片的初始化設置,回到步驟S3,等待下一次按鍵;S8.根據確定的行號和列號,確定具體按鍵碼,并發送給一應用層進行相應的處理。該鍵盤掃描方法擴展了更多的引腳,掃描過程相對比較簡單。
文檔編號H03M11/20GK101626247SQ20081004032
公開日2010年1月13日 申請日期2008年7月8日 優先權日2008年7月8日
發明者斌 吳 申請人:希姆通信息技術(上海)有限公司