999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一個(gè)即簡(jiǎn)單經(jīng)濟(jì)又穩(wěn)定可靠的獨(dú)立按鍵檢測(cè)設(shè)計(jì)方案

2015-11-03 09:39:11羅立輝
中國(guó)科技縱橫 2015年20期
關(guān)鍵詞:檢測(cè)

羅立輝

【摘要】本文首先簡(jiǎn)要介紹了獨(dú)立按鍵檢測(cè)主動(dòng)查詢與中斷查詢這兩種方式的優(yōu)缺點(diǎn)。根據(jù)這兩種方式的優(yōu)缺點(diǎn),本文著重討論了具有跟大優(yōu)勢(shì)的中斷查詢方式的按鍵檢測(cè)方案的實(shí)現(xiàn)原理和過(guò)程。并且,針對(duì)按鍵普遍存在的抖動(dòng)問(wèn)題,本文由簡(jiǎn)單到復(fù)雜的過(guò)渡方式,詳細(xì)深入地介紹進(jìn)行方案的優(yōu)化和改良的目的以及方法。

【關(guān)鍵詞】按鍵延時(shí)抖動(dòng)掃描

1主動(dòng)查詢方式的優(yōu)缺點(diǎn)

對(duì)于主動(dòng)循環(huán)查詢方式,最大的優(yōu)點(diǎn)在于原理簡(jiǎn)單,比較適合于MCU處理的任務(wù)不是特別多的情況。如果MCU大循環(huán)的輪詢周期較長(zhǎng),很有可能在按鍵按下的瞬間錯(cuò)過(guò)了。這是主動(dòng)查詢方式的最大缺點(diǎn)。另外,該方式比較浪費(fèi)CPU的時(shí)間資源。檢測(cè)按鍵的處理程序需要有個(gè)延遲消抖的過(guò)程。對(duì)于機(jī)械彈性開(kāi)關(guān),一般需要的的延遲消抖時(shí)間為10ms。很多程序都是使用一般的延時(shí)函數(shù)來(lái)實(shí)現(xiàn)消抖的目的。然而對(duì)于很多復(fù)雜的產(chǎn)品,CPU需要執(zhí)行繁重的任務(wù)。在10ms時(shí)間里,CPU可以執(zhí)行上千上萬(wàn)條其他任務(wù)的匯編指令。

2中斷查詢的方式的優(yōu)缺點(diǎn)

中斷查詢方式主要缺點(diǎn)在于,該方式需要占用MCU一個(gè)外部中斷功能(有些功能簡(jiǎn)單、價(jià)錢低廉的MCU,其IO引腳復(fù)用功能資源有限),以及處理程序稍微復(fù)雜一下。與主動(dòng)查詢相比,中斷查詢方式則有響應(yīng)時(shí)間短、穩(wěn)定可靠等優(yōu)點(diǎn)。一旦有中斷響應(yīng),CPU一定立即響應(yīng)中斷請(qǐng)求。因此,中斷查詢方式不存在“錯(cuò)過(guò)”、“漏檢”的情況。按鍵檢測(cè)的原理圖設(shè)計(jì)圖1所示:

圖1 按鍵檢測(cè)的原理圖設(shè)計(jì)圖

在原理圖1設(shè)計(jì)中,為了檢驗(yàn)按鍵被按下,MCU在中斷服務(wù)程序里,通過(guò)程序翻轉(zhuǎn)LED亮滅狀態(tài),以便讀者更容易理解其中的原理機(jī)制。

經(jīng)過(guò)測(cè)試,每按一下按鍵,LDE燈都實(shí)現(xiàn)了翻轉(zhuǎn)的動(dòng)作。該函數(shù)基本實(shí)現(xiàn)了預(yù)期的功能。在中斷函數(shù)里,筆者使用了簡(jiǎn)單的的概率統(tǒng)計(jì)方法,提高準(zhǔn)確性。這個(gè)中斷服務(wù)程序運(yùn)行的時(shí)間大概為5us*20=0.1ms,遠(yuǎn)遠(yuǎn)少于相對(duì)通常的軟件延時(shí)方式所用的10ms,因此提高了CPU對(duì)資源的使用效率。但是,以上的中斷服務(wù)程序尚未徹底解決處理機(jī)械彈性按鍵本質(zhì)上所具有的脈沖抖動(dòng)的問(wèn)題。首先,筆者在此描述以上程序運(yùn)行起來(lái)后有何不良癥狀。有些情況下,按下一次按鍵,LED燈會(huì)翻轉(zhuǎn)2遍。有極少數(shù)情況下,LED甚至連續(xù)翻轉(zhuǎn)3到4次。這種現(xiàn)象不是用戶所期望的。這說(shuō)明以上程序設(shè)計(jì)仍達(dá)不到穩(wěn)定的要求,很有必要進(jìn)行再深入的代碼優(yōu)化。

結(jié)合以上給出的中斷服務(wù)程序,我們就很容易理解LED連續(xù)翻轉(zhuǎn)的現(xiàn)象了。不論圖中提到的前沿抖動(dòng)還是后沿抖動(dòng),均可能導(dǎo)致CPU再次、多次進(jìn)入中斷處理程序。因此,問(wèn)題的重點(diǎn)在于,如何通過(guò)優(yōu)化算法和代碼,在按鍵抖動(dòng)期間,避免多次進(jìn)入中斷,或者避免進(jìn)入中斷后重復(fù)執(zhí)行相同的任務(wù)。本文從實(shí)現(xiàn)的難易程度這個(gè)角度考慮,選擇了后者,即結(jié)合MCU定時(shí)器的功能,達(dá)到了“避免進(jìn)入中斷后重復(fù)執(zhí)行相同的任務(wù)”的目的。

以下筆者講解了在原有程序的基礎(chǔ)上,如何結(jié)合MCU定時(shí)器的功能,進(jìn)一步徹底解決按鍵抖動(dòng)帶來(lái)的不穩(wěn)定問(wèn)題。考慮到有部分讀者的基礎(chǔ)可能不是太好,為了降低本文設(shè)計(jì)思路的理解難度,筆者認(rèn)為很有必要先給讀者簡(jiǎn)要介紹一下有關(guān)定時(shí)器幾個(gè)非常經(jīng)典的函數(shù)及其功能意義。關(guān)于定時(shí)器,有以下5個(gè)相關(guān)的函數(shù):

函數(shù)1:void clock_init(void)

對(duì)于函數(shù)1,顧名思義,該函數(shù)就是要對(duì)定時(shí)器temer進(jìn)行初始化,否則函數(shù)2~5無(wú)效。

函數(shù)2:void timer_set(struct timer *t, clock_time_t interval)

該函數(shù)用于設(shè)置某定時(shí)器timer需要的時(shí)間間隔interval大小(以ms為單位)。這就好比如有個(gè)漏水的水龍頭。水龍頭間隔恒定時(shí)間里每一滴的滴水大小,相當(dāng)于函數(shù)里定時(shí)器的最小計(jì)數(shù)單位。水龍頭下面有個(gè)刻有刻度的水杯。而這里的interval,則相當(dāng)于水杯的容量。

函數(shù)3:int timer_expired(struct timer *t)//判斷定時(shí)器timer是否時(shí)間滿了,為真返回1,否則返回0。這就好比如,某人外出走開(kāi)了,在她回來(lái)之前看到水杯的前一刻,她不知道水杯是否滿了,因?yàn)樗恢雷约弘x開(kāi)了多長(zhǎng)時(shí)間。而水杯里的水從完全沒(méi)水到剛好積滿這個(gè)時(shí)間差,永遠(yuǎn)都是固定的。如果一直沒(méi)人將水杯倒掉,超過(guò)這個(gè)時(shí)間差,則水杯將一直處于溢出的狀態(tài)。當(dāng)她回來(lái)查看水杯到底滿了還是沒(méi)滿的這個(gè)動(dòng)作,相當(dāng)于程序執(zhí)行了該函數(shù)。她只有兩個(gè)可能的結(jié)果,要么水杯滿了,要么還沒(méi)滿。

函數(shù)4:void timer_reset(struct timer *t)//復(fù)位定時(shí)器timer。該函數(shù)相當(dāng)于水杯匯聚的滴水,不論水杯里的水有多滿,一律將水全倒掉,在將水杯放回水龍頭下面重新積水。

函數(shù)5:void timer_restart(struct timer *t)//重啟定時(shí)器timer。這個(gè)函數(shù)就好比如有個(gè)電子鬧鐘,有人將里面的電池拆下來(lái)后,又馬上將電池重新安裝回去。這樣,這個(gè)電子鬧鐘就“重啟”了。

由于優(yōu)化后的中斷服務(wù)程序中,添加了if(timer_expired(&key_timer))等相關(guān)語(yǔ)句,自按鍵被按下后,在接下來(lái)key_timer限定的50ms之內(nèi),除了第一次中斷函數(shù)能進(jìn)入該if語(yǔ)句里面執(zhí)行LED翻轉(zhuǎn)的語(yǔ)句,其它由抖動(dòng)導(dǎo)致的中斷服務(wù)程序均不能進(jìn)入該if語(yǔ)句執(zhí)行LED翻轉(zhuǎn)語(yǔ)句。只有當(dāng)key_timer限定的50ms滿了之后,程序才可以接受檢驗(yàn)按鍵下一次被按下的動(dòng)作。新程序重新下載到MCU后,經(jīng)測(cè)試部測(cè)試,已經(jīng)徹底解決了LED多次翻轉(zhuǎn)的問(wèn)題。

3 結(jié)語(yǔ)

目前該技術(shù)方案應(yīng)用在lemuse專業(yè)音箱等產(chǎn)品中已經(jīng)超過(guò)2年時(shí)間。事實(shí)充分論證了本文介紹的整個(gè)按鍵檢測(cè)方案具有很強(qiáng)的實(shí)用性、成本低廉、準(zhǔn)確性高、可靠性高等優(yōu)點(diǎn)。

猜你喜歡
檢測(cè)
QC 檢測(cè)
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
“幾何圖形”檢測(cè)題
“角”檢測(cè)題
“有理數(shù)的乘除法”檢測(cè)題
“有理數(shù)”檢測(cè)題
“角”檢測(cè)題
“幾何圖形”檢測(cè)題
主站蜘蛛池模板: 在线国产你懂的| 毛片a级毛片免费观看免下载| AV在线天堂进入| 天堂在线www网亚洲| 欧美成人二区| 欧美一级大片在线观看| 国产精女同一区二区三区久| 999在线免费视频| 毛片网站免费在线观看| 婷婷亚洲综合五月天在线| 欧美日韩导航| 亚洲欧美不卡中文字幕| 国产精品色婷婷在线观看| 国产超碰一区二区三区| 久久中文字幕不卡一二区| 久久黄色毛片| 国产黄在线免费观看| 精品一区二区三区自慰喷水| AV网站中文| 日韩精品毛片| 日韩在线播放欧美字幕| 国产手机在线ΑⅤ片无码观看| 欧美精品伊人久久| 国产色爱av资源综合区| 99久久婷婷国产综合精| 精品一区国产精品| 91香蕉国产亚洲一二三区| 波多野结衣视频网站| 亚洲成人免费看| 天堂成人在线视频| 极品国产在线| 伊人激情综合网| 亚洲a免费| 最新精品久久精品| 亚洲中文精品人人永久免费| 欧洲日本亚洲中文字幕| 在线观看免费黄色网址| 影音先锋丝袜制服| 黄色福利在线| 一级做a爰片久久免费| 日韩在线2020专区| 欧美福利在线| 狠狠亚洲婷婷综合色香| 亚洲一道AV无码午夜福利| 99精品影院| 原味小视频在线www国产| 亚洲国产日韩视频观看| 亚洲第一极品精品无码| 免费国产小视频在线观看| 久久成人国产精品免费软件| 欧美一区二区自偷自拍视频| 国产清纯在线一区二区WWW| 小蝌蚪亚洲精品国产| 国产精品不卡片视频免费观看| 麻豆精品国产自产在线| 国产成人av一区二区三区| 亚洲全网成人资源在线观看| 亚洲日韩精品欧美中文字幕| 中文字幕久久精品波多野结| 白丝美女办公室高潮喷水视频| 美女潮喷出白浆在线观看视频| 91av成人日本不卡三区| 亚洲中文字幕久久精品无码一区| 波多野结衣一二三| 日日摸夜夜爽无码| 国产97视频在线| 天天激情综合| 国产97视频在线| 天天综合亚洲| 日本91视频| 亚洲爱婷婷色69堂| 日韩二区三区| 欧美在线免费| 九色在线视频导航91| 狠狠干欧美| 九色在线视频导航91| 国产小视频a在线观看| 极品国产一区二区三区| 精品视频在线一区| 国产精品欧美日本韩免费一区二区三区不卡 | 欧美国产精品不卡在线观看| 国产精品一区二区在线播放|