新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機檢測矩陣鍵盤.c文件

        單片機檢測矩陣鍵盤.c文件

        作者: 時間:2016-11-30 來源:網絡 收藏

        這是電路圖

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

        仿真文件和完整源碼下載:http://www.51hei.com/bbs/dpj-22586-1.html

        下面是矩陣鍵盤.c文件
        #include
        #include "delay_ms.h"http://利用函數delay_ms(unsigned int x)延時 x ms
        #include "矩陣鍵盤.h" //頭文件中宏定義#define JPJK P3
        void baoj1();
        unsigned char keyscan()
        {
        unsigned char temp,key;
        key = 0xff;
        JPJK = 0xfe; //將第一行線置低電平
        temp = JPJK;//讀JPJK的當前狀態到 temp
        temp &= 0xf0;// temp = temp & 0xf0 按位與
        if(temp != 0xf0)
        {
        delay_ms(10);//延時去抖
        temp = JPJK;
        temp &= 0xf0;
        if(temp != 0xf0)//第一行有鍵被按下
        {
        temp = JPJK;//讀被按下的鍵
        baoj1();
        switch(temp)
        {
        case 0xee: key = 1;break;
        case 0xde: key = 2;break;
        case 0xbe: key = 3;break;
        case 0x7e: key = 0x0a;break;
        }
        while(temp != 0xf0)//等待按鍵釋放
        {
        temp = JPJK;
        temp &= 0xf0;
        }
        }
        }
        JPJK = 0xfd; //將第二行線置低電平
        temp = JPJK;//讀JPJK的當前狀態到 temp
        temp &= 0xf0;// temp = temp & 0xf0
        if(temp != 0xf0)
        {
        delay_ms(10);//延時去抖
        temp = JPJK;
        temp &= 0xf0;
        if(temp != 0xf0)//第二行有鍵被按下
        {
        temp = JPJK;//讀被按下的鍵
        baoj1();
        switch(temp)
        {
        case 0xed: key = 4;break;
        case 0xdd: key = 5;break;
        case 0xbd: key = 6;break;
        case 0x7d: key = 0x0b;break;
        }
        while(temp != 0xf0)//等待按鍵釋放
        {
        temp = JPJK;
        temp &= 0xf0;
        }
        }
        }
        JPJK = 0xfb; //將第 三行線置低電平
        temp = JPJK;//讀JPJK的當前狀態到 temp
        temp &= 0xf0;// temp = temp & 0xf0
        if(temp != 0xf0)
        {
        delay_ms(10);//延時去抖
        temp = JPJK;
        temp &= 0xf0;
        if(temp != 0xf0)//第三行有鍵被按下
        {
        temp = JPJK;//讀被按下的鍵
        baoj1();
        switch(temp)
        {
        case 0xeb: key = 7;break;
        case 0xdb: key = 8;break;
        case 0xbb: key = 9;break;
        case 0x7b: key = 0x0c;break;
        }
        while(temp != 0xf0)//等待按鍵釋放
        {
        temp = JPJK;
        temp &= 0xf0;
        }
        }
        }
        JPJK = 0xf7; //將第四行線置低電平
        temp = JPJK;//讀JPJK的當前狀態到 temp
        temp &= 0xf0;// temp = temp & 0xf0
        if(temp != 0xf0)
        {
        delay_ms(10);//延時去抖
        temp = JPJK;
        temp &= 0xf0;
        if(temp != 0xf0)//第四行有鍵被按下
        {
        temp = JPJK;//讀被按下的鍵
        baoj1();
        switch(temp)
        {
        case 0xe7: key = 0;break;
        case 0xd7: key = 0;break;
        case 0xb7: key = 0x0f;break;
        case 0x77: key = 0x0d;break;
        }
        while(temp != 0xf0)//等待按鍵釋放
        {
        temp = JPJK;
        temp &= 0xf0;
        }
        }
        }
        return key; //返回按下的鍵
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 合江县| 禄丰县| 岳西县| 清流县| 吉林省| 南充市| 孝义市| 大埔县| 博客| 翼城县| 四平市| 垦利县| 泰和县| 乐都县| 潼关县| 景宁| 宁蒗| 大理市| 华坪县| 雅安市| 恩施市| 宜春市| 敖汉旗| 沙坪坝区| 安岳县| 嘉善县| 密云县| 冷水江市| 清水河县| 噶尔县| 沭阳县| 沾益县| 湘潭市| 麻栗坡县| 灌云县| 大丰市| 大安市| 丹巴县| 林芝县| 祥云县| 韶关市|