新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機一般按鍵的設計

        單片機一般按鍵的設計

        作者: 時間:2016-11-26 來源:網絡 收藏
        一、機械按鍵的抖動

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

        鍵盤,作為向系統操作人員的干預指令的接口,以其特定的按鍵序列代表著各種確定的操作命令,所以,準確無誤的辨認每個鍵的動作和其所處的狀態,是系統能否正常工作的關鍵。多數鍵盤的按鍵多使用機械式彈性開關,一個電信號通過機械觸點的斷開,閉合過程完成高低電平的切換。由于機械觸點的彈性作用,一個按鍵開關在閉合及斷開的瞬間必然伴隨著一連串的抖動,其波形如圖所示:


        抖動過程的長短是由按鍵的機械特性決定,一般是10~20ms。為了使CPU對一次按鍵動作只確認一次,必須消除抖動的影響,可以從硬件及軟件兩個方面著手。本文只介紹軟件方面的防抖。

        軟件防抖的思路:當第一次檢測到有建按下時,先用軟件延時(10~20ms),而后再確認鍵電平是否依舊維持閉合狀態的電平。若保持閉合狀態電平,則確認此間已按下,從而消除抖動影響。

        二、proteus仿真

        源程序:

        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int

        sbit jia_key=P2^0;
        sbit jian_key=P2^1;

        uint i;//定義要顯示的數字、字符
        uchar duan_code[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
        };//共陰極數碼管段碼0~F

        void delay_ms(uint z)//ms級延遲函數,z表示形參,是幾就是幾ms延遲
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=99;y>0;y--)
        { _nop_();
        _nop_();
        }
        }

        void scankey(void)//按鍵掃描函數
        {
        if(jia_key==0)//加按鍵檢測
        {
        delay_ms(150);//延遲防抖
        if(jia_key==0)//加按鍵檢測
        i++;
        if(i>15)
        i=15;
        }

        if(jian_key==0)//減按鍵檢測
        {
        delay_ms(150);//延遲防抖
        if(jian_key==0)//減按鍵檢測
        i--;
        if(i<0)
        i=0;
        }

        }
        void main(void)//主函數
        {
        P0=0X00;//初始化P0口為低電平
        while(1)
        {
        scankey();//檢測按鍵
        P0=duan_code[i];//數碼管顯示
        }
        }



        關鍵詞: 單片機一般按

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 胶州市| 平南县| 安宁市| 平凉市| 贡嘎县| 滁州市| 车险| 治县。| 新化县| 牟定县| 通渭县| 顺义区| 娄烦县| 澜沧| 米脂县| 湟源县| 天水市| 太白县| 石屏县| 靖安县| 大石桥市| 成安县| 八宿县| 云霄县| 固原市| 虎林市| 岗巴县| 阿拉善左旗| 开鲁县| 渭南市| 大庆市| 浏阳市| 西乡县| 呼和浩特市| 娄底市| 思南县| 伊吾县| 阿拉尔市| 翁源县| 宜州市| 两当县|