標題: 單片機動態(tài)按鍵掃描匯編程序 [打印本頁]

作者: 我人一    時間: 2017-1-7 19:35
標題: 單片機動態(tài)按鍵掃描匯編程序
;動態(tài)按鍵掃描程序,必須使用P2口,因為P3口有下載線
;P3.7為蜂鳴器
;P0,P1兩個端口的燈共計16個,分別由16個
;按鍵控制點亮
;--------清端口-------------------------------------
    MOV P0,#0FFH;關(guān)燈
    MOV P1,#0FFH;關(guān)燈
    CLR P3.7;關(guān)蜂鳴器
;---------按鈕是否按下識別--------------------------
KAI:MOV P2,#00001111B;橫坐標加1,縱坐標加0
    MOV A,P2;將按鍵值讀回到累加器A
    CJNE A,#00001111B,SAO1;判斷按鍵是否按下
    AJMP KAI
;---------讀取按鍵值------------------------------------------
SAO1:MOV B,A;將外部按鍵數(shù)據(jù)存入B寄存器,橫坐標值
     MOV P2,#11110000B;將縱坐標值傳送到P3口
     MOV A,P2;讀出縱坐標值
     ORL A,B;將橫縱坐標值相加,和存入A中
     MOV 40H,A;將第一次讀取的按鍵值存入到內(nèi)存40H單元
;---------------------------------------------------------------
     LCALL YAN
;--------二次按鍵值讀取-----------------------------------------
SAO2:MOV P2,#00001111B
     MOV A,P2
     CJNE A,#00001111B,SAO3
     AJMP KAI
;-------------------------------------------------------
SAO3:MOV B,A
     MOV P2,#11110000B
     MOV A,P2
     ORL A,B;再次讀取的按鍵值相加
     MOV 41H,A;將第二次讀出的按鍵值存入41H內(nèi)存單元
;-----兩次讀取的值比較確定是否一致----------------------
BIJIAO: CJNE A,40H,KAI
        AJMP BBBB;將第一次與第二次讀取的值做比較,看是否一樣
;---------將按鍵值轉(zhuǎn)換為按鍵號碼-----------------------
  PANDUAN:INC R7
          AJMP AAAA
     BBBB:MOV R7,#00D;按鍵號碼
          MOV R6,#16D;需要判斷16個按鍵
     AAAA:MOV A,R7
          MOV DPTR,#TAB;裝入按鍵數(shù)據(jù)表
          MOVC A,@A+DPTR                  
          CJNE A,40H,CUO
          AJMP ZHIXING
      CUO:DJNZ R6,PANDUAN;按鍵值判斷16次限位
          AJMP KAI
;---------功能執(zhí)行-------------------------------------
ZHIXING:CJNE R7,#1D,JIAN2
         CPL P0.0  
         LCALL FENG
         LJMP DENG
  JIAN2:CJNE R7,#2D,JIAN3
         CPL P0.1
         LCALL FENG
         LJMP DENG
  JIAN3:CJNE R7,#3D,JIAN4
        CPL P0.2
                  LCALL FENG
                  LJMP DENG
  JIAN4:CJNE R7,#4D,JIAN5
        CPL P0.3
                  LCALL FENG
                  LJMP DENG
  JIAN5:CJNE R7,#5D,JIAN6
        CPL P0.4
                  LCALL FENG
                  LJMP DENG
  JIAN6:CJNE R7,#6D,JIAN7
        CPL P0.5
                  LCALL FENG
                  LJMP DENG
  JIAN7:CJNE R7,#7D,JIAN8
        CPL P0.6
                  LCALL FENG
                  LJMP DENG
JIAN8:CJNE R7,#8D,JIAN9
        CPL P0.7
                  LCALL FENG
                  LJMP DENG
JIAN9:CJNE R7,#9D,JIAN10
        CPL P1.0
                  LCALL FENG
                  LJMP DENG
JIAN10:CJNE R7,#10D,JIAN11
        CPL P1.1
                  LCALL FENG
                  LJMP DENG
JIAN11:CJNE R7,#11D,JIAN12
        CPL P1.2
                  LCALL FENG
                  LJMP DENG
JIAN12:CJNE R7,#12D,JIAN13
        CPL P1.3
                  LCALL FENG
                  LJMP DENG
JIAN13:CJNE R7,#13D,JIAN14
        CPL P1.4
                  LCALL FENG
                  LJMP DENG
JIAN14:CJNE R7,#14D,JIAN15
        CPL P1.5
                  LCALL FENG
                  LJMP DENG
JIAN15:CJNE R7,#15D,JIAN16
        CPL P1.6
                  LCALL FENG
                  LJMP DENG
JIAN16:  CPL P1.7
                  LCALL FENG
                  LJMP DENG

;--------等待按鈕釋放服務(wù)程序----------------------------
DENG:MOV P2,#11110000B
     MOV A,P2
          CJNE A,#11110000B,DENG
          LJMP KAI

;-----蜂鳴器服務(wù)程序----------------------------------------
FENG:CPL P3.7
     MOV R2,#5D
SS:  LCALL YAN
     DJNZ R2,SS
     CPL P3.7
     RET
;-----延時服務(wù)程序----------------------------
YAN:MOV R0,#250D
YANA:MOV R1,#100D
     DJNZ R1,$
     DJNZ R0,YANA
     RET
;--------按鍵數(shù)據(jù)表---------------------------

TAB:DB 7EH,0BEH,0DEH,0EEH
    DB 7DH,0BDH,0DDH,0EDH
    DB 7BH,0BBH,0DBH,0EBH
    DB 77H,0B7H,0D7H,0E7H
         END






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1