本发明涉及pos机程序领域,尤其涉及一种应用于pos系统的扫描按键方法。
背景技术:
随着刷卡或二维码消费的增多,pos机应用也越来越广泛。进行刷卡或二维码消费时,需要键入支付密码,而诸如键盘侧录等方式会攻击pos机系统,盗取用户的支付密码和支付账户,造成在pos机系统上消费用户的财产损失。
技术实现要素:
本发明的目的在于提供一种应用于pos系统的扫描按键方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明所述应用于pos系统的扫描按键方法,所述方法:
s1,预先设置根据历史按键的行列电平输入状态数据获得的键盘按键表;
s2,当有按键按下时,调用按键扫描函数,随机选取预设扫描方法得到当前被扫描行或列的电平数据;
所述预设扫描方法包括:拉高扫描列方法、拉低扫描列方法、拉高扫描行方法、拉低扫描行方法;
s3,在预先设置的键盘按键表的基础上,结合当前被扫描行或列的电平数据,获得被按下的按键并存入缓存区,完成一次按键的扫描。
优选地,相邻两次按键扫描的时间间隔为10毫秒。
优选地,所述预设扫描方法为拉高扫描列方法,具体包括以下步骤:
a1,判断列当前计数是否小于预设列的最大计数,如果是,则进入a2;如果否,则记录当前按键的状态数据;
a2,设置所有列和所有行所对应针脚的电阻下拉,设置所有列和所有行所对应针脚为输入;
a3,设置被扫描列所对应针脚为输出,设置被扫描列所对应针脚为高电平;
a4,判断行的计数是否小于预设行的最大计数,如果是,则记录被扫描行对应针脚输出高电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回a1。
优选地,所述预设扫描方法为拉低扫描列方法,具体包括以下步骤:
b1,判断列当前计数是否小于预设列的最大计数,如果是,则进入b2;如果否,则记录当前按键的状态数据;
b2,设置所有列和所有行所对应针脚的电阻上拉,设置所有列和所有行所对应针脚为输入;
b3,设置被扫描列所对应针脚为输出,设置被扫描列所对应针脚为低电平;
b4,判断行的计数是否小于预设行的最大计数,如果是,则记录被扫描行对应针脚输出低电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回b1。
优选地,所述预设扫描方法为拉高扫描行方法,具体包括以下步骤:
c1,判断行当前计数是否小于预设行的最大计数,如果是,则进入c2;如果否,则记录当前按键的状态数据;
c2,设置所有列和所有行所对应针脚的电阻下拉,设置所有列和所有行所对应针脚为输入;
c3,设置被扫描行所对应针脚为输出,设置被扫描行所对应针脚为高电平;
c4,判断列的计数是否小于预设列的最大计数,如果是,则记录被扫描列对应针脚输出高电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回c1。
优选地,所述预设扫描方法为拉低扫描行方法,具体包括以下步骤:
d1,判断行当前计数是否小于预设行的最大计数,如果是,则进入d2;如果否,则记录当前按键的状态数据;
d2,设置所有列和所有行所对应针脚的电阻上拉,设置所有列和所有行所对应针脚为输入;
d3,设置被扫描行所对应针脚为输出,设置被扫描行所对应针脚为低电平;
d4,判断列的计数是否小于预设列的最大计数,如果是,则记录被扫描列对应针脚输出低电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回d1。
优选地,在步骤s3之后还包括以下步骤:
s4,检测缓存区中是否有新更新的按键,如果有,则检测是否需要播放按键音;如果是,则播放按键音;如果否,则不播放按键音;
在检测是否需要播放按键音的同时,唤醒读取按键的线程。
本发明的有益效果是:
使用本发明所述方法在按键扫描过程中随机使用不同预设扫描方法,避免键盘侧录等方式对按键扫描过程的攻击,保证了数据的安全性。
附图说明
图1是应用于pos系统的扫描按键方法的流程示意图;
图2是拉高扫描列方法的流程示意图;
图3是拉低扫描列方法的流程示意图;
图4是拉高扫描行方法的流程示意图;
图5是拉低扫描行方法的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
实施例
本实施例所述应用于pos系统的扫描按键方法,所述方法:
s1,预先设置根据历史按键的行列电平输入状态数据获得的键盘按键表;
s2,当有按键按下时,调用按键扫描函数,随机选取预设扫描方法得到当前被扫描行或列的电平数据;
所述预设扫描方法包括:拉高扫描列方法、拉低扫描列方法、拉高扫描行方法、拉低扫描行方法;
s3,在预先设置的键盘按键表的基础上,结合当前被扫描行或列的电平数据,获得被按下的按键并存入缓存区,完成一次按键的扫描;
s4,检测缓存区中是否有新更新的按键,如果有,则检测是否需要播放按键音;如果是,则播放按键音;如果否,则不播放按键音;在检测是否需要播放按键音的同时,唤醒读取按键的线程。
更详细的解释说明为:
(一)相邻两次按键扫描的时间间隔为10毫秒。
(二)
1、所述预设扫描方法为拉高扫描列方法,具体包括以下步骤:
a1,判断列当前计数是否小于预设列的最大计数,如果是,则进入a2;如果否,则记录当前按键的状态数据;
a2,设置所有列和所有行所对应针脚的电阻下拉,设置所有列和所有行所对应针脚为输入;
a3,设置被扫描列所对应针脚为输出,设置被扫描列所对应针脚为高电平;
a4,判断行的计数是否小于预设行的最大计数,如果是,则记录被扫描行对应针脚输出高电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回a1。
2、所述预设扫描方法为拉低扫描列方法,具体包括以下步骤:
b1,判断列当前计数是否小于预设列的最大计数,如果是,则进入b2;如果否,则记录当前按键的状态数据;
b2,设置所有列和所有行所对应针脚的电阻上拉,设置所有列和所有行所对应针脚为输入;
b3,设置被扫描列所对应针脚为输出,设置被扫描列所对应针脚为低电平;
b4,判断行的计数是否小于预设行的最大计数,如果是,则记录被扫描行对应针脚输出低电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回b1。
3、所述预设扫描方法为拉高扫描行方法,具体包括以下步骤:
c1,判断行当前计数是否小于预设行的最大计数,如果是,则进入c2;如果否,则记录当前按键的状态数据;
c2,设置所有列和所有行所对应针脚的电阻下拉,设置所有列和所有行所对应针脚为输入;
c3,设置被扫描行所对应针脚为输出,设置被扫描行所对应针脚为高电平;
c4,判断列的计数是否小于预设列的最大计数,如果是,则记录被扫描列对应针脚输出高电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回c1。
4、所述预设扫描方法为拉低扫描行方法,具体包括以下步骤:
d1,判断行当前计数是否小于预设行的最大计数,如果是,则进入d2;如果否,则记录当前按键的状态数据;
d2,设置所有列和所有行所对应针脚的电阻上拉,设置所有列和所有行所对应针脚为输入;
d3,设置被扫描行所对应针脚为输出,设置被扫描行所对应针脚为低电平;
d4,判断列的计数是否小于预设列的最大计数,如果是,则记录被扫描列对应针脚输出低电平时,当前被扫描列和被扫描行所对应的按键状态数据;如果否,则返回d1。
本发明所述方法由中央处理器负责解码,需要用到针脚的上拉或下拉电阻、一个中断、一个硬件定时器。每次中断时扫描按键一次,同时激活定时器,定时器每十毫秒触发一次,每次也扫描按键一次,当按键解码完成不再需要继续扫描时,会自动关闭该定时器。
扫描按键时,按扫描行或扫描列对应的通用输入输出针脚的上拉或下拉电阻分类,共有四种扫描按键方法,分别为:拉高扫描列方法、拉低扫描列方法、拉高扫描行方法、拉低扫描行方法,在程序撰写时,赋予上述四种方法唯一的编码号。
每次扫描按键时,从四个编码号中随机选取编码号,保证了每个按键不会和某一特定的时序相对应,增加了攻击的难度。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
使用本发明所述方法在按键扫描过程中随机使用不同预设扫描方法,避免键盘侧录等方式对按键扫描过程的攻击,保证了数据的安全性。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。