78840992 发表于 2010-11-4 11:49:57

请教按键处理程序

现在碰到一个按键处理的问题请高手指点下思路   我用汇编写的   
       我需要通过按键控制输出一定时间的低电平后再置高, 按下后松开与不松开都执行同样的一次操作   直到按键执行下一次按键操作再执行相同德操作    这个在程序里面怎么实现???   怎么设置标志位???

biansf2001 发表于 2010-11-4 13:51:25

if(key电平是低)

   key计数++;
   if(key计数>常量1) key=常量1
   if(key计数==常量2) //常量2<常量1
   {
         key按下,执行程序;
      }

else key计数=0;

RENESAS-etouch 发表于 2010-11-4 17:13:03

我就说一下大致的思路吧
用到的寄存器:
状态寄存器KFLAG
计时寄存器KSECL
工作状态寄存器WFLAG
按键检测部分:程序隔一段时间检测按键的IO口状态,若为低电平则致kflag的0位为1。同时开始ksecl计时,在计时到消抖的时间后清零,同时将KFLAG的1位和7位置一,第1位为按键有效标志位。而第7位为长按键标志位,按键检测时若这一位为1且按键IO口为低电平则不处理按键程序。这样保证按下后不松开也只处理一次,一直到按键IO口为高电平,这时清掉所有的寄存器和标志位。
按键处理部分:若KFLAG的第1位为1则致WFLAG的0位为1。同时清零kflag的0位。
工作输出部分:根据wflag的0位输出固定时间的低电平,输出完后清零。

cmcq 发表于 2011-9-8 16:50:11

还需要将消除按键抖动加进去,不然很受伤
页: [1]
查看完整版本: 请教按键处理程序