• 
    

    
    

      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)的實時性分析
      公安县| 仙居县| 根河市| 惠东县| 微博| 清河县| 方正县| 林州市| 鹤庆县| 上饶县| 九江县| 张家界市| 彝良县| 鹤山市| 昌黎县| 昂仁县| 鹤壁市| 依兰县| 修水县| 淄博市| 温泉县| 烟台市| 迁安市| 廊坊市| 洪雅县| 留坝县| 河津市| 东光县| 建瓯市| 武鸣县| 淮南市| 石景山区| 离岛区| 新和县| 勐海县| 霍邱县| 来凤县| 赤壁市| 凉城县| 木里| 轮台县|