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

    EEPW首頁 > 嵌入式系統 > 設計應用 > C51單片機矩陣鍵盤掃描去抖程序

    C51單片機矩陣鍵盤掃描去抖程序

    作者: 時間:2011-10-27 來源:網絡 收藏

    電子去抖

    本文引用地址:http://www.czjhyjcfj.com/article/172438.htm

      這段有1個的項目,用的是新華龍的 F020。項目中要使成為事實4*5的電路圖如次如示

      

    矩陣電路圖

      此中,四條列線接在 F020的P2~P5口線上,5條行線接在P5口線上(F020的P5口是差別于平凡C51的擴大接口,不克不及位尋址)。同時4條列線接在一四輸入與非門(74LS20)上,門輸出接F020的外間斷1,如許,不論什么一鍵按下,都會孕育發生間斷,報信舉行電子

      托1個新手給寫了鍵盤的電子,基本功效都能使成為事實,但對鍵盤的去抖措置懲罰老是做欠好,體現是或不克不及去抖,或按鈕相應太卡,或采集到紕繆鍵值。看來新手對矩陣鍵盤電子掃描原理掌握較好(網上資料多),但對鍵盤去抖的知識卻有所欠缺,基本都是按照書上說的延時一段時間再采集鍵值,現實應用中,如許的措置懲罰是遠遠不敷的,過于簡單。現實去抖措置懲罰應該如許舉行更合理一些,即連續采集鍵值,當采集到的鍵值在一段時間內是不異的,即以為按鈕狀況已經穩定,此鍵值為真實鍵值。別的,按鈕開釋時,也會有抖動,導致誤采鍵值,是以在鍵開釋時,也應舉行去抖措置懲罰,措置懲罰要領同時是連續一段時間采集到無鍵按下狀況,才以為按鈕被開釋。按照這個要領,我重寫了新手的程序,現實應用中體現極好。

      現將程序發布如次,供新手參考。

      Key.h文件內容

      #ifndef __key_H__

      #define __key_H__

      #define 滅茬_KEY 0x0000

      #define S1 0x3801

      #define S2 0x3401

      #define S3 0x3802

      #define S4 0x3402

      #define S5 0x3804

      #define S6 0x3404

      #define S7 0x3808

      #define S8 0x3408

      #define S9 0x3810

      #define S10 0x3410

      #define S11 0x2C01

      #define S12 0x1C01

      #define S13 0x2C02

      #define S14 0x1C02

      #define S15 0x2C04

      #define S16 0x1C04

      #define S17 0x2C08

      #define S18 0x1C08

      #define S19 0x2C10

      #define S20 0x1C10

      #define KEY_DELAY 20

      extern unsigned int Key_Value;

      extern void Init_Key();

      extern void Scan_Key();

      extern bit Key_Pressed;

      extern bit Key_Released;

      extern unsigned int idata Keypress_Count;

      extern unsigned int idata Keyrelease_Count;

      #endif

      key.c 文件內容

      #include

      #include key.h

      bit Key_Down; //是不是有鍵按下的標記

      unsigned int idata Keypress_Count;

      sbit Col_Key0 = P2^2;

      sbit Col_Key1 = P2^3;

      sbit Col_Key2 = P2^4;

      sbit Col_Key3 = P2^5;

      bit Key_Pressed;

      bit Key_Released;

      unsigned int Key_Value; bit Key_Down; //是不是有鍵按下的標記

      unsigned int idata Keypress_Count; //一毫秒增加一次的變量

      unsigned int idata Keyrelease_Count; //一毫秒增加一次的變量

      //矩陣鍵盤施用間斷1作為鍵盤間斷

    DIY機械鍵盤相關社區:機械鍵盤DIY



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 沁阳市| 山阴县| 北海市| 旌德县| 白朗县| 马关县| 毕节市| 抚州市| 达日县| 会东县| 饶阳县| 筠连县| 从江县| 客服| 木里| 南通市| 于都县| 临湘市| 武汉市| 北碚区| 建始县| 普陀区| 晋州市| 锦屏县| 镇安县| 弋阳县| 贡嘎县| 郯城县| 星座| 阿拉善左旗| 铅山县| 邓州市| 平乐县| 怀宁县| 织金县| 新沂市| 象州县| 铜陵市| 海淀区| 景洪市| 马公市|