本發(fā)明涉及pos機程序領(lǐng)域,尤其涉及一種應(yīng)用于pos系統(tǒng)的掃描按鍵方法。
背景技術(shù):
隨著刷卡或二維碼消費的增多,pos機應(yīng)用也越來越廣泛。進行刷卡或二維碼消費時,需要鍵入支付密碼,而諸如鍵盤側(cè)錄等方式會攻擊pos機系統(tǒng),盜取用戶的支付密碼和支付賬戶,造成在pos機系統(tǒng)上消費用戶的財產(chǎn)損失。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種應(yīng)用于pos系統(tǒng)的掃描按鍵方法,從而解決現(xiàn)有技術(shù)中存在的前述問題。
為了實現(xiàn)上述目的,本發(fā)明所述應(yīng)用于pos系統(tǒng)的掃描按鍵方法,所述方法:
s1,預(yù)先設(shè)置根據(jù)歷史按鍵的行列電平輸入狀態(tài)數(shù)據(jù)獲得的鍵盤按鍵表;
s2,當(dāng)有按鍵按下時,調(diào)用按鍵掃描函數(shù),隨機選取預(yù)設(shè)掃描方法得到當(dāng)前被掃描行或列的電平數(shù)據(jù);
所述預(yù)設(shè)掃描方法包括:拉高掃描列方法、拉低掃描列方法、拉高掃描行方法、拉低掃描行方法;
s3,在預(yù)先設(shè)置的鍵盤按鍵表的基礎(chǔ)上,結(jié)合當(dāng)前被掃描行或列的電平數(shù)據(jù),獲得被按下的按鍵并存入緩存區(qū),完成一次按鍵的掃描。
優(yōu)選地,相鄰兩次按鍵掃描的時間間隔為10毫秒。
優(yōu)選地,所述預(yù)設(shè)掃描方法為拉高掃描列方法,具體包括以下步驟:
a1,判斷列當(dāng)前計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則進入a2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
a2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻下拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
a3,設(shè)置被掃描列所對應(yīng)針腳為輸出,設(shè)置被掃描列所對應(yīng)針腳為高電平;
a4,判斷行的計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則記錄被掃描行對應(yīng)針腳輸出高電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回a1。
優(yōu)選地,所述預(yù)設(shè)掃描方法為拉低掃描列方法,具體包括以下步驟:
b1,判斷列當(dāng)前計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則進入b2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
b2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻上拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
b3,設(shè)置被掃描列所對應(yīng)針腳為輸出,設(shè)置被掃描列所對應(yīng)針腳為低電平;
b4,判斷行的計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則記錄被掃描行對應(yīng)針腳輸出低電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回b1。
優(yōu)選地,所述預(yù)設(shè)掃描方法為拉高掃描行方法,具體包括以下步驟:
c1,判斷行當(dāng)前計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則進入c2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
c2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻下拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
c3,設(shè)置被掃描行所對應(yīng)針腳為輸出,設(shè)置被掃描行所對應(yīng)針腳為高電平;
c4,判斷列的計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則記錄被掃描列對應(yīng)針腳輸出高電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回c1。
優(yōu)選地,所述預(yù)設(shè)掃描方法為拉低掃描行方法,具體包括以下步驟:
d1,判斷行當(dāng)前計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則進入d2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
d2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻上拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
d3,設(shè)置被掃描行所對應(yīng)針腳為輸出,設(shè)置被掃描行所對應(yīng)針腳為低電平;
d4,判斷列的計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則記錄被掃描列對應(yīng)針腳輸出低電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回d1。
優(yōu)選地,在步驟s3之后還包括以下步驟:
s4,檢測緩存區(qū)中是否有新更新的按鍵,如果有,則檢測是否需要播放按鍵音;如果是,則播放按鍵音;如果否,則不播放按鍵音;
在檢測是否需要播放按鍵音的同時,喚醒讀取按鍵的線程。
本發(fā)明的有益效果是:
使用本發(fā)明所述方法在按鍵掃描過程中隨機使用不同預(yù)設(shè)掃描方法,避免鍵盤側(cè)錄等方式對按鍵掃描過程的攻擊,保證了數(shù)據(jù)的安全性。
附圖說明
圖1是應(yīng)用于pos系統(tǒng)的掃描按鍵方法的流程示意圖;
圖2是拉高掃描列方法的流程示意圖;
圖3是拉低掃描列方法的流程示意圖;
圖4是拉高掃描行方法的流程示意圖;
圖5是拉低掃描行方法的流程示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖,對本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
實施例
本實施例所述應(yīng)用于pos系統(tǒng)的掃描按鍵方法,所述方法:
s1,預(yù)先設(shè)置根據(jù)歷史按鍵的行列電平輸入狀態(tài)數(shù)據(jù)獲得的鍵盤按鍵表;
s2,當(dāng)有按鍵按下時,調(diào)用按鍵掃描函數(shù),隨機選取預(yù)設(shè)掃描方法得到當(dāng)前被掃描行或列的電平數(shù)據(jù);
所述預(yù)設(shè)掃描方法包括:拉高掃描列方法、拉低掃描列方法、拉高掃描行方法、拉低掃描行方法;
s3,在預(yù)先設(shè)置的鍵盤按鍵表的基礎(chǔ)上,結(jié)合當(dāng)前被掃描行或列的電平數(shù)據(jù),獲得被按下的按鍵并存入緩存區(qū),完成一次按鍵的掃描;
s4,檢測緩存區(qū)中是否有新更新的按鍵,如果有,則檢測是否需要播放按鍵音;如果是,則播放按鍵音;如果否,則不播放按鍵音;在檢測是否需要播放按鍵音的同時,喚醒讀取按鍵的線程。
更詳細(xì)的解釋說明為:
(一)相鄰兩次按鍵掃描的時間間隔為10毫秒。
(二)
1、所述預(yù)設(shè)掃描方法為拉高掃描列方法,具體包括以下步驟:
a1,判斷列當(dāng)前計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則進入a2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
a2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻下拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
a3,設(shè)置被掃描列所對應(yīng)針腳為輸出,設(shè)置被掃描列所對應(yīng)針腳為高電平;
a4,判斷行的計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則記錄被掃描行對應(yīng)針腳輸出高電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回a1。
2、所述預(yù)設(shè)掃描方法為拉低掃描列方法,具體包括以下步驟:
b1,判斷列當(dāng)前計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則進入b2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
b2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻上拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
b3,設(shè)置被掃描列所對應(yīng)針腳為輸出,設(shè)置被掃描列所對應(yīng)針腳為低電平;
b4,判斷行的計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則記錄被掃描行對應(yīng)針腳輸出低電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回b1。
3、所述預(yù)設(shè)掃描方法為拉高掃描行方法,具體包括以下步驟:
c1,判斷行當(dāng)前計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則進入c2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
c2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻下拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
c3,設(shè)置被掃描行所對應(yīng)針腳為輸出,設(shè)置被掃描行所對應(yīng)針腳為高電平;
c4,判斷列的計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則記錄被掃描列對應(yīng)針腳輸出高電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回c1。
4、所述預(yù)設(shè)掃描方法為拉低掃描行方法,具體包括以下步驟:
d1,判斷行當(dāng)前計數(shù)是否小于預(yù)設(shè)行的最大計數(shù),如果是,則進入d2;如果否,則記錄當(dāng)前按鍵的狀態(tài)數(shù)據(jù);
d2,設(shè)置所有列和所有行所對應(yīng)針腳的電阻上拉,設(shè)置所有列和所有行所對應(yīng)針腳為輸入;
d3,設(shè)置被掃描行所對應(yīng)針腳為輸出,設(shè)置被掃描行所對應(yīng)針腳為低電平;
d4,判斷列的計數(shù)是否小于預(yù)設(shè)列的最大計數(shù),如果是,則記錄被掃描列對應(yīng)針腳輸出低電平時,當(dāng)前被掃描列和被掃描行所對應(yīng)的按鍵狀態(tài)數(shù)據(jù);如果否,則返回d1。
本發(fā)明所述方法由中央處理器負(fù)責(zé)解碼,需要用到針腳的上拉或下拉電阻、一個中斷、一個硬件定時器。每次中斷時掃描按鍵一次,同時激活定時器,定時器每十毫秒觸發(fā)一次,每次也掃描按鍵一次,當(dāng)按鍵解碼完成不再需要繼續(xù)掃描時,會自動關(guān)閉該定時器。
掃描按鍵時,按掃描行或掃描列對應(yīng)的通用輸入輸出針腳的上拉或下拉電阻分類,共有四種掃描按鍵方法,分別為:拉高掃描列方法、拉低掃描列方法、拉高掃描行方法、拉低掃描行方法,在程序撰寫時,賦予上述四種方法唯一的編碼號。
每次掃描按鍵時,從四個編碼號中隨機選取編碼號,保證了每個按鍵不會和某一特定的時序相對應(yīng),增加了攻擊的難度。
通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:
使用本發(fā)明所述方法在按鍵掃描過程中隨機使用不同預(yù)設(shè)掃描方法,避免鍵盤側(cè)錄等方式對按鍵掃描過程的攻擊,保證了數(shù)據(jù)的安全性。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視本發(fā)明的保護范圍。