本發(fā)明涉及計算機應(yīng)用技術(shù)領(lǐng)域,特別是對抖動開關(guān)信號的處理方法。
背景技術(shù):
在按鈕按下和放開或者開關(guān)閉合和打開的瞬間,由于電觸點機械彈性的原因,會產(chǎn)生抖動信號,即開關(guān)信號中包含抖動成分。隨著微控制器成本的降低,本發(fā)明以微控制器為平臺對含有抖動的開關(guān)信號進行預(yù)處理,使其變成干凈的開關(guān)信號,再供計算機使用,本發(fā)明提出基于微控制器的一種抖動開關(guān)信號的處理方法。
技術(shù)實現(xiàn)要素:
本發(fā)明針對計算機輸入的抖動開關(guān)信號的處理方法提供一種基于微控制器的抖動信號處理方法,為了實現(xiàn)本目的,本發(fā)明一種抖動開關(guān)信號的處理方法,包括以下步驟:
步驟S1:將n路抖動開關(guān)信號IN[i](i=1,2...,n)連接微控制器的輸入端;
步驟S2:微控制器每隔100微秒讀一次抖動開關(guān)信號IN[i](i=1,2...,n),當(dāng)所讀信號狀態(tài)發(fā)生變化時,設(shè)置5毫秒標(biāo)志MS[i](i=1,2...,n)和100微秒標(biāo)志US[i](i=1,2...,n)并開始計時;
步驟S3:對步驟S2所述的5毫秒計時,其計時規(guī)則是:累計讀IN[i](i=1,2...,n)50次時,將5毫秒標(biāo)志MS[i](i=1,2...,n)清零;
步驟S4:對步驟S2所述的100微秒計時,其計時規(guī)則是:連續(xù)讀IN[i](i=1,2...,n)30次且狀態(tài)無變化時,將100微秒標(biāo)志US[i](i=1,2...,n)清零;
步驟5:對步驟S4所述的連續(xù)讀IN[i](i=1,2...,n)30次且狀態(tài)無變化時,此時IN[i](i=1,2...,n)的狀態(tài)與步驟S2所讀的IN[i](i=1,2...,n)的狀態(tài)一致時,輸出干凈開關(guān)信號OUT[i](i=1,2...,n),不一致時放棄OUT[i](i=1,2...,n);
步驟S6:重復(fù)步驟S2、步驟S3、步驟S4、步驟S5。
本發(fā)明的有益效果:與現(xiàn)有的抖動開關(guān)信號的處理方法相比,本發(fā)明提出的抖動開關(guān)信號的處理方法,降低了處理開關(guān)信號引入的延遲,提高了計算機控制的實時性。
附圖說明
圖1所示為本發(fā)明一種抖動開關(guān)信號的處理方法的流程圖。
具體實施方式
如圖1所示為本發(fā)明一種抖動開關(guān)信號的處理方法的流程圖,包括:將n路抖動開關(guān)信號IN[i](i=1,2,...,n)連接微控制器的輸入端,微控制器每隔100微秒讀一次抖動開關(guān)信號IN[i](i=1,2,...,n),當(dāng)所讀的信號狀態(tài)發(fā)生變化時,設(shè)置5毫秒標(biāo)志MS[i](i=1,2,...,n)和100微秒標(biāo)志US[i](i=1,2,...,n)并開始計時;5毫秒計時規(guī)則是:累計讀IN[i](i=1,2,...,n)50次時,將5毫秒標(biāo)志MS[i](i=1,2,...,n)清零;100微秒計時規(guī)則是:連續(xù)讀IN[i](i=1,2,...,n)30次且狀態(tài)無變化時,將100微秒標(biāo)志US[i](i=1,2,...,n)清零;前一步驟所讀的IN[i](i=1,2,...,n)的狀態(tài)與第二步驟所讀的IN[i](i=1,2,...,n)的狀態(tài)一致時輸出干凈開關(guān)信號OUT[i](i=1,2,...,n),不一致時放棄OUT[i](i=1,2,...,n),重復(fù)第一步驟到第五步驟執(zhí)行。
各步驟的具體實施細節(jié)如下:
步驟S1:將n路抖動開關(guān)信號IN[i](i=1,2,...,n)連接微控制器的輸入端;
步驟S2:微控制器每隔100微秒讀一次抖動開關(guān)信號IN[i](i=1,2,...,n),當(dāng)所讀的信號狀態(tài)發(fā)生變化時,設(shè)置5毫秒標(biāo)志MS[i](i=1,2,...,n)和100微秒標(biāo)志US[i](i=1,2,...,n)并開始計時;5毫秒計時在先,100微妙計時在后;
步驟S3:對步驟S2所述的5毫秒計時,其計時規(guī)則是:累計讀IN[i](i=1,2,...,n)50次時,將5毫秒標(biāo)志MS[i](i=1,2,...,n)清零;
步驟S4:對步驟S2所述的100微秒計時,其計時規(guī)則是:連續(xù)讀IN[i](i=1,2,...,n)30次且狀態(tài)無變化時,將100微秒標(biāo)志US[i](i=1,2,...,n)清零;
步驟S5:對步驟S4所述的連續(xù)讀IN[i](i=1,2,...,n)30次且狀態(tài)無變化時,此時IN[i](i=1,2,...,n)的狀態(tài)與步驟S2所讀的IN[i](i=1,2,...,n)的狀態(tài)一致時輸出干凈開關(guān)信號OUT[i](i=1,2,...,n),不一致時放棄OUT[i](i=1,2...,n),此干凈開關(guān)信號OUT[i](i=1,2,...,n),其編號i與步驟S1所述的抖動開關(guān)信號IN[i](i=1,2,...,n)的編號i相同,抖動開關(guān)信號IN[i](i=1,2,...,n)經(jīng)過步驟S2、S3、S4、S5后變成了干凈開關(guān)信號OUT[i](i=1,2,...,n);
步驟S6:重復(fù)步驟S2、步驟S3、步驟S4、步驟S5。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。