1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      按鍵程序設計,可以處理加速鍵、一鍵多功能等情況

      更新時間: 2006-03-09 14:46:55來源: 粵嵌教育瀏覽量:2639

      1、一般都不在鍵盤程序中延時,而是通過隔一段時間調用(比如10毫秒)來掃描按鍵,以盡量釋放CPU資源;
      2、所有鍵盤程序基本上都是一個模式,可以處理加速鍵、一鍵多功能等情況;
      3、對外接口只有2個,換用不同硬件的鍵盤只需把該鍵盤程序加入工程編譯即可,其他不需要作任何改動,非常方便。


      基本上都是一個模式:
      有鍵?--YES——和上次相同?--No--Keyold=0;退出
      | |
      | YES--Keyold++;
      | |
      | Keyold==首鍵延時KEYDELAY?--No--退出
      | |
      | YES--Keyok=1; //按下不放一定時間發首鍵,后面發加速鍵
      | 保存鍵值到Keydata;(必要時譯碼)
      | Keyold=KEYDELAY-KEYLOOP(按住不放的延時);--退出
      |
      No--Keyold==0?--YES--退出
      |
      N0--Keyok=1; //不為0說明按了鍵再放開,當然作按鍵有效處理
      保存鍵值到Keydata;(必要時譯碼)
      Keyold=0;--退出

      所有鍵盤程序對外接口:
      unsigned char KeyGetcode(void) //返回按鍵碼
      {
      key_ok=0;
      return(key_data);
      }

      bit KeyTest(void) //檢查有無按鍵
      {
      KeyScan(); //鍵掃描
      return(key_ok);
      }





      //--------------------------------------------------------------------------//
      // 源程序大公開 //
      // (c) Copyright 2001-2005 xuwenjun //
      // All Rights Reserved //
      // V1.00 //
      //--------------------------------------------------------------------------//
      //標 題: P1口行列式鍵盤程序 //
      //文件名: xwj_hlkey.c //
      //版 本: V1.00 //
      //修改人: 徐文軍 E-mail:xuwenjun@21cn.com //
      //日 期: 05-05-13 //
      //描 述: P1口行列式鍵盤程序 //
      //聲 明: //
      // 以下代碼僅免費提供給學習用途,但引用或修改后必須在文件中聲明出處. //
      // 如用于商業用途請與作者聯系. E-mail:xuwenjun@21cn.com //
      // 有問題請mailto xuwenjun@21cn.com 歡迎與我交流! //
      //--------------------------------------------------------------------------//
      //老版本: 無 老版本文件名: //
      //創建人: 徐文軍 E-mail:xuwenjun@21cn.com //
      //日 期: 05-05-13 //
      //--------------------------------------------------------------------------//
      #include <reg52.h>
      #include "xwj_hlkey.h" // P1口行列式鍵盤 //
      //#include "xwj_bp.h" //峰鳴器

      #define KEYDELAY 25 /*首鍵延遲次數*/
      #define KEYLOOP 10 /*連續鍵間隔次數,需小于KEYDELAY*/
      unsigned char key_bak;
      unsigned char key_temp;
      unsigned char key_old;
      unsigned char key_data;
      bit key_ok;

      // P1口行列式鍵盤 //
      #define KEYPIN_L P1 // 定義鍵掃描列端口為 P1低四位輸入 //
      #define KEYPIN_H P1 // 定義鍵掃描行端口為 P1高四位掃描輸出 //

      //內部私有函數 //
      unsigned char fnKeycode(unsigned char key); // 根據鍵盤映射表輸出順序鍵值 //

      // P1口行列式鍵盤 //
      //---------------------------------------------------------------------------//
      void KeyScan(void) //鍵掃描
      {
      unsigned char sccode,recode;
      KEYPIN_L = KEYPIN_L|0x0f; // P1低四位為列線輸入 //
      KEYPIN_H = KEYPIN_H&0x0f; // P1高四位為行線發全零掃描碼 //
      if ((KEYPIN_L&0x0f) != 0x0f) //有鍵按下
      {
      key_temp = 鍵值; //鍵掃描,獲得鍵值
      if (key_temp == key_bak)
      {
      key_old++;
      if (key_old==KEYDELAY) //連續鍵,不要則把此if屏蔽
      {
      key_ok=1;
      key_data=fnKeycode(key_temp); //鍵解碼
      key_old=KEYDELAY-KEYLOOP;
      }
      }
      else
      {
      key_old=0;
      key_bak=key_temp;
      }
      }
      else //鍵抬起
      {
      if (key_old)
      {
      key_ok=1;
      key_data=fnKeycode(key_temp); //鍵解碼
      /* if (key_old==100) //加上時間,不同時間不同功能,與連續鍵沖突
      {
      bp(1);
      key_data += 0x10;
      }
      if (key_old==200)
      {
      bp(2);
      key_data += 0x20;
      }
      */
      }
      key_old=0;
      }
      KEYPIN_H = KEYPIN_H|0xf0;
      }

      //---------------------------------------------------------------------------//

      unsigned char KeyGetcode(void) //返回按鍵碼
      {
      key_ok=0;
      return(key_data);
      }

      bit KeyTest(void) //檢查有無按鍵
      {
      KeyScan(); //鍵掃描
      return(key_ok);
      }

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 色婷婷综合精品中文在线 | 亚洲成α人片在线观看 | 在线亚洲国产职场丝袜 | 亚洲高清无在码在线电影 | 伊人久久精品青青草原 | 一本久久精品久久 |