新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機行列式鍵盤掃描程序

        51單片機行列式鍵盤掃描程序

        作者: 時間:2016-11-24 來源:網絡 收藏
        #include

        #include
        #define uchar unsigned char
        #define uint unsigned int
        unsigned char code seg7[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};//0到f的字型碼
        unsigned char code hao[4]={0x0e,0x0d,0x0b,0x07};
        unsigned char code key_[16]={1,2,3,15,4,5,6,14,7,8,9,13,0,10,11,12}; //決定了鍵盤按鍵布局

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

        //======================================
        void delay(uint n) //延時程序
        {
        while(n--)
        {_nop_();}
        }

        //======================================

        //======================================
        uchar scan() // 鍵盤掃描程序
        {
        uchar temp,h,j,i,high,low;
        bit find=0; //定義位find標志 并賦值零
        P0=0xf0;
        temp=P0; //行低電平 列高電平
        if(temp!=0xf0) //檢測是否有鍵按下
        {
        delay(1000); //去抖
        if(temp!=0xf0) //確定有鍵按下
        {
        find=1; //標志有鍵按下
        high=(temp>>4); //將列的狀態存入high
        P0=0x0f; //翻轉行列電平
        temp=P0; //再次讀取P0
        low=(temp&0x0f); //將行的狀態存入low
        for(i=0;i<4;i++) //確定按鍵的坐標
        {
        if(hao[i]==high){j=i;}
        if(hao[i]==low){h=i;}
        }
        }
        }
        if(find==0){return 16;}
        else return(4*h+j);
        }
        //=============================================
        void main()
        {
        uchar a,key=0;
        while(1)
        {
        a=scan();
        if(a!=16)
        {
        key=key_[a];
        }
        P1=seg7[key];
        P2=0xfe;
        delay(200);
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 师宗县| 花垣县| 沂水县| 徐闻县| 舒兰市| 孝昌县| 红桥区| 乳山市| 虞城县| 耿马| 略阳县| 柳江县| 孟津县| 莲花县| 白山市| 堆龙德庆县| 彰武县| 瑞安市| 中宁县| 邵阳县| 太谷县| 屯昌县| 枝江市| 昭苏县| 茶陵县| 页游| 湖口县| 丹寨县| 临漳县| 苍溪县| 宕昌县| 泰宁县| 古蔺县| 和政县| 平山县| 南京市| 包头市| 霸州市| 景宁| 通海县| 攀枝花市|