新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 4*4矩陣鍵盤模塊程序的調用

        4*4矩陣鍵盤模塊程序的調用

        作者: 時間:2016-11-18 來源:網絡 收藏
        產生.lib文件的方法:選擇“工程”——“目標target屬性”——“輸出”——產生庫文件*.lib,修改完后,編譯一下程序,無措后,就在工程目錄下產生一個.lib文件,到時要用到這個模塊程序時,直接把.c和.lib文件拷貝到所在的目錄下,再把.c的文件加載到工程文件里就OK了。

        /*
        ***************************************************************************************
        摘 要: 4*4小鍵盤模塊程序,供以后其他程序調用.其中P2口高四位接鍵盤列,P2口低四位接鍵盤行,
        版 本: V1.0
        完成日期: 2008.4.28
        作 者: ZHOUSFE
        ***************************************************************************************
        修改日期: 2008.5.6
        版 本: V1.2
        ****************************************************************************************
        */

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

        #i nclude
        #define uchar unsigned char
        #define keyport P2
        //uchar code seg[16]=

        {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E}; //0~f,

        共陽極
        uchar code keycode[16]=

        {0xEE,0XDE,0XBE,0X7E,0XED,0XDD,0XBD,0X7D,0XEB,0XDB,0XBB,0X7B,0XE7,0XD7,0XB7,0X77};//待查詢的

        鍵碼值

        /*
        *******************************************************************************************
        函數名稱:delay()
        功能描述:延時ms個微妙
        入口參數:unsigned int ms
        出口參數:無
        *******************************************************************************************
        */

        void delay(unsigned int ms)
        {
        unsigned char a;
        while(!ms--)
        for(a=0;a<124;a++);
        }

        /*
        *******************************************************************************************
        函數名稱:keyscan()
        功能描述:鍵盤掃描程序,利用行掃描方式,得到鍵值
        入口參數:無
        出口參數:掃描得到的鍵值~((~sm)+(~fh))
        *******************************************************************************************
        */

        uchar keyscan(void)
        {
        uchar sm; //存放行掃描代碼,該函數的返回值的低四位
        uchar fh; //該函數的返回值的高四位
        keyport=0xf0;
        if((keyport&0xf0)!=0xf0) //判斷是否有按鍵按下
        {
        delay(2); //去抖動延時(1~10ms)
        if((keyport&0xf0)!=0xf0)
        {
        sm=0xfe; //行掃描初值
        while((sm&0x10)!=0)
        {
        keyport=sm;
        if((keyport&0xf0)!=0xf0) //若本行有鍵按下,則執行讀取鍵值信息
        {
        fh=(keyport&0xf0)|0x0f;
        return(~((~sm)+(~fh))); //返回掃描的鍵值
        }
        else sm=(sm<<1)|0x01; //若本行沒有鍵按下,則掃描下一行
        }
        }
        }
        return 0xff; //若沒有按鍵按下,則返回0xff
        }

        /*
        *******************************************************************************************
        函數名稱:getkey()
        功能描述:將掃描得到的鍵值轉化為對應的0~f
        入口參數:無
        出口參數:顯示的數字0~f
        *******************************************************************************************
        */

        uchar getkey()
        {
        uchar key;
        uchar temp;
        uchar j;
        while(1)
        {
        key=keyscan();
        delay(2);
        for(j=0;j<16;j++)
        {
        if(key==keycode[j]) //通過查詢方式,得到按下的按鍵值
        {
        temp=j; //按鍵值先保存于temp中
        if(key==0xff) //若沒有按下下一個鍵,則一直顯示上一個鍵值
        {
        return temp;
        }
        else
        {
        return j;
        temp=j; //更新temp里的值
        }
        }
        }
        }
        }
        /*
        *******************************************************************************************
        測試用函數
        *******************************************************************************************
        */
        /*void main(void)
        {
        uchar ch;
        P3&=0xfe;
        while(1)
        {
        ch=getkey();
        P0=~seg[ch]; //P0口接數碼管
        }
        }*/



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 牟定县| 阆中市| 丽江市| 三明市| 孟津县| 千阳县| 辰溪县| 邢台市| 汤阴县| 海原县| 琼中| 安远县| 屏南县| 长岛县| 嵩明县| 马龙县| 蓝田县| 西宁市| 三亚市| 定西市| 志丹县| 登封市| 太原市| 江川县| 建宁县| 车致| 来凤县| 科技| 遂平县| 页游| 怀远县| 邻水| 霍城县| 汤阴县| 水富县| 日土县| 康马县| 东乌| 阜平县| 新竹市| 临夏市|