国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于TTL對單片機(jī)矩陣鍵盤算法的改進(jìn)

2019-05-24 14:20:22錢程趙莎莎
無線互聯(lián)科技 2019年1期
關(guān)鍵詞:實(shí)時性

錢程 趙莎莎

摘 要:文章針對目前單片機(jī)矩陣鍵盤模塊的低實(shí)時性問題,設(shè)計了一種基于TTL去抖算法的單片機(jī)矩陣鍵盤算法。利用TTL去抖算法的間隔時間采樣機(jī)制以及雙循環(huán)掃描法的逐行逐列掃描機(jī)制,保證矩陣鍵盤模塊響應(yīng)按鍵的實(shí)時性以及識別按鍵的準(zhǔn)確性。實(shí)驗(yàn)結(jié)果表明,該矩陣鍵盤算法識別按鍵準(zhǔn),響應(yīng)時間低,能夠識別組合鍵,通用性強(qiáng)。

關(guān)鍵詞:矩陣鍵盤;實(shí)時性;去抖;TTL

在嵌入式系統(tǒng)中,矩陣鍵盤是最常見的輸入設(shè)備。然而,機(jī)械按鍵在按下和松開時,會產(chǎn)生機(jī)械抖動,干擾輸入信號。為了避免這種干擾,在掃描矩陣鍵盤的過程中必須進(jìn)行去抖[1-3]。

一般的辦法是加入去抖延時[4-7],這樣雖然能達(dá)到去抖的目的,但在延時等待的時候,CPU不能執(zhí)行其他操作,因此實(shí)時性不高。而本文設(shè)計的基于生存時間值(Time To Live,TTL)的去抖算法,可以很好地解決上述問題。

本文將雙循環(huán)掃描法和TTL去抖算法結(jié)合起來,以尋求最優(yōu)算法。

1 TTL去抖算法

1.1 TTL算法

原始的TTL算法,是用在IPv4數(shù)據(jù)包頭部的一個數(shù)據(jù)段,用于避免數(shù)據(jù)包在網(wǎng)絡(luò)上被無限轉(zhuǎn)發(fā)[8-9]。

TTL的含義是生存時間值,數(shù)據(jù)包每經(jīng)過一個路由器,TTL的值就減1[10]。

如果TTL大于0,說明該數(shù)據(jù)包有效,應(yīng)該轉(zhuǎn)發(fā)。

反之,如果TTL等于0,說明該數(shù)據(jù)包已過期,應(yīng)該丟棄[11]。

1.2 TTL算法的擴(kuò)展

擴(kuò)展的TTL算法流程如圖1所示,用來判斷一個受干擾的信號是否有效。

(1)TTL是不斷遞減的計數(shù)器,每間隔單位時間,TTL就減1,直至減為0。

(2)如果檢測到事件信號,TTL就加2。

(3)如果TTL的值大于某個閾值,說明事件已發(fā)生,應(yīng)該處理;反之,如果TTL的值小于某個閾值,說明事件不一定發(fā)生,應(yīng)該忽略。

1.3 TTL去抖算法

擴(kuò)展的TTL算法,可以用于機(jī)械按鍵的軟件去抖,流程如圖2所示。

(1)TTL是不斷遞減的變量,每間隔單位時間,TTL就減1,直至減為0。

(2)如果檢測到按鍵被按下,該按鍵的TTL就加2。

(3)如果TTL的值大于某個閾值,說明按鍵真的被按下了,應(yīng)該處理;反之,如果TTL的值小于某個閾值,說明按鍵不一定被按下,應(yīng)該忽略。

2 改進(jìn)的矩陣鍵盤算法

2.1 矩陣鍵盤模塊的原理

本文所采用的開發(fā)平臺為TX-1C 51開發(fā)板。矩陣鍵盤的原理如圖3所示。

2.2 掃描法的選擇

2.2.1 線反轉(zhuǎn)法

這種方法是先讓4根列線輸出0000B,讀取4根行線的數(shù)據(jù)A;再行列反轉(zhuǎn),即讓4根行線輸出0000B,讀取4根列線的數(shù)據(jù)B;最后由AB組合成一個8位的二進(jìn)制數(shù)據(jù)即為鍵值[12-13]。

2.2.2 逐行掃描法

這種方法是先讓一根行線輸出0,其余行線輸出1,讀取列線的數(shù)據(jù),即為該行的鍵值。逐行掃描,4根行線各自輸出一次0,來讀取4行的鍵值[14-16]。

2.2.3 雙循環(huán)掃描法

顧名思義,這種方法是指在矩陣鍵盤中,列和行都各自循環(huán)掃描[16]。與逐行掃描法的區(qū)別在于,逐行掃描法是一次性讀取4根列線的值,而雙循環(huán)掃描法是分別讀取4根列線的值。

2.2.4 掃描法的選擇

組合鍵有3種類型,示意如圖4所示。

(1)跨行組合鍵,即同時按住多個按鍵,且每一行只按下了一個按鍵。

(2)同行組合鍵,即同時按住多個按鍵,且有兩個按鍵恰好在同一行。

(3)三角鍵,即同時按住多個按鍵,且有3個按鍵恰好占了兩行兩列。

3種掃描法的比較如表1所示。可以看出,線反轉(zhuǎn)法速度最快,而雙循環(huán)掃描法最適合用組合鍵。本文選擇雙循環(huán)掃描法。

2.3 軟件編程

2.3.1 定義全局變量

(1)uchar key_TTL[16];

對應(yīng)16個按鍵的TTL(用于去抖)

(2)uint keys_val=0;

16位組合鍵的鍵值(用于按鍵功能)

(3)uchar max_TTL=3;

TTL的閾值(判斷按鍵信號是否有效)

(4)uint last_keys_val=0;

上一時刻的鍵值(判斷鍵值變動)

2.3.2 矩陣鍵盤核心函數(shù)

void key_spy(void)

{

uint temp=0;

//雙循環(huán)掃描法 + 譯碼

uchar k,l;

for(l=0;l<4;l++)

{

P3=~(0x01<

for(k=0;k<4;k++)

{

if((P3&(0x10<

key_TTL[k+l*4]+=2;

}

}

//TTL去抖

for(k=0;k<16;k++)

{

if(key_TTL[k]>0)key_TTL[k]--;

if(key_TTL[k]>=max_TTL){

//把這個if里的>=改為=,就能自動連點(diǎn)

key_TTL[k]--;

temp=temp|(1<

}

}

keys_val=temp;

//按鍵功能

if(keys_val!=last_keys_val){

if(keys_val==((1<<0))){

//TODO:按下了0號鍵

}

else if(keys_val==((1<<3)|(1<<4))){

//TODO:同時按下了3號、4號鍵

}

//TODO:加入更多else if,

// 以擴(kuò)充鍵盤功能。

}

last_keys_val=keys_val;

}

2.3.3 核心程序的使用方法

在嵌入式系統(tǒng)的主循環(huán)或者定時器中斷里,加入key_spy(void);這條語句,并在key_spy(void)的按鍵功能區(qū)域,編寫按鍵的處理程序。

2.3.4 改進(jìn)的矩陣鍵盤算法的例程

本例程中,矩陣鍵盤的功能是:通過按特定的組合鍵,來改變?nèi)肿兞縦1和k2的值。

矩陣鍵盤和液晶屏的代碼省略。

主函數(shù)代碼如下:

void main()

{

while(1)

{

k3++;if(k3==100)k3=0;

//讓k3不斷增加

display3n(k1,k2,k3);

//數(shù)碼管實(shí)時顯示k1 k2 k3的值

key_spy();

//主循環(huán)里加入鍵盤程序

}

}

圖5為例程在TX-1C 51開發(fā)板上運(yùn)行的照片。

6位數(shù)碼管,左邊4位用來輸出兩個變量k1和k2的值, 右面兩位用來輸出變量k3的值。

在實(shí)際運(yùn)行中,數(shù)碼管右邊兩位的數(shù)字在不停變化。從按下按鍵到松開按鍵,都不會使這兩位數(shù)字的變化出現(xiàn)停頓,說明改進(jìn)的矩陣鍵盤算法占用CPU資源小。

在按下按鍵的時候,程序能迅速地相應(yīng)按鍵事件,立刻改變k1和k2的值,具有很高的實(shí)時性和準(zhǔn)確性。

3 評價和推廣

3.1 評價

TTL去抖算法是一種間隔時間采樣的方法。與傳統(tǒng)的延時去抖相比,TTL去抖算法可以很好地利用延時等待的時間,來處理別的任務(wù),從而提高整個系統(tǒng)的實(shí)時性。

TTL去抖算法可以配合線反轉(zhuǎn)法、雙循環(huán)掃描法使用。線反轉(zhuǎn)法掃描得更快,但是不支持組合鍵;而雙循環(huán)掃描法掃描得稍慢,支持組合鍵。這兩種方法與傳統(tǒng)的矩陣鍵盤檢測方法,在掃描時間上的比較如表2所示。

傳統(tǒng)的矩陣鍵盤檢測方法,往往需要等待按鍵松開,這樣按住按鍵不松,主程序就陷入死循環(huán)。

線反轉(zhuǎn)法和雙循環(huán)掃描法,按不同按鍵,所需的掃描時間會有細(xì)微差別,這是由于按鍵的檢測順序所導(dǎo)致的。

線反轉(zhuǎn)法和雙循環(huán)掃描法的實(shí)際用時差別不大。測試平臺用的是11.059 2 MHz的51單片機(jī)。在頻率更高的嵌入式系統(tǒng)中,兩種算法的實(shí)際用時會更短,差別會更小。

3.2 推廣

3.2.1 TTL去抖算法用于檢測斑馬線

TTL去抖算法,可以用于恩智浦杯智能汽車競賽中,選用線性CCD作為傳感器的光電組,用來給二值化后的線性CCD圖像檢測斑馬線,也就是檢測起跑線。

二值化后的線性CCD圖像是一行像素,一段連續(xù)的相同的像素,稱為一片區(qū)域;兩片區(qū)域的連接處,稱為一個跳變。

(1)TTLA和TTLB是兩個不斷遞減的計數(shù)器,每掃描一個像素,TTLA就減1,直至減為0;每掃描一個區(qū)域,TTLB就減1,直至減為0。

(2)每掃描到一個跳變,先判斷TTLA是否為0,再給TTLA賦初值。

(3)如果檢測到跳變的時候,TTLA不為零,那么上一個區(qū)域可能屬于斑馬線,令TTLB加2;反之,如果檢測到跳變的時候,TTLA為零,那么上一個區(qū)域不屬于斑馬線。

(4)如果TTLB的值大于某個閾值,說明之前的TTLB個區(qū)域確實(shí)是斑馬線,應(yīng)該處理;反之,如果TTLB的值小于某個閾值,說明之前的TTLB個區(qū)域的不一定是斑馬線,應(yīng)該忽略。

3.2.2 改進(jìn)的矩陣鍵盤算法的推廣

單片機(jī)現(xiàn)場賽,是要求參賽選手在規(guī)定時間內(nèi)按要求編寫單片機(jī)軟件的比賽,需要在最短的時間寫好底層驅(qū)動,才有時間編寫規(guī)定的功能。改進(jìn)的矩陣鍵盤算法把獲取鍵值、譯碼、去抖和按鍵功能幾個步驟[15]都精簡到一個子函數(shù)里,代碼短,結(jié)構(gòu)清晰,易于開發(fā),非常適合單片機(jī)現(xiàn)場賽。

平衡車,是對實(shí)時性要求極高的嵌入式系統(tǒng)。如果因?yàn)榘存I去抖而出現(xiàn)等待延時,那么將極有可能導(dǎo)致平衡車失衡,造成安全隱患?;赥TL去抖算法和線反轉(zhuǎn)法的矩陣鍵盤算法,將非常適合平衡車。

TTL去抖算法和雙循環(huán)掃描法組成的矩陣鍵盤算法,由于支持組合鍵,且實(shí)時性高,可以用來制作按鍵多的游戲機(jī),還可以用來做游戲鍵盤。

4 結(jié)語

為實(shí)現(xiàn)矩陣鍵盤模塊的快速響應(yīng)以及精準(zhǔn)檢測,設(shè)計了基于TTL的去抖算法的矩陣鍵盤算法,掃描部分采用雙循環(huán)掃描法來支持多鍵齊按的功能。通過實(shí)驗(yàn)驗(yàn)證可知:矩陣鍵盤算法實(shí)時性高,識別按鍵準(zhǔn)。

與部分矩陣鍵盤算法相比,此算法不依賴中斷、多線程,因此更適用于前后臺系統(tǒng)。代碼精簡,易于開發(fā)單按鍵、組合鍵的鍵盤功能,因此適用于很多場景。

[參考文獻(xiàn)]

[1]吉喆.單片機(jī)矩陣鍵盤去抖程序的設(shè)計[J].計算機(jī)光盤軟件與應(yīng)用,2012(7):167.

[2]崔朋.矩陣鍵盤在單片機(jī)工程中的應(yīng)用[J].黑龍江科技信息,2016(11):43.

[3]鄭采君.基于CPLD的矩陣鍵盤掃描模塊設(shè)計[J].電子設(shè)計工程,2010(10):169-175.

[4]武志鵬,焦紅衛(wèi).一種基于矩陣鍵盤掃描原理的程序設(shè)計[J].工業(yè)控制計算機(jī),2018(7):141-142.

[5]張成法,馬鳳娟.基于AT89C52的矩陣鍵盤編程[J].河北農(nóng)機(jī),2016(11):46-47.

[6]劉軍.4×4矩陣鍵盤控制LED原理及軟硬件設(shè)計、仿真調(diào)試[J].哈爾濱鐵道科技,2015(4):7-11.

[7]李其珂,付紅橋.基于嵌入式Linux的矩陣鍵盤驅(qū)動研究與實(shí)現(xiàn)[J].重慶理工大學(xué)學(xué)報(自然科學(xué)版),2012(12):88-92.

[8]王建平,左現(xiàn)剛,胡孟杰,等.固定節(jié)點(diǎn)3D網(wǎng)格部署的水下傳感器網(wǎng)絡(luò)分簇路由算法[J].火力與指揮控制,2017(5):84-89.

[9]楊建強(qiáng),寧彬.基于IPv6協(xié)議的操作系統(tǒng)指紋識別[J].湖北文理學(xué)院學(xué)報,2013(5):13-17.

[10]袁福祥,劉粉林,蘆斌,等.基于歷史數(shù)據(jù)的異常域名檢測算法[J].通信學(xué)報,2016(10):172-180.

[11]危婷,冷峰,張躍冬,等.DNS服務(wù)器緩存失效過程的研究[J].電信科學(xué),2013(9):94-97.

[12]曾曉春.線反轉(zhuǎn)法矩陣鍵盤程序設(shè)計[J].科技創(chuàng)新與應(yīng)用,2013(23):14.

[13]段崇秀.單片機(jī)中的矩陣鍵盤編程[J].硅谷,2012(5):172.

[14]周正貴.基于單片機(jī)技術(shù)的按鍵掃描電路分析[J].信息與電腦(理論版),2018(13):29-30.

[15]劉宸,黃世瑜.對電平計時的矩陣鍵盤識別方法研究[J].通信電源技術(shù),2018(2):5-6,10.

[16]黃麗英,章敏.淺析基于AT89C51矩陣鍵盤檢測的編程技巧[J].科技創(chuàng)業(yè)家,2013(2):160-161.

猜你喜歡
實(shí)時性
基于改進(jìn)YOLOv5s的輕量化布匹瑕疵檢測算法
基于規(guī)則實(shí)時性的端云動態(tài)分配方法研究
基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡(luò)實(shí)時性仿真
航空電子AFDX與AVB傳輸實(shí)時性抗干擾對比
LonWorks總線實(shí)時性能分析與仿真研究
關(guān)于對風(fēng)力送絲系統(tǒng)的智能化改造
一種滿足實(shí)時性需求的測發(fā)控軟件改進(jìn)技術(shù)
航天控制(2016年6期)2016-07-20 10:21:36
基于優(yōu)先級標(biāo)簽的LARS調(diào)度算法在網(wǎng)絡(luò)傳輸實(shí)時優(yōu)化中的應(yīng)用研究
智富時代(2015年9期)2016-01-14 04:41:21
機(jī)器人中間件消息實(shí)時性保證機(jī)制的研究與實(shí)現(xiàn)
軟件(2015年10期)2015-12-25 07:51:57
網(wǎng)絡(luò)演算理論下的工業(yè)以太網(wǎng)的實(shí)時性分析
克山县| 盐津县| 灵川县| 竹溪县| 于田县| 广灵县| 马山县| 噶尔县| 巴东县| 金湖县| 剑河县| 阿拉善左旗| 慈溪市| 凤凰县| 萨迦县| 东丽区| 凤阳县| 伊春市| 清远市| 客服| 灵石县| 泰来县| 云林县| 南郑县| 托克逊县| 娱乐| 黄龙县| 石景山区| 江达县| 金川县| 南丰县| 梅河口市| 西藏| 宜阳县| 视频| 湟中县| 上杭县| 兰考县| 永顺县| 鹤壁市| 高邮市|