找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1894|回復: 0
打印 上一主題 下一主題
收起左側

下面單片機程序在裸機上正常,在OS任務中只能識別短按,無法得到長按值,不知為何

[復制鏈接]
跳轉到指定樓層
樓主
ID:33544 發(fā)表于 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;//按鍵去抖動延時計數(shù)器清零,此行非常巧妙,是我實戰(zhàn)中摸索出來的。   

            if(ucShortTouchFlag1==1)  //短按觸發(fā)標志

          {

             ucShortTouchFlag1=0;

                 K2Sec_1=1;    //觸發(fā)一號鍵的短按

          }

  }

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

  {

     uiKeyTimeCnt1++; //累加定時中斷次數(shù)

     if(uiKeyTimeCnt1>const_key_time_short1)

     {

            ucShortTouchFlag1=1;   //激活按鍵短按的有效標志  

     }



     if(uiKeyTimeCnt1>const_key_time_long1)

     {

            ucShortTouchFlag1=0;  //清除按鍵短按的有效標志



        uiKeyTimeCnt1=0;

        ucKeyLock1=1;  //自鎖按鍵置位,避免一直觸發(fā)



        K2Sec_1=2;    //觸發(fā)1號鍵的長按



     }



  }





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



           vTaskDelay(100 / portTICK_RATE_MS);  //增加延時節(jié)拍函數(shù)

        }

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表