
發(fā)布
注冊(cè)
/
登錄按鍵掃描
關(guān)注創(chuàng)建者:匿名 創(chuàng)建時(shí)間:2026-01-04

按鍵掃描的實(shí)例教程
概述
VK16K33A/AA是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù)鎖存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。SEG腳接LED陽(yáng)極,GRID腳接LED陰極,可支持16SEG×8GRID的點(diǎn)陣LED顯示面板。最大支持13×3的按鍵。內(nèi)置上電復(fù)位電路,整體閃爍頻率可設(shè)置,可通過(guò)命令進(jìn)入待機(jī)模式。
第四種設(shè)計(jì)的優(yōu)點(diǎn)是只需要單片機(jī)有一個(gè)ADC接口、一根線,就能對(duì)多個(gè)按鍵進(jìn)行識(shí)別,缺點(diǎn)是按鍵內(nèi)部一旦接觸不良,則可能導(dǎo)致按鍵串位,并且按鍵產(chǎn)生的抖動(dòng)有可能會(huì)造成識(shí)別錯(cuò)誤。
改進(jìn)方法
在以上常見(jiàn)按鍵設(shè)計(jì)的基礎(chǔ)上,分享一下筆者學(xué)習(xí)和工作中總結(jié)的按鍵方案。
改進(jìn)一:
在原方案一的基礎(chǔ)上,加上與門電路,使得任何一個(gè)按鍵按下都能產(chǎn)生中斷,然后在中斷里面識(shí)別是哪個(gè)按鍵被按下。這改動(dòng)令電路不需要循環(huán)掃描,大大提高了效率。方案如圖5所示。只需要在每個(gè)按鍵對(duì)應(yīng)地增加一個(gè)二極管,利用二極管的線與特性,就可以實(shí)現(xiàn)按下任何按鍵都能產(chǎn)生中斷信號(hào),同時(shí)按鍵之間互不影響。二極管選用普通整流二極管即可,經(jīng)過(guò)測(cè)試,可靠可行。
圖5 改進(jìn)一
改進(jìn)二:
在原有ADC按鍵的基礎(chǔ)上,也可以增加二極管的方式,實(shí)現(xiàn)按鍵中斷,并在中斷服務(wù)程序里進(jìn)行AD轉(zhuǎn)換,從而識(shí)別按鍵。電路如圖6所示。
圖6 改進(jìn)二
改進(jìn)三:
按鍵時(shí)難免會(huì)造成抖動(dòng),因此必須按鍵消抖。消抖也可以通過(guò)硬件消抖和軟件消抖,這里分享一個(gè)十分簡(jiǎn)單且有效的硬件消抖方法:給按鍵并聯(lián)一個(gè)104左右的電容,這樣軟件上基本不用處理即可消除抖動(dòng)。
改進(jìn)四:
在按鍵掃描檢測(cè)的方案下,如果主循環(huán)中有某個(gè)函數(shù)占用時(shí)間較長(zhǎng),按鍵或會(huì)發(fā)生長(zhǎng)短不一的“失靈”。對(duì)此可以將按鍵掃描放到定時(shí)器中斷里面,這樣就可周期性地檢測(cè)按鍵按下的情況,在不受主循環(huán)的影響下解析出按鍵的不同狀態(tài)。
展開(kāi) 這個(gè)實(shí)例如下:它有4個(gè)任務(wù),這4個(gè)任務(wù)為按鍵掃描、聲光報(bào)警、顯示屏刷新和超聲波測(cè)距。這個(gè)實(shí)例的具體功能是通過(guò)按鍵設(shè)置測(cè)量距離的閾值,當(dāng)測(cè)距距離低于設(shè)置的閾值時(shí),觸發(fā)聲光報(bào)警并且將測(cè)量距離實(shí)時(shí)顯示在顯示屏上(這個(gè)應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn))。
2.1順序執(zhí)行的前后臺(tái)系統(tǒng)
在順序執(zhí)行的前后臺(tái)系統(tǒng)中,我會(huì)把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測(cè)距使用中斷,在中斷服務(wù)函數(shù)中獲取測(cè)量距離后進(jìn)行顯示,在主函數(shù)的循環(huán)中進(jìn)行按鍵的檢測(cè),聲光處理也放在主循環(huán)中。這樣整個(gè)程序就以變量標(biāo)志的同步方式在主循環(huán)和后臺(tái)中斷中執(zhí)行,對(duì)應(yīng)的程序代碼如圖所示:
順序執(zhí)行前后臺(tái)系統(tǒng)的主函數(shù)
順序執(zhí)行前后臺(tái)系統(tǒng)的中斷服務(wù)函數(shù)
這種架構(gòu)的優(yōu)點(diǎn)是使用簡(jiǎn)單易于理解,而缺點(diǎn)是每個(gè)任務(wù)所占的CPU時(shí)間過(guò)長(zhǎng)的話,會(huì)導(dǎo)致程序的實(shí)時(shí)性能差,就比如按鍵的檢測(cè)等。
2.2 時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)
時(shí)間片輪詢法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說(shuō)他屬于操作系統(tǒng),但在這里所說(shuō)的是基于前后臺(tái)系統(tǒng)的時(shí)間片輪詢。
時(shí)間片輪詢法的實(shí)質(zhì)其實(shí)就是選出一個(gè)定時(shí)器,每進(jìn)一次定時(shí)中斷對(duì)計(jì)數(shù)值進(jìn)行自加,在主循環(huán)中根據(jù)這個(gè)計(jì)數(shù)值執(zhí)行任務(wù),這個(gè)計(jì)數(shù)值也就是任務(wù)輪詢的時(shí)間片。
在這個(gè)實(shí)例中,如果采用時(shí)間片輪詢系統(tǒng)的話,首先選用主控芯片的任一定時(shí)器,定時(shí)器定時(shí)時(shí)間周期由我們決定,為了保證實(shí)時(shí)性和運(yùn)行效率,這個(gè)值通常取10ms、30ms、50ms等,我會(huì)將按鍵掃描輪值值設(shè)置為20ms,因?yàn)?em>按鍵抖動(dòng)的時(shí)長(zhǎng)一般為20ms,這樣處理既達(dá)到了消抖的目的,又不會(huì)漏掉按鍵的檢測(cè);
而顯示屏的刷新設(shè)置為30ms,如果你覺(jué)得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善;而超聲波測(cè)距的輪詢值設(shè)置為100ms,即每隔100模式觸發(fā)測(cè)距一次,這個(gè)測(cè)距頻率已經(jīng)能夠滿足大多數(shù)的情況了。
展開(kāi) 這個(gè)實(shí)例如下:它有4個(gè)任務(wù),這4個(gè)任務(wù)為按鍵掃描、聲光報(bào)警、顯示屏刷新和超聲波測(cè)距。這個(gè)實(shí)例的具體功能是通過(guò)按鍵設(shè)置測(cè)量距離的閾值,當(dāng)測(cè)距距離低于設(shè)置的閾值時(shí),觸發(fā)聲光報(bào)警并且將測(cè)量距離實(shí)時(shí)顯示在顯示屏上(這個(gè)應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn))。
1.順序執(zhí)行的前后臺(tái)系統(tǒng)
在順序執(zhí)行的前后臺(tái)系統(tǒng)中,我會(huì)把鍵盤掃描用查詢的方式放在while(1)中,而顯示屏刷新和超聲波測(cè)距使用中斷,在中斷服務(wù)函數(shù)中獲取測(cè)量距離后進(jìn)行顯示,在主函數(shù)的循環(huán)中進(jìn)行按鍵的檢測(cè),聲光處理也放在主循環(huán)中。
這樣整個(gè)程序就以變量標(biāo)志的同步方式在主循環(huán)和后臺(tái)中斷中執(zhí)行,對(duì)應(yīng)的程序代碼如圖所示:
順序執(zhí)行前后臺(tái)系統(tǒng)的主函數(shù)
順序執(zhí)行前后臺(tái)系統(tǒng)的中斷服務(wù)函數(shù)
這種架構(gòu)的優(yōu)點(diǎn)是使用簡(jiǎn)單易于理解,而缺點(diǎn)是每個(gè)任務(wù)所占的CPU時(shí)間過(guò)
長(zhǎng)的話,會(huì)導(dǎo)致程序的實(shí)時(shí)性能差,就比如按鍵的檢測(cè)等。
2.時(shí)間片輪詢系統(tǒng)和多任務(wù)操作系統(tǒng)
時(shí)間片輪詢法實(shí)際上通常出現(xiàn)在操作系統(tǒng)中,也就是說(shuō)他屬于操作系統(tǒng),但在這里所說(shuō)的是基于前后臺(tái)系統(tǒng)的時(shí)間片輪詢。時(shí)間片輪詢法的實(shí)質(zhì)其實(shí)就是選出一個(gè)定時(shí)器,沒(méi)進(jìn)一次定時(shí)中斷對(duì)計(jì)數(shù)值進(jìn)行自加,在主循環(huán)中根據(jù)這個(gè)計(jì)數(shù)值執(zhí)行任務(wù),這個(gè)計(jì)數(shù)值也就是任務(wù)輪詢的時(shí)間
片。
展開(kāi) void RunPer10ms(void)
{
KEY_Scan();
}
void KEY_Scan(void)
{
uint8_t i;
for (i = 0; i < HARD_KEY_NUM; i++)
{
KEY_Detect(i);
}
}
/*
每隔10ms所有的按鍵GPIO均會(huì)被掃描檢測(cè)一次。

按鍵掃描的相關(guān)專題、標(biāo)簽、搜索
按鍵掃描的最新內(nèi)容
? 工作電壓 3.0-5.5V ? 內(nèi)置 RC振蕩器 ? 最大16個(gè)SEG腳,8個(gè)GRID腳 ? SEG腳只能接LED陽(yáng)極,GRID腳只能接LED陰極 ? I2C通訊接口,I2C從機(jī)地址可通過(guò)IO腳選擇 ? 16級(jí)整體亮度可調(diào) ? 最大13×3的按鍵掃描 按鍵顯示復(fù)用(需硬件電路配合) 支持組合鍵(需要電路配合) ? 讀/寫顯示/按鍵數(shù)據(jù)地址自動(dòng)加1 ? 內(nèi)置顯示RAM為16×8位 ? 內(nèi)置上電復(fù)位電路
VK16K33A是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù) 鎖存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。SEG腳接LED陽(yáng) 極,GRID腳接LED陰極,可支持16SEGx8GRID的點(diǎn)陣LED顯示面板。最大支持13×3的按鍵。內(nèi) 置上電復(fù)位電路,整體閃爍頻率可設(shè)置,可通過(guò)命令進(jìn)入待機(jī)模式,采用SOP28封裝形式。
概述
VK16K33C是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù)鎖存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。SEG腳接LED陽(yáng)極,GRID腳接LED陰極,可支持8SEG×8GRID的點(diǎn)陣LED顯示面板。最大支持8×3的按鍵。內(nèi)置上電復(fù)位電路,整體閃爍頻率可設(shè)置,可通過(guò)命令進(jìn)入待機(jī)模式。
LED高亮數(shù)顯驅(qū)動(dòng)芯片IC超小體積數(shù)碼管驅(qū)動(dòng)控制器VK16K33B/BA/BQ SOP24/SSOP24/QFN24原廠技術(shù)支持5個(gè)月前
概述
VK16K33B是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù)鎖存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。SEG腳接LED陽(yáng)極,GRID腳接LED陰極,可支持12SEG×8GRID的點(diǎn)陣LED顯示面板。最大支持10×3的按鍵。內(nèi)置上電復(fù)位電路,整體閃爍頻率可設(shè)置,可通過(guò)命令進(jìn)入待機(jī)模式。
超小體積高亮數(shù)顯數(shù)碼管驅(qū)動(dòng)廠家VK16K33A/AA/AQ SOP28/SSOP28/QFN28數(shù)碼屏顯示芯片(IC)128點(diǎn)陣6個(gè)月前
概述
VK16K33A是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù)鎖存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。SEG腳接LED陽(yáng)極,GRID腳接LED陰極,可支持16SEG×8GRID的點(diǎn)陣LED顯示面板。最大支持13×3的按鍵。內(nèi)置上電復(fù)位電路,整體閃爍頻率可設(shè)置,可通過(guò)命令進(jìn)入待機(jī)模式。
<p>產(chǎn)品品牌:永嘉微電/VINKA</p><p>產(chǎn)品型號(hào):VK16K33C</p><p>封裝形式:SOP20</p><p> </p><p>概述</p><p>VK16K33C是一種帶按鍵掃描接口的數(shù)碼管或點(diǎn)陣LED驅(qū)動(dòng)控制專用芯片,內(nèi)部集成有數(shù)據(jù)鎖 存器、鍵盤掃描、LED 驅(qū)動(dòng)模塊等電路。數(shù)據(jù)通過(guò)I2C通訊接口與MCU通信。
LJQ1317
特點(diǎn)
? 工作電壓 3.0-5.5V
? 內(nèi)置 RC振蕩器
? 最大12個(gè)SEG腳,8個(gè)GRID腳 (封裝不同SEG腳數(shù)量不同)
? SEG腳只能接LED陽(yáng)極,GRID腳只能接LED陰極
? I2C通訊接口,I2C從機(jī)地址可通過(guò)IO腳選擇
? 16級(jí)整體亮度可調(diào)
? 最大10×3的按鍵掃描 按鍵顯示復(fù)用需硬件電路配合
LJQ1293
特點(diǎn)
? 工作電壓 3.0-5.5V
? 內(nèi)置 RC振蕩器
? 最大12個(gè)SEG腳,8個(gè)GRID腳 (封裝不同SEG腳數(shù)量不同)
? SEG腳只能接LED陽(yáng)極,GRID腳只能接LED陰極
? I2C通訊接口,I2C從機(jī)地址可通過(guò)IO腳選擇
? 16級(jí)整體亮度可調(diào)
? 最大10×3的按鍵掃描 按鍵顯示復(fù)用需硬件電路配合
LJQ1280
編輯
編輯
特點(diǎn)
? 工作電壓 3.0-5.5V
? 內(nèi)置 RC振蕩器
? 最大16個(gè)SEG腳,8個(gè)GRID腳
? SEG腳只能接LED陽(yáng)極,GRID腳只能接LED陰極
? I2C通訊接口,I2C從機(jī)地址可通過(guò)IO腳選擇
? 16級(jí)整體亮度可調(diào)
? 最大13×3的按鍵掃描按鍵顯示復(fù)用需硬件電路配合支持組合鍵需要電路配合
LJQ1253
特點(diǎn)
? 工作電壓 3.0-5.5V
? 內(nèi)置 RC振蕩器
? 最大16個(gè)SEG腳,8個(gè)GRID腳
? SEG腳只能接LED陽(yáng)極,GRID腳只能接LED陰極
? I2C通訊接口,I2C從機(jī)地址可通過(guò)IO腳選擇
? 16級(jí)整體亮度可調(diào)
? 最大13×3的按鍵掃描 按鍵顯示復(fù)用需硬件電路配合 支持組合鍵需要電路配合