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