新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 鍵盤子程序(AVR) 

        鍵盤子程序(AVR) 

        作者: 時間:2013-12-09 來源:網絡 收藏

        ) 

        鍵盤掃描有
        #i nclude "jn8515def.h"

        /******以下是鍵盤排列圖******
        | | |
        PC0 ___1|__2|__3|__
        | | |
        PC1 ___4|__5|__6|__
        | | |
        PC2 ___7|__8|__9|__
        | | |
        PC3 ___C|__0|__S|__
        | | |
        | | |
        PC4 PC5 PC6
        *****************************/
        //下沿為有效鍵值 0 1 2 3 4 5 6 7 8 9 s(10) c0 c1 c4 c7 cs c
        flash uchar cKeyTab[]={0x57,0x6e,0x5e,0x3e,0x6d,0x5d,0x3d,0x6b,0x5b,0x3b,0x37,0x47,0x66,0x65,0x63,0x27,0x67};
        flash uchar cKeyOut[]={0xef,0xdf,0xbf}; //其中一列為0
        flash uchar cKeyDir[]={0x10,0x20,0x40};
        uchar cMenu=0;

        uchar cKeyVal()
        { static uchar cLastKv,cSameKvNum=0;
        static bit bKeyPress=0;
        uchar i,j,cKeytmp=0xff;
        for(i=0;i3;i++)
        { DDRC=0x80;
        DDRC|=cKeyDir[i];
        PORTC=cKeyOut[i];
        #asm("nop")
        #asm("nop")
        cKeytmp=PINC0x7f;
        for(j=0;j16;j++)
        { if(cKeyTab[j]==cKeytmp)
        { cWaitTime=10; //延時去抖
        goto Next;
        }
        }
        }
        // do{ //等待按鍵釋放
        // }while(!bKeyPress);
        cSameKvNum=0;
        bKeyPress=0;
        return 0xff;
        Next:
        // delay_ms(2);
        if(bKeyPress) return 0xff;
        if(cKeytmp==cLastKv)
        { if(++cSameKvNum>10)
        { cSameKvNum=0;
        bKeyPress=1;
        return j;
        }
        }
        else
        { cSameKvNum=0;
        cLastKv=cKeytmp;
        }

        return 0xff;//返回空鍵值
        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东辽县| 福泉市| 天等县| 新乐市| 西和县| 聊城市| 巍山| 方城县| 洛南县| 于都县| 砚山县| 南郑县| 绥阳县| 曲水县| 察隅县| 五华县| 剑阁县| 南乐县| 仪陇县| 胶州市| 沭阳县| 进贤县| 和林格尔县| 边坝县| 邵武市| 绥滨县| 岚皋县| 青阳县| 紫云| 恩施市| 宝清县| 双桥区| 宁化县| 嘉峪关市| 余干县| 清丰县| 灵台县| 南皮县| 武陟县| 阜南县| 阳江市|