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




Bookmarks