mmm, it's working here as suppose to. Using your code above on a 16F877, i tried with...
Code:
<font color="#000000">    @       __CONFIG _XT_OSC &amp; _LVP_OFF
    
    <font color="#000080">INCLUDE </font>&quot;C:\PBP_PROG\INCLUDE_ROUTINES\KeyPad.bas&quot;
    <font color="#000080">INCLUDE </font>&quot;c:\PBP_PROG\EASYPIC4\LCD4.bas&quot;           
    
    <font color="#000080">DEFINE </font>KEYPAD_ROW 4 	 <font color="#008000">' 4 ROW keypad
    </font><font color="#000080">DEFINE </font>KEYPAD_ROW_PORT PORTB <font color="#008000">' ROW port = PORTB
    </font><font color="#000080">DEFINE </font>KEYPAD_ROW_BIT 4 	 <font color="#008000">' ROW0 = PORTB.4
    </font><font color="#000080">DEFINE </font>KEYPAD_COL 3 	 <font color="#008000">' 4 COL keypad
    </font><font color="#000080">DEFINE </font>KEYPAD_COL_PORT PORTB <font color="#008000">' COL port = PORTB
    </font><font color="#000080">DEFINE </font>KEYPAD_COL_BIT 1 	 <font color="#008000">' COL0 = PORTB.0
    </font><font color="#000080">DEFINE </font>KEYPAD_DEBOUNCEMS 20  <font color="#008000">' debounce delay = 20 50 mSec
    </font><font color="#000080">DEFINE </font>SCAN_ONCE 1
    
    OPTION_REG.7=0 	         <font color="#008000">' Enable internal crap pull-up
    
    </font>ByteA <font color="#000080">VAR BYTE

    PAUSE </font>500
    <font color="#000080">LCDOUT </font>$FE,1,&quot;PRESS ANY KEY&quot;

Start:
    @ READKEYPAD _ByteA
    <font color="#000080">IF </font>ByteA <font color="#000080">THEN 
        LCDOUT </font>$FE,$C0,<font color="#000080">REP </font>&quot; &quot;\2,$FE,$C0, <font color="#000080">DEC </font>ByteA
        <font color="#000080">ENDIF
        
    GOTO </font>Start
make sure you have disable the LVP mode and there's no faulty I/Os