找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1163|回复: 0
打印 上一主题 下一主题
收起左侧

下面单片机程序在裸机上正常,在OS任务中只能识别短按,无法得到长按值,不知为何

[复制链接]
跳转到指定楼层
楼主
ID:33544 发表于 2020-3-6 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1黑币
下面程序在裸机上正常,在OS任务中只能识别短按,无法得到长按值,不知为何,请高手指点

#define const_key_time_short1  20    //短按的按键去抖动延时的时间

#define const_key_time_long1   400     //长按的按键去抖动延时的时间

#define const_key_time_short2  20    //短按的按键去抖动延时的时间

#define const_key_time_long2   400     //长按的按键去抖动延时的时间


void task4_task(void * pvParameters)      //OS任务

{

          static int uiKeyTimeCnt1=0;

        static u8  ucKeyLock1=0;

        static u8  ucShortTouchFlag1=0;



  while(1)        

        {

        

        



  if(KEY2==1)//IO是高电平,说明两个按键没有全部被按下,这时要及时清零一些标志位

  {

      ucKeyLock1=0; //按键自锁标志清零

      uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。   

            if(ucShortTouchFlag1==1)  //短按触发标志

          {

             ucShortTouchFlag1=0;

                 K2Sec_1=1;    //触发一号键的短按

          }

  }

  else if(ucKeyLock1==0)//有按键按下,且是第一次被按下

  {

     uiKeyTimeCnt1++; //累加定时中断次数

     if(uiKeyTimeCnt1>const_key_time_short1)

     {

            ucShortTouchFlag1=1;   //激活按键短按的有效标志  

     }



     if(uiKeyTimeCnt1>const_key_time_long1)

     {

            ucShortTouchFlag1=0;  //清除按键短按的有效标志



        uiKeyTimeCnt1=0;

        ucKeyLock1=1;  //自锁按键置位,避免一直触发



        K2Sec_1=2;    //触发1号键的长按



     }



  }





printf("task-2:%d\r\n",K2Sec_1);



           vTaskDelay(100 / portTICK_RATE_MS);  //增加延时节拍函数

        }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表