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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一個(gè)按鍵的多次擊鍵組合判別技巧匯編程序

          一個(gè)按鍵的多次擊鍵組合判別技巧匯編程序

          作者: 時(shí)間:2012-11-03 來(lái)源:網(wǎng)絡(luò) 收藏
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;由于在學(xué)習(xí)用來(lái)做LED時(shí)鐘時(shí),發(fā)現(xiàn)開(kāi)發(fā)板附的程序?qū)Π存I操作 ;
          ;很不靈活,后來(lái)在網(wǎng)上找到一篇《一個(gè)按鍵的組合判別技巧》;
          ;網(wǎng)址為HTTP://BLOG.21IC.COM/USER1/349/ARCHIVES/2005/669.HTM感覺(jué);
          ;作者的點(diǎn)子不錯(cuò),但本人不懂義隆單片機(jī)的匯編,在網(wǎng)上找不到相關(guān) ;
          ;C51匯編的參考程序,經(jīng)學(xué)習(xí)摸索已改成C51匯編了,并已用XL400 單片;
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          KEY EQU P1.0
          KEY_NUM EQU 20H
          LED1_6 EQU P2
          ;---------------------------------------------------------------
          ;以下主程序演示了不同組合按鍵時(shí),分別控制P2.0-P2.5各端口的LED燈的亮滅。
          ;單次短擊=>P2.0/LED1
          ;單次長(zhǎng)擊=>P2.1/LED2
          ;短擊+短擊=>P2.2/LED3
          ;短擊+長(zhǎng)擊=>P2.3/LED4
          ;長(zhǎng)擊+短擊=>P2.4/LED5
          ;長(zhǎng)擊+長(zhǎng)擊=>P2.5/LED6
          ;------------------------------------------------------------
          ORG 0040H
          AJMP MAIN
          MAIN:
          MOV P1,#0FFH
          MOV P2,#0FFH;初始化端口
          LOOP:
          CALL SREAD_KEY;讀單按鍵--子程序
          MOV R0,KEY_NUM
          CJNE R0,#00000010B,MAIN1;比較鍵值不等跳
          CPL LED1_6.0;取反P2.0
          MAIN1:
          CJNE R0,#00000011B,MAIN2;比較鍵值不等跳
          CPL LED1_6.1;取反P2.1
          MAIN2:
          CJNE R0,#00000100B,MAIN3;比較鍵值不等跳
          CPL LED1_6.2;取反P2.2
          MAIN3:
          CJNE R0,#00000101B,MAIN4;比較鍵值不等跳
          CPL LED1_6.3;取反P2.3
          MAIN4:
          CJNE R0,#00000110B,MAIN5;比較鍵值不等跳
          CPL LED1_6.4;取反P2.4
          MAIN5:
          CJNE R0,#00000111B,MAIN_EXIT;比較鍵值不等跳
          CPL LED1_6.5;取反P2.5
          MAIN_EXIT:
          JMP LOOP
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;讀單按鍵--子程序
          ;子程序執(zhí)行后返回值KEY_NUM即鍵值
          ;-----------------------------說(shuō)明----------------------------
          ;短擊:鍵按下時(shí)間500MS
          ;長(zhǎng)擊:鍵按下時(shí)間>500MS
          ;兩次按鍵間隔時(shí)間700MS
          ;鍵值定義:
          ;KEY_NUM="00000000": 無(wú)鍵按下
          ;KEY_NUM="00000001": 無(wú)意義
          ;KEY_NUM="00000010": 單次短擊
          ;KEY_NUM="00000011": 單次長(zhǎng)擊
          ;KEY_NUM="00000100": 短擊+短擊
          ;KEY_NUM="00000101": 短擊+長(zhǎng)擊
          ;KEY_NUM="00000110": 長(zhǎng)擊+短擊
          ;KEY_NUM="00000111": 長(zhǎng)擊+長(zhǎng)擊
          ;KEY_NUM="00001000": 短擊+短擊+短擊
          ;KEY_NUM="00001001": 短擊+短擊+長(zhǎng)擊
          ;KEY_NUM="00001011": 短擊+長(zhǎng)擊+長(zhǎng)擊
          ;KEY_NUM="00001111": 長(zhǎng)擊+長(zhǎng)擊+長(zhǎng)擊
          ;以編碼從左看起第一個(gè)1看作為分界線(xiàn),左邊為0、而右邊的0和1表示為:
          ;0短擊1長(zhǎng)擊。
          ;以上組合已足夠用了!
          ;*************************************************************
          ;KEY EQU P1.0
          ;KEY_NUM EQU 20H
          ;*************************************************************
          SREAD_KEY:
          MOV KEY_NUM,#00H;鍵值清0
          JB KEY,SKEY_EXIT;鍵未按下跳
          CALL DL10MS;延時(shí)去抖動(dòng)
          JB KEY,SKEY_EXIT;鍵未按下跳
          MOV KEY_NUM,#1;置鍵值為#00000001B
          SKEY_A:
          MOV R0,#00H;清計(jì)數(shù)器
          CLR C;清CY
          SKEY_B:
          CALL DL10MS
          INC R0
          MOV A,#50
          SUBB A,R0
          JC SKEY_C;當(dāng)鍵按下>500MS跳
          JNB KEY,SKEY_B;鍵未釋放跳
          CALL DL10MS;延時(shí)去抖動(dòng)
          JNB KEY,SKEY_B;鍵未釋放跳
          CLR C;CY置0
          JMP SKEY_D
          SKEY_C:
          JNB KEY,$;鍵未釋放停
          CALL DL10MS;延時(shí)去抖動(dòng)
          JNB KEY,$;鍵未釋放停
          SETB C;CY置1
          SKEY_D:
          MOV A,KEY_NUM
          RLC A;鍵值左移一位,C->鍵值低位
          MOV KEY_NUM,A
          JB KEY_NUM.2,SKEY_EXIT;判斷按鍵檢測(cè)是否完成,完成跳
          ;說(shuō)明:KEY_NUM.1時(shí)只判斷單次按鍵兩種組合,KEY_NUM.2時(shí)可判斷兩次按鍵4種組合+單次按鍵的2種組合=6種,以此類(lèi)推。
          MOV R0,#00H;清計(jì)數(shù)器
          CLR C;CY置0
          SKEY_E:
          CALL DL10MS
          INC R0
          MOV A,#70
          SUBB A,R0
          JC SKEY_EXIT;當(dāng)未按下>700MS跳出
          JB KEY,SKEY_E;鍵釋放跳
          CALL DL10MS;延時(shí)去抖動(dòng)
          JB KEY,SKEY_E;鍵釋放跳
          JMP SKEY_A;當(dāng)未按下700MS再次檢測(cè)
          SKEY_EXIT:
          RET
          ;************************************************************
          ;延時(shí)10mS
          ;************************************************************
          DL10ms:
          MOV R5,#14H;20 ;10.262ms=20*511+2*20+1=20.261
          TIME10MS_1:
          MOV R6,#0FFH;255 ;511us=255*2+1
          DJNZ R6,$
          DJNZ R5,TIME10MS_1
          RET
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          END
          塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理


          關(guān)鍵詞: 多次擊鍵 匯編程序 DS1302

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();