亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TTL對單片機矩陣鍵盤算法的改進

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

        錢程 趙莎莎

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

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

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

        一般的辦法是加入去抖延時[4-7],這樣雖然能達到去抖的目的,但在延時等待的時候,CPU不能執(zhí)行其他操作,因此實時性不高。而本文設(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算法的擴展

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

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

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

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

        1.3 TTL去抖算法

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

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

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

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

        2 改進的矩陣鍵盤算法

        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位的二進制數(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里的>=改為=,就能自動連點

        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,

        // 以擴充鍵盤功能。

        }

        last_keys_val=keys_val;

        }

        2.3.3 核心程序的使用方法

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

        2.3.4 改進的矩陣鍵盤算法的例程

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

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

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

        void main()

        {

        while(1)

        {

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

        //讓k3不斷增加

        display3n(k1,k2,k3);

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

        key_spy();

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

        }

        }

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

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

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

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

        3 評價和推廣

        3.1 評價

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

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

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

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

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

        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ū)域確實是斑馬線,應(yīng)該處理;反之,如果TTLB的值小于某個閾值,說明之前的TTLB個區(qū)域的不一定是斑馬線,應(yīng)該忽略。

        3.2.2 改進的矩陣鍵盤算法的推廣

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

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

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

        4 結(jié)語

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

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

        [參考文獻]

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

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

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

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

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

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

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

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

        [9]楊建強,寧彬.基于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].硅谷,2012(5):172.

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

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

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

        猜你喜歡
        實時性
        基于改進YOLOv5s的輕量化布匹瑕疵檢測算法
        基于規(guī)則實時性的端云動態(tài)分配方法研究
        基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡(luò)實時性仿真
        航空電子AFDX與AVB傳輸實時性抗干擾對比
        LonWorks總線實時性能分析與仿真研究
        關(guān)于對風(fēng)力送絲系統(tǒng)的智能化改造
        一種滿足實時性需求的測發(fā)控軟件改進技術(shù)
        航天控制(2016年6期)2016-07-20 10:21:36
        基于優(yōu)先級標簽的LARS調(diào)度算法在網(wǎng)絡(luò)傳輸實時優(yōu)化中的應(yīng)用研究
        智富時代(2015年9期)2016-01-14 04:41:21
        機器人中間件消息實時性保證機制的研究與實現(xiàn)
        軟件(2015年10期)2015-12-25 07:51:57
        網(wǎng)絡(luò)演算理論下的工業(yè)以太網(wǎng)的實時性分析
        国产精品毛片大尺度激情| 亚洲综合色婷婷七月丁香| 国产精品毛片一区二区| 厨房玩丰满人妻hd完整版视频| 国产精品激情综合久久| 国产99久久久国产精品免费| 久草手机视频在线观看| 少妇爆乳无码专区| 国产最新进精品视频| 国产亚洲sss在线观看| 国产av一区二区三区香蕉| 国产传媒精品成人自拍| 又色又爽又黄的视频软件app| 男女啪啪无遮挡免费网站| 欧洲亚洲视频免费| 国产黄三级三级三级三级一区二区| 国语对白在线观看免费| 久久精品国产只有精品96| 丰满少妇高潮惨叫正在播放| 久久夜色精品国产亚洲噜噜| 性色av一区二区三区四区久久| 免费久久久一本精品久久区| 国模无码一区二区三区| 欧美老妇与禽交| 国产亚洲一区二区三区成人| 开心五月骚婷婷综合网| 欧美丰满老熟妇aaaa片| 夜夜欢性恔免费视频| 大屁股少妇一区二区无码| 在线观看国产激情免费视频| 天堂资源中文网| 男女啪啪无遮挡免费网站| 亚洲国产精品午夜电影| 久久精品女人天堂av麻| 色翁荡熄又大又硬又粗又动态图| 国产午夜鲁丝片av无码| 亚洲AV无码一区二区二三区我| 中文字幕中文字幕人妻黑丝| 肥老熟女性强欲五十路| 中文乱码字慕人妻熟女人妻| 性做久久久久久久|