按鍵長短按

来源:https://www.cnblogs.com/wang-jun-qi/archive/2019/09/03/11451321.html
-Advertisement-
Play Games

u8 key_return = NO_KEY; u8 key_tmp = NO_KEY; u8 key_lock = 0;//按鍵自鎖標誌,自己加的 if (key_val == NO_KEY || key_val != key_ctl.key_val) //按鍵沒有按下或者本次按鍵與上一次按鍵不相 ...


u8 key_return = NO_KEY;
u8 key_tmp = NO_KEY;
u8 key_lock = 0;//按鍵自鎖標誌,自己加的

if (key_val == NO_KEY || key_val != key_ctl.key_val) //按鍵沒有按下或者本次按鍵與上一次按鍵不相同
{
if (key_ctl.key_up < KEY_UP_TIMES) //抬鍵防抖延時
{
key_ctl.key_up++;//抬鍵計數
}
else
{
if (key_ctl.key_cnt >= KEY_LONG_TIMES) { //長按抬鍵
key_return = key_ctl.key_val | T_KEY_LONG_UP;
} else if (key_ctl.key_cnt >= KEY_SCAN_TIMES) { //短按抬鍵
key_return = key_ctl.key_val | T_KEY_SHORT_UP;
}
key_tmp = key_ctl.key_val;

key_ctl.key_val = key_val; //把最後一次的按鍵存起來,留待下次使用
key_ctl.key_cnt = 0; //按鍵計時清0
key_lock = 0;
}
}
else
{
key_ctl.key_cnt++;
if (key_ctl.key_cnt == KEY_SCAN_TIMES && key_lock == 0) { //去抖
key_ctl.key_up = 0;
key_lock = 1;//自鎖標誌置1,防止按住按鍵不鬆手後一直觸發
key_return = key_ctl.key_val | T_KEY_SHORT; //短按,暫存按鍵值
} else if (key_ctl.key_cnt == KEY_LONG_TIMES && key_lock == 0) { //長按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_LONG;
} else if (key_ctl.key_cnt == KEY_LONG_HOLD_TIMES && key_lock == 0) { //連按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_HOLD;
key_ctl.key_cnt = KEY_LONG_TIMES;
}
key_tmp = key_ctl.key_val;
}
if(key_tmp > 0x1f && key_return >= 0x80) //32-127這些鍵值不支持長按
{
key_return = NO_KEY;
}
return key_return;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 檢查軟體包是否安裝 說明: sysstat即為我們要檢測的軟體包 rpm是軟體包的管理工具, q是使用詢問模式查詢該軟體包存不存在。 then為如果條件成立,則執行下麵的命令 進階版 輸出: 腳本變命令 步驟: 註:將腳本放入 目錄前,要確保自定義命令和該目錄下已有命令不重名 ...
  • 頁:將⼀個進程的邏輯地址空間分成若⼲個⼤⼩相等的⽚ 頁框:將物理記憶體空間分成與⻚⼤⼩相同的若⼲個存儲塊 分⻚存儲:將進程中的若⼲⻚分別裝⼊多個可以不相鄰的⻚框中 頁內碎片:進程最後⼀⻚⼀般裝不滿⼀個⻚框,形成⻚內碎⽚ 頁表:實現從⻚號到⻚框號的映射 ...
  • 今天安裝軟體nginx的時候遇到的報錯:c compiler cc is not found 查了下網上的資料,解決方案也不複雜。 先說明下環境: - 伺服器:CentOS 7 - nginx:2.3.1 原因是因為缺少 gcc-c++ 的包 解決辦法很簡單,執行:yum... ...
  • ucore Lab2 lab 2 直接執行 會顯示 assert 失敗: 1 連續物理記憶體管理 1.1 page 概覽 對物理記憶體的管理,為了節省空間,也是為了配合接下來的虛擬記憶體管理,通常以某個比 byte 大一些的單位進行管理,我們稱這一單位記憶體為一" 頁(page) ",通常是 4KB.待 初 ...
  • 乙太網的發明:pc之間文件共用的情況出現 一層:物理層 網卡硬體設備:MAC地址 HUB 集線器 匯流排型結構 泛洪 廣播域/衝突域 二層 早期pc間只需要MAC地址,就可以互相共用,數據轉發 網橋--交換機 維護MAC地址表 三層:網路層 隨著網路增大,需要接入網路的設備越來越多;這時候,產生了邏輯 ...
  • 一、刪除自帶的JDK 查詢系統自帶JDK rpm -qa | grep java rpm -qa | grep jdk 刪除查詢出來的文件名 rpm -e --nodeps 文件名 命令執行成功後重新執行查看JDK命令,查看是否成功刪除。 二、安裝JDK並部署環境 https://www.oracl ...
  • 直接上碼供參考 關鍵點說明: 1.清理windows訪問記錄,包含在任務欄上右鍵出現最近訪問的程式的記錄%UserProfile%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations%UserProfile%\AppData\ ...
  • 借鑒:https://www.cnblogs.com/shijingjing07/p/9301590.html ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...