- UID
- 872235
|
按键操作,对于任何的平台来说都是最重要的输入接口,其中不乏许多方式,各有所长,可以说是五花八门;以前的就有宏晶科技的程序,一时间在网上好评不断(此处不赘述),下面介绍另一种按键操作方式:
1、首先我们先看下汇编的按键代码,平台pic芯片、asm语言!
1)
CHK_ON_OFF_KEY:
SZ ON_OFF_KEY
CLR ON_OFF_KEY_FLAG
SZ ON_OFF_KEY
JMP CHK_ON_OFF_KEY_OUT
SNZ ON_OFF_KEY_FLAG
SET ON_OFF_KEY_EDGE
SET ON_OFF_KEY_EDGE
CHK_ON_OFF_KEY_OUT:
这是一段按键(点触式)汇编代码,获取信号量(标志位)ON_OFF_KEY_EDGE,进行利用,其中ON_OFF_KEY位是按键输入位,判断按键0的方式;
首先,这个按键程序采用循环模式查询方式,其特点在于,不会中断程序,或者有delay等程序浪费mpu资源;
其次,有个小小的问题就是,按键在抗浪涌冲击,或者是脉冲群干扰测试中,很难通过测试,这样就需要增加去抖的程序,如何改敬请继续关注;
另外,可以将此程序用C来改编下,以适合移植到更多的平台(可以自己先尝试下);
2)下面,将会采用一般按ANSIC C 语言描述下上面的汇编程序(可扩展平台):
if( ! ON_OFF_KEY )
}
if( ! ON_OFF_KEY_FLAG )
{
ON_OFF_KEY_FLAG = 1;
ON_OFF_KEY_EDGE = 1;
}
}
else ON_OFF_KEY_FLAG = 0;
首先,可以对其进行功能测试;
然后,可以反汇编下,看看其汇编代码怎么样,要考虑到执行的效率,空间的占有量(经测试后反汇编出来的仅7条语言,效率和空间符合要求);
这一段代码是以上的汇编换成了C语言来编写,代码量没有增加,并且没有影响到程序的效率问题;当然,本程序是存在同上的缺点(按键无消抖)。 |
|