It works of this form?


Code:
@MyConfig = _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF 
@MyConfig = MyConfig & _BODEN_OFF 
@ __config  MyConfig
'@ __CONFIG _HS_OSC & _WDT_ON & _PWRTE_ON  & _LVP_OFF & _CP_OFF
Define PIC16F877A
@ errorlevel -230
CMCON  = 7  
ADCON1 = 7 
define OSC 20
TrisD = %00000000

DEFINE LCD_DREG PORTA
    DEFINE LCD_DBIT 0
    DEFINE LCD_RSREG PORTA
    DEFINE LCD_RSBIT 5
    DEFINE LCD_EREG PORTA
    DEFINE LCD_EBIT 4
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 4

    include "keypad.bas"
pause 1000
lcdout 254,1
lcdout 254,128,"PIC Self Test"
pause 1000
    
    DEFINE KEYPAD_ROW        4        ' 4 ROW keypad       
    DEFINE KEYPAD_ROW_PORT   PORTB    ' ROW port = PORTB
    DEFINE KEYPAD_ROW_BIT    4        ' ROW0 = PORTB.4
    DEFINE KEYPAD_COL        4        ' 3 COL keypad
    DEFINE KEYPAD_COL_PORT   PORTB    ' COL port = PORTB
    DEFINE KEYPAD_COL_BIT    0        ' COL0 = PORTB.1
    DEFINE KEYPAD_DEBOUNCEMS 50       ' debounce delay = 50 mSec
    DEFINE SCAN_ONCE         1

    OPTION_REG.7 = 0        ' Enable internal crap pull-up :D

    PORTB = 0             '  
    TRISB = %11110000     '
    Flags = 0  
    ByteA var byte         '
    Combocount var byte 
        INTCON = %10001000    ' Enable global interrupt
                          ' Enable interrupt on PORTB change
    on interrupt goto KeypadInt
    CLEAR

Portd.2 = 0
combocount = 0

Init:    
    lcdout $FE,1,"Press any Key"
 disable
KeypadINT:    
@ READKEYPAD _ByteA
    TRISB=%11110000
    PORTB=0
    INTCON.0=0
    resume
enable   
    
    
Start:
    if ByteA then
    If ByteA = 4  then ByteA = "A"
    if ByteA = 5  then ByteA = 4
    if ByteA = 6  then ByteA = 5
    if ByteA = 7  then ByteA = 6
    if ByteA = 8  then ByteA = "B"
    if ByteA = 9  then ByteA = 7
    if ByteA = 10 then ByteA = 8
    if ByteA = 11 then ByteA = 9
    if ByteA = 12 then ByteA = "C"
    if ByteA = 13 then ByteA = "*"
    if ByteA = 14 then ByteA = 0
    if ByteA = 15 then ByteA = "#"
    if ByteA = 16 then ByteA = "D"
    if ByteA != 0 then  gosub combo
        
        ByteA = 0
        pause 1000
        goto init
        'else
           
else   
endif
goto start

combo:
    IF (combocount = 0) and (ByteA = 7)   then GoodKey
    IF (combocount = 1) and (ByteA = 8)   then GoodKey
    IF (combocount = 2) and (ByteA = "A") then GoodKey
    IF (combocount = 3) and (ByteA = 5)   then GoodKey
    IF (combocount = 4) and (ByteA = "D") then GoodKey
    combocount = 0 ; invalid keypress
return

GoodKey:
    combocount = combocount + 1
    if combocount = 5 then GrantAccess
return
goto init ' Combination 78A5D


GrantAccess:
hight portd.2
pause 1000
low portd.2
pause 1000

ByteA = 0
Combo1 = 0


end