色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 按鍵程序設計,可以處理加速鍵、一鍵多功能等情況

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

          作者: 時間:2016-11-22 來源:網絡 收藏
          我的按鍵程序設計,可以處理加速鍵、一鍵多功能等情況
          后面有P1口行列式鍵盤程序實例
          xwj發(fā)表于2005-4-1516:36單片機←返回版面舉報該貼

          呵呵
          看到論壇在討論按鍵,也把我設計按鍵程序的思路說說,歡迎大家拍磚

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


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

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

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





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

          #defineKEYDELAY25
          #defineKEYLOOP10
          unsignedcharkey_bak;
          unsignedcharkey_temp;
          unsignedcharkey_old;
          unsignedcharkey_data;
          bitkey_ok;

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

          //內部私有函數(shù)//
          unsignedcharfnKeycode(unsignedcharkey);//根據(jù)鍵盤映射表輸出順序鍵值//

          //P1口行列式鍵盤//
          //---------------------------------------------------------------------------//
          voidKeyScan(void)//鍵掃描
          {
          unsignedcharsccode,recode;
          KEYPIN_L=KEYPIN_L|0x0f;//P1低四位為列線輸入//
          KEYPIN_H=KEYPIN_H&0x0f;//P1高四位為行線發(fā)全零掃描碼//
          if((KEYPIN_L&0x0f)!=0x0f)//有鍵按下
          {
          key_temp=鍵值;//鍵掃描,獲得鍵值
          if(key_temp==key_bak)
          {
          key_old++;
          if(key_old==KEYDELAY)//連續(xù)鍵,不要則把此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);//鍵解碼

          }
          key_old=0;
          }
          KEYPIN_H=KEYPIN_H|0xf0;
          }

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

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

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


          評論


          技術專區(qū)

          關閉