<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          我的按鍵程序設(shè)計,可以處理加速鍵、一鍵多功能等情況
          后面有P1口行列式鍵盤程序?qū)嵗?br />xwj發(fā)表于2005-4-1516:36單片機(jī)←返回版面舉報該貼

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

          1、一般都不在鍵盤程序中延時,而是通過隔一段時間調(diào)用(比如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說明按了鍵再放開,當(dāng)然作按鍵有效處理
          保存鍵值到Keydata;(必要時譯碼)
          Keyold=0;--退出

          所有鍵盤程序?qū)ν饨涌?
          unsignedcharKeyGetcode(void)//返回按鍵碼
          {
          key_ok=0;
          return(key_data);
          }

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





          //--------------------------------------------------------------------------//
          //源程序大公開//
          //(c)Copyright2001-2005xuwenjun//
          //AllRightsReserved//
          //V1.00//
          //--------------------------------------------------------------------------//
          //標(biāo) 題:P1口行列式鍵盤程序//
          //文件名:xwj_hlkey.c//
          //版 本:V1.00//
          //修改人:徐文軍E-mail:xuwenjun@21cn.com//
          //日 期:05-05-13//
          //描 述:P1口行列式鍵盤程序//
          //聲 明://
          //以下代碼僅免費提供給學(xué)習(xí)用途,但引用或修改后必須在文件中聲明出處.//
          //如用于商業(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高四位掃描輸出//

          //內(nèi)部私有函數(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);
          }


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();