首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PIC18F单片机按键操作技巧处理 C/ASM

PIC18F单片机按键操作技巧处理 C/ASM

按键操作,对于任何的平台来说都是最重要的输入接口,其中不乏许多方式,各有所长,可以说是五花八门;以前的就有宏晶科技的程序,一时间在网上好评不断(此处不赘述),下面介绍另一种按键操作方式:

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语言来编写,代码量没有增加,并且没有影响到程序的效率问题;当然,本程序是存在同上的缺点(按键无消抖)。
返回列表