新聞中心

        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;//返回空鍵值
        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 滨州市| 神池县| 黄陵县| 怀远县| 红安县| 阳江市| 万宁市| 巴马| 长宁区| 江口县| 盐城市| 遂宁市| 清原| 霸州市| 资兴市| 安化县| 江油市| 新乐市| 应用必备| 兴国县| 龙口市| 怀远县| 嫩江县| 香河县| 南木林县| 大竹县| 原阳县| 高阳县| 绥江县| 平江县| 霍州市| 祥云县| 昆山市| 安西县| 金寨县| 遵义市| 若羌县| 肥东县| 金溪县| 渝北区| 柞水县|