首页 > 代码库 > 嵌入式实时系统程序开发一:按键程序编写

嵌入式实时系统程序开发一:按键程序编写

 为了回顾以前的东西,以及把操作系统的思想能用在处理器的多任务操作上,会持续连载一些文章,这些思想主要借鉴周慈航《基于嵌入式实时系统程序设计技术》一书

键盘程序控制技术:

键盘作为输入输出口,是我们常用的一个模块,下面把自己总结的键盘程序大体描绘一下。

键盘中有两个问题我们需要解决:一个是防抖,一个是要避免连击。

对于防抖:通常我们加延时函数,等待按键稳定后再执行后面的步骤,但是具体要延时多长时间只能凭借经验或尝试的办法,不可靠,更好的办法是我们可以设置两个状态变量,分别保存按键上一时刻和这一时刻的状态,当两个状态一样时,说明按键状态稳定。

避免连击:连击通常也会造成不可预知的操作,避免连击就是让按键一次只响应一次,为此我们需要检测按下和释放两种状态,然后再执行相应的操作。一般有两种方法,一是按键按下,执行相应操作,然后检测释放;二是,检测按键按下并释放后,然后执行相应操作。我一般用第二种。

程序流程:

int   TaskKey(void* pdata)

{

  INT8U key,key0;

  while(1)

  {

    OSTimeDly(1);

    key=keyin();       

    if(key=未按下|key!=key0)        //如果按键没有按下或者按键前后状态不一,继续检查按键状态

    {

      key0=key;

      continue;

    }

    which(key)

    {

      执行相应按键解析函数,并更新显示消息。   

    }

    while(1)

    {

      key=keyin();

      if(key释放) break;                     //如果按键释放,跳出循环,一次按键相应操作完成

      OSTimeDly(1);

 

    }

  }

}

嵌入式实时系统程序开发一:按键程序编写