Thông báo

Collapse
No announcement yet.

VI Điều khiển 89C51-giao tiếp bàn phím và hiển thị

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • VI Điều khiển 89C51-giao tiếp bàn phím và hiển thị

    mình hiện dang làm tiểu luận bài giao tiếp bàn phím và hiển thi ,mà ko hiểu kỹ về cách nó quét phím ,và hoạt động của nó thế nào ,mình xin dược đưa chương trình để các bạn xem thử,rắt mong nhận được sự giúp đỡ của các bạn gần xa.Cảm ơn

    $MOD51
    ORG 00H
    MAIN:
    MOV P1,#00H
    LCALL SCANKEYPAD
    CJNE A,#0CH,NEXT1
    LCALL CHOPTAT
    NEXT1:
    CJNE A,#08H,NEXT2
    LCALL SANGDAN
    NEXT2:
    LJMP MAIN
    SCANKEYPAD:
    PUSH 03H
    MOV R3,#50
    BACK:
    ACALL GETKEY
    JNC NOPRESSED
    DJNZ R3,BACK
    NOPRESSED:
    POP 03H
    RET
    GETKEY:
    PUSH 05H
    PUSH 06H
    PUSH 07H
    MOV A,#0EFH
    MOV R6,#4
    TEST:
    MOV P0,A
    MOV R7,A
    MOV A,P0
    ANL A,#0FH
    CJNE A,#0FH,KEYPRESSED
    MOV A,R7
    RL A
    DJNZ R6,TEST
    CLR C
    SJMP EXIT
    KEYPRESSED:
    MOV R7,A
    MOV A,#4
    CLR C
    SUBB A,R6
    MOV R6,A
    MOV A,R7
    MOV R5,#4
    AGAIN:
    RRC A
    JNC DONE
    INC R6
    INC R6
    INC R6
    INC R6
    DJNZ R5,AGAIN
    DONE:
    SETB C
    MOV A,R6
    EXIT:
    POP 07H
    POP 06H
    POP 05H
    RET

    CHOPTAT:
    MOV P1,#0FFH
    LCALL DELAY500
    MOV P1,#00H
    LCALL DELAY500
    MOV P1,#0FFH
    LCALL DELAY500
    MOV P1,#00H
    LCALL DELAY500
    MOV P1,#0FFH
    LCALL DELAY500
    MOV P1,#00H
    LCALL DELAY500
    MOV P1,#0FFH
    RET
    SANGDAN:
    PUSH ACC
    MOV A,#00H
    SD1:
    SETB C
    MOV P1,A
    LCALL DELAY500
    RLC A
    JNC SD1
    SD2:
    CLR C
    MOV P1,A
    LCALL DELAY500
    RLC A
    JC SD2
    POP ACC
    RET
    DELAY500:
    PUSH 00H
    MOV R0,#1000
    MOV TMOD,#01H
    DEL1:
    MOV TH0,#0ECH
    MOV TL0,#78H
    SETB TR0
    JNB TF0,$
    DJNZ R0,DEL1
    POP 00H
    RET
    END

  • #2
    minh cung giong ban dang kho khan voi no day

    Comment


    • #3
      ///////////////////////
      EN BIT P1.2
      RW BIT P1.1
      RS BIT P1.0
      DATABUS EQU 30H
      ORG 000H
      ////

      /////////////////////
      MOV R5,#38H
      ACALL COMMAND
      MOV R5,#0EH
      ACALL COMMAND
      MOV R5,#01H
      ACALL COMMAND
      MOV R5,#80H
      ACALL COMMAND
      MOV R5,#'K'
      ACALL DATA_DISPLAY
      ACALL PHIM
      MOV R5,#DATABUS
      ACALL DATA_DISPLAY

      ///////////////

      PHIM: ACALL K1
      ACALL K2

      K1: MOV P2,#0FH
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,K1
      K2: ACALL DELAY
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,OVER1
      SJMP K2
      OVER1: ACALL DELAY
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH, OVER2
      SJMP K2
      OVER2: MOV P2,#11101111B
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,ROW_A
      MOV P2,#11011111B
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,ROW_B
      MOV P2,#10111111B
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,ROW_C
      MOV P2,#01111111B
      MOV A,P2
      ANL A,#11111000B
      CJNE A,#0FFH,ROW_D
      SJMP K2
      ROW_A: MOV DPTR,#KCODE0
      SJMP FIND
      ROW_B: MOV DPTR,#KCODE1
      SJMP FIND
      ROW_C: MOV DPTR,#KCODE2
      SJMP FIND
      ROW_D: MOV DPTR,#KCODE3
      SJMP FIND
      FIND: RRC A
      JNC MATCH
      INC DPTR
      SJMP FIND
      MATCH: CLR A
      MOVC A,@A+DPTR
      MOV DATABUS,A
      LJMP K1
      DELAY: MOV TMOD,#01H
      MOV TL0,#0E0H
      MOV TH0,#0B1H
      SETB TR0
      ACALL BAC
      CLR TR0
      CLR TF0
      BAC:JB TF0,BAC
      RET
      KCODE3: DB '*','0','#'
      KCODE2: DB '7','8','9'
      KCODE1: DB '4','5','6'
      KCODE0: DB '1','2','3'
      /////////// /////////////

      COMMAND:
      ACALL READY
      MOV P0,R5
      CLR RS
      CLR RW
      SETB EN
      CLR EN
      RET
      DATA_DISPLAY:
      ACALL READY
      MOV P0,R5
      SETB RS
      CLR RW
      SETB EN
      CLR EN
      RET
      READY: SETB P0.7
      CLR RS
      SETB RW
      BACK: CLR EN
      SETB EN
      JB P0.7,BACK
      RET
      END

      e mới học asem mà ngồi mãi ko viết đc cái code hiển thị nút bấm của bàn phím, anh nào biết chỉ e với, thaks ạ!

      Comment

      Về tác giả

      Collapse

      haninh Tìm hiểu thêm về haninh

      Bài viết mới nhất

      Collapse

      Đang tải...
      X