• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

    錢程 趙莎莎

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

    關鍵詞:矩陣鍵盤;實時性;去抖;TTL

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

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

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

    1 TTL去抖算法

    1.1 TTL算法

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

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

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

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

    1.2 TTL算法的擴展

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

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

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

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

    1.3 TTL去抖算法

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

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

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

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

    2 改進的矩陣鍵盤算法

    2.1 矩陣鍵盤模塊的原理

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

    2.2 掃描法的選擇

    2.2.1 線反轉法

    這種方法是先讓4根列線輸出0000B,讀取4根行線的數(shù)據(jù)A;再行列反轉,即讓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所示??梢钥闯?,線反轉法速度最快,而雙循環(huán)掃描法最適合用組合鍵。本文選擇雙循環(huán)掃描法。

    2.3 軟件編程

    2.3.1 定義全局變量

    (1)uchar key_TTL[16];

    對應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資源小。

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

    3 評價和推廣

    3.1 評價

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

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

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

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

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

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

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

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

    4 結語

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

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

    [參考文獻]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    猜你喜歡
    實時性
    基于改進YOLOv5s的輕量化布匹瑕疵檢測算法
    基于規(guī)則實時性的端云動態(tài)分配方法研究
    高技術通訊(2021年3期)2021-06-09 06:57:24
    基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡實時性仿真
    航空電子AFDX與AVB傳輸實時性抗干擾對比
    LonWorks總線實時性能分析與仿真研究
    關于對風力送絲系統(tǒng)的智能化改造
    一種滿足實時性需求的測發(fā)控軟件改進技術
    航天控制(2016年6期)2016-07-20 10:21:36
    基于優(yōu)先級標簽的LARS調(diào)度算法在網(wǎng)絡傳輸實時優(yōu)化中的應用研究
    智富時代(2015年9期)2016-01-14 04:41:21
    機器人中間件消息實時性保證機制的研究與實現(xiàn)
    軟件(2015年10期)2015-12-25 07:51:57
    網(wǎng)絡演算理論下的工業(yè)以太網(wǎng)的實時性分析
    成武县| 丹巴县| 视频| 渭源县| 五峰| 嘉兴市| 绥化市| 繁昌县| 高密市| 黄石市| 应城市| 江永县| 潮安县| 萨迦县| 石泉县| 澄城县| 邻水| 晴隆县| 革吉县| 千阳县| 贵港市| 分宜县| 嫩江县| 德阳市| 武平县| 朝阳县| 阿瓦提县| 保山市| 洛阳市| 鄂尔多斯市| 化德县| 天全县| 启东市| 叶城县| 顺昌县| 昌宁县| 中宁县| 宝清县| 禄丰县| 吉林省| 隆尧县|