[IMG]

[/IMG]
Code:
;========================================================
TITLE "KEYPAD_4X4"
PROCESSOR P16F877A
INCLUDE <P16F877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF & _LVP_OFF
;==========================================================
;Khai bao bien :
COT EQU 0X20
HANG EQU 0X21
QUET EQU 0X22
DEM EQU 0X23
HANG1 EQU 4
HANG2 EQU 5
HANG3 EQU 6
HANG4 EQU 7
;=============================================================
;Chuong trinh chinh
;=============================================================
ORG 0X0000
GOTO MAIN
ORG 0X0005
MAIN
BANKSEL TRISA
CLRF TRISB
CLRF TRISD
BANKSEL PORTA
CLRW
MOVWF PORTB
MOVWF PORTD
MOVWF COT
MOVWF HANG
MOVWF DEM
MOVLW B'00000001'
MOVWF QUET
LOOP
MOVF QUET,0
MOVWF PORTB
BANKSEL TRISA
MOVLW B'11110000'
MOVWF TRISB
BANKSEL PORTB
BTFSC PORTB,HANG1
CALL HANG1_SFR
BTFSC PORTB,HANG2
CALL HANG2_SFR
BTFSC PORTB,HANG3
CALL HANG3_SFR
BTFSC PORTB,HANG4
CALL HANG4_SFR
INCF DEM,1
MOVF DEM,0
XORLW D'4'
BTFSC STATUS,Z
RETLW 0X00
RLF QUET
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
GOTO LOOP
HANG1_SFR
MOVF COT,0
CALL TABLE
MOVWF PORTD
RETURN
HANG2_SFR
MOVF COT,0
ADDLW D'4'
CALL TABLE
MOVWF PORTD
RETURN
HANG3_SFR
MOVF COT,0
ADDLW D'8'
CALL TABLE
MOVWF PORTD
RETURN
HANG4_SFR
MOVF COT,0
ADDLW D'12'
CALL TABLE
MOVWF PORTD
RETURN
;-----------------------------------------------------------------
TABLE
ADDWF PCL, F ; bat dau tai 0x80
RETLW b'00111111' ; 0
RETLW b'00000110' ; 1
RETLW b'01011011' ; 2
RETLW b'01001111' ; 3
RETLW b'01100110' ; 4
RETLW b'01101101' ; 5
RETLW b'01111101' ; 6
RETLW b'00000111' ; 7
RETLW b'01111111' ; 8
RETLW b'01101111' ; 9
RETLW b'01110111' ; A
RETLW b'01111100' ; B
RETLW b'00111001' ; C
RETLW b'01011110' ; d
RETLW b'01111001' ; E
RETLW b'01110001' ; F
END
em debug băng MPLABSIM thì thấy đúng như ý tưởng của mình,nhưng kô mô phỏng được,các bác coi dùm nhé