• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > EDA技術(shù)在微機(jī)接口技術(shù)實(shí)驗(yàn)教學(xué)中的應(yīng)用

    EDA技術(shù)在微機(jī)接口技術(shù)實(shí)驗(yàn)教學(xué)中的應(yīng)用

    作者: 時間:2012-03-16 來源:網(wǎng)絡(luò) 收藏

    2.4 按鍵長按、去抖及相關(guān)問題的解決

    本設(shè)計中,如果長時間(超過2個掃描周期)按同一按鍵視為單次按鍵,處理方法如下:每次掃描到的鍵碼與暫存在data_key的鍵碼相比,如果相等則說明按鍵未釋放,不作處理;如果不等說明有新的按鍵按下,則觸發(fā)中斷。這樣設(shè)計解決了長按鍵的問題,但產(chǎn)生了新的問題:如果下次(間隔了若干個掃描周期)還是同一鍵按下,那么會掃描到同一鍵碼,按照上述處理機(jī)制,這個鍵碼是不送數(shù)據(jù)線的,這是不正確的。

    我們注意到,同一按鍵按下間隔的時鐘周期理論上為4個周期(按本設(shè)計4行掃描線計算),在本設(shè)計中,采用16.384 MHz時鐘,采用計數(shù)的方法進(jìn)行分頻,得到125 Hz的參考時鐘,故需要32 ms。在實(shí)際應(yīng)用中,任何操作人員也達(dá)不到這個速度。所以,這里可以采用一個小技巧:

    設(shè)計一個計數(shù)器,每掃描到一次為0鍵碼(無鍵按下),計數(shù)器加1。如果有鍵按下,即掃描到的鍵碼不為0,則計數(shù)器清零;如果計數(shù)到某一數(shù)值(即時間大于一個掃描周期),則保持當(dāng)前計數(shù)不變。這樣通過綜合分析,得出觸發(fā)中斷、要求得到響應(yīng)的條件為:

    (1) 掃描到的鍵碼不為0;

    (2) 本次掃描到的鍵碼和寄存器data key中的暫存碼不同;

    (3) 計數(shù)器當(dāng)前計數(shù)值大于3;

    這樣就解決了不同按鍵的響應(yīng)問題,或者:

    (1) 掃描到的鍵碼不為0;

    (2) 計數(shù)器當(dāng)前計數(shù)值大于等于5。

    這樣就解決了在以上功能實(shí)現(xiàn)前提下同一按鍵連續(xù)按下的響應(yīng)問題。

    大量實(shí)踐經(jīng)驗(yàn)證明,按鍵抖動時間一般為10 ms(保守估計),本設(shè)計中掃描時鐘為8 ms,在滿足快速響應(yīng)按鍵的同時,在較大程度上也實(shí)現(xiàn)了鍵盤去抖的功能。

    2.5 VHDL程序設(shè)計

    限于篇幅,這里只給出一組掃描線情況(ROW=“1110”)下按鍵識別的設(shè)計實(shí)現(xiàn)方法:



    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 兰考县| 阿巴嘎旗| 保山市| 广水市| 上犹县| 阿克苏市| 项城市| 从江县| 东光县| 微山县| 珲春市| 东方市| 定日县| 静安区| 汶上县| 东台市| 无极县| 天全县| 仙游县| 南通市| 千阳县| 遂溪县| 龙游县| 金寨县| 乌恰县| 体育| 凌云县| 麦盖提县| 柳林县| 右玉县| 介休市| 沛县| 海林市| 山东| 廉江市| 天台县| 苏尼特左旗| 台安县| 内江市| 平山县| 双鸭山市|