最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

VtorKey-輕量級(jí)短長(zhǎng)按單多擊組合動(dòng)作按鍵模塊

2023-07-06 21:50 作者:污鈔vtor  | 我要投稿

VtorKey-輕量級(jí)短長(zhǎng)按單多擊組合動(dòng)作按鍵模塊

?

?

VtorKey

VtorKey-輕量級(jí)短長(zhǎng)按單多擊組合動(dòng)作按鍵模塊

作者郵箱:vtor3478@qq.com

開發(fā)時(shí)間:2023年07月03日(周一)

相關(guān)網(wǎng)址:

https://www.bilibili.com/video/BV1sm4y1Y78Q

https://gitee.com/vtor3478/ElecModule

https://gitee.com/vtor3478/ElecModule/tree/main/VtorKey

?

00-前言

?

本設(shè)計(jì)(包括但不限于圖片,文字,視頻,代碼風(fēng)格,以下省去括號(hào))

將發(fā)布于博客園,b站,吾愛論壇,開源中國(guó),偽鈔雜貨鋪微信公眾號(hào),影子論壇等

本設(shè)計(jì)為 偽鈔 本人創(chuàng)作,轉(zhuǎn)載請(qǐng)注明出處

?

本設(shè)計(jì)能提供單擊,長(zhǎng)按,以及長(zhǎng)短按組合的按鍵反饋

本設(shè)計(jì)適用于gpio資源少,且需要較多用戶操作的情況

本設(shè)計(jì)截止至目前(20230703)僅支持輪詢,以后有機(jī)會(huì)再開發(fā)中斷模式

?

理解(并使用)本設(shè)計(jì),需要你有一點(diǎn)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),

?????????????????????????????????????????????有一定的c語(yǔ)言與單片機(jī)基礎(chǔ)

???????????????????????????有較為扎實(shí)的狀態(tài)機(jī)基礎(chǔ),

?

本設(shè)計(jì)是我基于原有的基礎(chǔ)工程《diaan》進(jìn)行設(shè)計(jì),

其中包含許多其他知識(shí),如果我沒有提及,那說明與VtorKey無(wú)關(guān)

?

軟件環(huán)境:stm32cubeide 1.12.0

硬件環(huán)境:stm32f103rct6

?

?

名詞解釋:

curState:當(dāng)前狀態(tài),記錄長(zhǎng)按,短按,彈起,消抖等狀態(tài)

lastState:用于彈起時(shí),區(qū)分剛剛是長(zhǎng)按還是短按

holdTime:持續(xù)時(shí)間,用于區(qū)分短按還是長(zhǎng)按,區(qū)分短彈起還是長(zhǎng)彈起

?

?

?

01-分析按鍵狀態(tài)

?

一個(gè)按鍵,從按下到彈起,會(huì)經(jīng)歷哪些情況

?

電平情況: ??彈起時(shí)的電平 ??????????????????????????按下后的電平

狀態(tài)可分: ??彈起 ????????????按消 ??????????????按下 ?????????彈消

按下時(shí)長(zhǎng): ??短按 ???????????長(zhǎng)按 ???????????????短彈 ??????????長(zhǎng)彈

?

?

02-單擊長(zhǎng)短按

如果curState為《按下》,如果holdTime小于《長(zhǎng)按值》認(rèn)定為《短按》并記錄

??????????????????????????????????????如果holdTime大于《長(zhǎng)按值》認(rèn)定為《長(zhǎng)按》并記錄

當(dāng)lastState與curState將要不同時(shí),使用lastState記錄curState,然后更c(diǎn)urState

?

?

03-消抖環(huán)節(jié)

消抖的判斷代碼在長(zhǎng)短按判斷之前,只是文章介紹訪問長(zhǎng)短按之后

為了防止在觸發(fā)長(zhǎng)按的過程中觸發(fā)短按,所以需要用用彈起狀態(tài)作為一個(gè)單擊動(dòng)作的結(jié)束

當(dāng)curState為《彈起》,由于,根據(jù)lastState是短按,還是長(zhǎng)按,就可以使用對(duì)應(yīng)的返回值

?

?

?

04-組合動(dòng)作

上一次彈起與下一次按下的時(shí)間足夠小,認(rèn)為是組合動(dòng)作

?

如果要記錄組合動(dòng)作,需要一個(gè)組合內(nèi) 動(dòng)作與動(dòng)作之間《分隔符》

按習(xí)慣來(lái)說,用《短彈》作為《分隔符》比較合適

如果要記錄組合動(dòng)作,需要一個(gè)結(jié)束組合動(dòng)作結(jié)束的《結(jié)束符》

按習(xí)慣來(lái)說,用《長(zhǎng)彈》作為《結(jié)束符》比較合適

?

因?yàn)橐却督Y(jié)束符》所以響應(yīng)速度比較慢

?

當(dāng)用戶快速短按2下,并等待一段時(shí)間

其中兩次短擊之間間隔一般小于500ms,所以我使用500作為《長(zhǎng)彈》的比較值

~~~~~無(wú)限長(zhǎng)時(shí)間~~~~~~~按下~500ms~彈起~~~200ms~~~按下~~50ms~~彈起~~~~~~無(wú)限長(zhǎng)時(shí)間~~~~~

此動(dòng)作可認(rèn)為《短短按》,值為《11》

?

?

?

05-PeekCombine

為防止重復(fù)操作,為防止用戶直接修改,為防止其他意外情況

所以使用KEY_PeekCombine獲取組合動(dòng)作,

只有在組合動(dòng)作結(jié)束后才會(huì)返回有效值,

且函數(shù)內(nèi)會(huì)清空組合動(dòng)作,防止反復(fù)獲取

?

?

06-PeekAction

只提供按下動(dòng)作 ??和 ???彈起動(dòng)作

為簡(jiǎn)單環(huán)境提供按操作

不是重點(diǎn),略過,有興趣請(qǐng)自行學(xué)習(xí)

?

?

07-移植與使用流程

0701-反綁定

因?yàn)楸驹O(shè)計(jì)反綁定了project.h

所以用戶需要先創(chuàng)建project.h文件,以確保成功編譯

?

0702-時(shí)間設(shè)置

搜索VTOR_KEY_TIME_CONFIG_BY_USERSELF

在project.h中定義,并定義好時(shí)間和電平宏

?

?

?

0703-KEY_GetLevel函數(shù)

用戶只需要提供讀取key的io電平(vtor_key_user_project.c文件)

本設(shè)計(jì)使用了HAL_GPIO_ReadPin直接讀取io

?

?

0704-KEY_Init函數(shù)

初始化好vtorKeyHeader即可

?

0705-KEY_Scan函數(shù)

定時(shí)循環(huán)調(diào)用即可

?

?

0706-KEY_PeekCombine函數(shù)

根據(jù)返回值進(jìn)行判斷即可

?

?

?

?

?

?

?


VtorKey-輕量級(jí)短長(zhǎng)按單多擊組合動(dòng)作按鍵模塊的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
衡山县| 成都市| 江达县| 南乐县| 开化县| 桐乡市| 高淳县| 从化市| 郓城县| 大悟县| 罗山县| 沈丘县| 抚州市| 绥德县| 玛纳斯县| 庄河市| 镇远县| 华容县| 渝北区| 蓬莱市| 白河县| 宝山区| 古蔺县| 永寿县| 陵川县| 道孚县| 得荣县| 镇原县| 都江堰市| 闽侯县| 平定县| 林西县| 海宁市| 西乌珠穆沁旗| 佛坪县| 察隅县| 德兴市| 天镇县| 景泰县| 滕州市| 会昌县|