新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C51單片機矩陣鍵盤掃描去抖程序

        C51單片機矩陣鍵盤掃描去抖程序

        作者: 時間:2011-10-27 來源:網絡 收藏
        void Init_Key()

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

          {

          P5 = 0; //行線全數置為0

          EX1 = 1; // 允許外部鐘表秒間斷

          IT1 = 1; // 外部鐘表間斷配備布置為邊緣觸發

          }

          void Key_Int() interrupt 2

          {

          Key_Pressed = 1;

          EX1 = 0;

          }

          void Scan_Key()

          {

          unsigned char temp,rowvalue;

          unsigned int key;

          int i;

          temp = P2;

          temp = 0x3C;

          if(temp == 0x3C)

          {

          Key_Released = 0;

          Key_Pressed = 0;

          key = 滅茬_KEY;

          EX1 = 1;

          }

          else

          {

          key = temp;

          key = key8;

          rowvalue = 0x01;

          for(i=0;i5;i )

          {

          P5 = rowvalue

          DelayMs⑴;

          temp = P2;

          temp = 0x3C;

          if(temp == 0x3c)

          {

          rowvalue = rowvalue

          key = key | rowvalue;

          P5 = 0x00;

          break;

          }

          }

          P5 = 0x00;

          DelayMs⑴;

          }

          if(key!=滅茬_KEY) //如果有鍵按下

          { if(key==Key_Value) //如果按下的是不異的鍵

          {

          if(Keypress_Count>=KEY_DELAY)

          {

          Key_Down = 1;

          }

          }

          else if(Key_Down != 1)

          {

          Keypress_Count=0;

          Keyrelease_Count = 0;

          Key_Value=key;

          }

          }

          else //如果無鍵按下

          {

          if(Key_Down) //如果時下是鍵開釋,返回鍵值

          {

          if(Keyrelease_Count >= KEY_DELAY)

          {

          Key_Down=0;

          Keypress_Count=0;

          Keyrelease_Count=0;

          Key_Released = 1;

          EX1 = 1;

          return;

          }

          }

          else

          {

          Keypress_Count=0;

          Keyrelease_Count=0;

          Key_Value = 滅茬_KEY;

          EX1 = 1;

          return;

          }

          }

          }

          在main.c中的挪用要領為

          if(Key_Pressed == 1)

          {

          //Key_Pressed = 0;

          Scan_Key();

          }

          if(Key_Released == 1)

          {

          Key_Released = 0;

          Ack_Key();

          }

        DIY機械鍵盤相關社區:機械鍵盤DIY



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 梅河口市| 洪泽县| 马鞍山市| 信宜市| 当雄县| 长葛市| 门头沟区| 湛江市| 上杭县| 阿勒泰市| 富川| 岑溪市| 桃园市| 杭锦后旗| 资中县| 拉孜县| 阿图什市| 兰坪| 巫溪县| 莱州市| 桃源县| 南平市| 阜平县| 米易县| 巴林右旗| 龙胜| 太湖县| 柯坪县| 葫芦岛市| 石屏县| 深泽县| 蕉岭县| 平凉市| 开鲁县| 绥宁县| 大荔县| 孝义市| 姜堰市| 年辖:市辖区| 乳山市| 凤凰县|