程序的多任务和资源复用举例

时间:2012-07-04来源:网络


/*---------------------------------------------------------------------------*/
/*按键扫描,包含两个扫描任务*/
/**********************************************
每次系统时间进入一次,20ms.这里把20MS判断放进来,好看点
按键扫描循环
为简单化,没使用队列保存键值,使用标志
那些重复发出N键,在这个结构中非常容易加上
**********************************************/
void Key_MainLoop()
{
  if(fSYS_20ms==0)return;

  switch(mKey1SwapTask){
   case 0:/***有按键按下吗?***/
      if(iKey1==0){
       mKey1SwapTask=1;
      }
      break;
  case 1: /***键按下去抖延时***/
      mKey1SwapTask=2;          /***延时一个系统时间***/
      break;
  case 2: /***键值判断***/
      if(iKey1==0){
       fKey1=1;             /*按键有效*/
       mKey1SwapTask=3;         /*去按键去抖*/
      }
      else mKey1SwapTask=0;        /*抖动*/
      break;
  case 3: /***有松开吗?***/
      if(iKey1==1){
       mKey1SwapTask=4;
      }
      break;
  case 4: /***键松开去抖延时***/
      mKey1SwapTask=5;          /***延时一个系统时间***/
      break;
  case 5: /***键值判断***/
      if(iKey1==1){
       mKey1SwapTask=0;         /*去按键检测开始*/
      }
      else mKey1SwapTask=3;        /*抖动*/
      break;
  }


  switch(mKey2SwapTask){
   case 0:/***有按键按下吗?***/
      if(iKey2==0){
       mKey2SwapTask=1;
      }
      break;
  case 1: /***键按下去抖延时***/
      mKey2SwapTask=2;          /***延时一个系统时间***/
      break;
  case 2: /***键值判断***/
      if(iKey2==0){
       fKey2=1;             /*按键有效*/
       mKey2SwapTask=3;         /*去按键去抖*/
      }
      else mKey2SwapTask=0;        /*抖动*/
      break;
  case 3: /***有松开吗?***/
      if(iKey2==1){
       mKey2SwapTask=4;
      }
      break;
  case 4: /***键松开去抖延时***/
      mKey2SwapTask=5;          /***延时一个系统时间***/
      break;
  case 5: /***键值判断***/
      if(iKey2==1){
       mKey2SwapTask=0;         /*去按键检测开始*/
      }
      else mKey2SwapTask=3;        /*抖动*/
      break;
  }
}
1 2 3

关键词: 多任务 资源复用

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版