新聞中心

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

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

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

        電子去抖

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

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

          

        矩陣電路圖

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

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

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

          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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宝鸡市| 西城区| 渭南市| 阿尔山市| 通山县| 常山县| 且末县| 西昌市| 宁蒗| 桐柏县| 循化| 岳普湖县| 无棣县| 资兴市| 永川市| 大宁县| 金湖县| 蓬莱市| 义马市| 隆昌县| 弥渡县| 梁平县| 竹溪县| 鄂州市| 樟树市| 漳州市| 德化县| 徐水县| 太仆寺旗| 轮台县| 汝阳县| 榆社县| 元谋县| 太和县| 二手房| 怀化市| 岳普湖县| 江陵县| 武隆县| 宁蒗| 望奎县|