Blazemaguire
Senior Member
Hi,
This is my most ambitious programe yet (for me at least, go easy!) - I'm trying to make a simple keypad activated lock, but also with a 'set code' mode where the 4 digit pin can be set from within the programe.
I had the structure working fine when it was just looking for a code that was set in the original programe, but now I've added functionality to allow setting of the code whilst in operation, i've exceeded my memory by 547 bytes.
As a code novice, I do not know any shortcuts for reducing the size of the programe without reducing the functionality. - Could someone have a look and give me some pointers that I could try to reduce the size? - I'm using an 18m2 chip. - I'd rather not have to use one of the bigger memory versions.
I've started to comment the front of the programme, but the rest is repetition.
This is my most ambitious programe yet (for me at least, go easy!) - I'm trying to make a simple keypad activated lock, but also with a 'set code' mode where the 4 digit pin can be set from within the programe.
I had the structure working fine when it was just looking for a code that was set in the original programe, but now I've added functionality to allow setting of the code whilst in operation, i've exceeded my memory by 547 bytes.
As a code novice, I do not know any shortcuts for reducing the size of the programe without reducing the functionality. - Could someone have a look and give me some pointers that I could try to reduce the size? - I'm using an 18m2 chip. - I'd rather not have to use one of the bigger memory versions.
I've started to comment the front of the programme, but the rest is repetition.
Code:
init:
symbol codepos1=140 'for determining where to display the character on the LCD
symbol codepos2=141 'for determining where to display the character on the LC
symbol codepos3=142 'for determining where to display the character on the LC
symbol codepos4=143 'for determining where to display the character on the LC
symbol scancode1=b1 'reading the code part 1
symbol scancode2=b2 'reading code part 2
symbol scancode3=b3 'reading code part 3
symbol scancode4=b4 'reading code part 4
symbol setcode1=b5 'storage of programmed code part 1
symbol setcode2=b6 'storage of programmed code part 2
symbol setcode3=b7 'storage of programmed code part 3
symbol setcode4=b8 'storage of programmed code part 4
symbol delaycode=250 'how long to display a character before moving on to next
symbol programmemode=b9 'to keep track of being in setcode mode, or scancode mode.
symbol yes=1
symbol no=0
symbol timetounlock=w9
setcode1=0 'set default code to 0000
setcode2=0
setcode3=0
setcode4=0
main:
serout b.3,N2400,(254,1) ' clear display
pause 200
if programmemode=no then
serout b.3,N2400,(254,128,"Enter Code: ") 'display enter code on LCD if in non programme mode
else if programmemode=yes then
serout b.3,N2400,(254,128,"Set Code: ") 'display set code on LCD if in setcode mode.
endif
low b.0,b.1 'turn of both status LEDS (red and green LED for locked / unlocked status attached to these outputs)
pause 1000
timetounlock=0 'reset the time unlocked variable
'read button press 1 code or setting
scan1:
'scan row 1
high b.4 low b.5,b.6,b.7 'set row 1 high and the others lows
if pinc.2=1 then 'read column 1
serout b.3,N2400,(254,codepos1,"1")
if programmemode=no then: scancode1=1: pause delaycode
elseif programmemode=yes then: setcode1=1: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.1=1 then 'read column 2
serout b.3,N2400,(254,codepos1,"2")
if programmemode=no then: scancode1=2: pause delaycode
elseif programmemode=yes then: setcode1=2:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.0=1 then 'read column 3
serout b.3,N2400,(254,codepos1,"3")
if programmemode=no then: scancode1=1: pause delaycode
elseif programmemode=yes then: setcode1=2:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
else
endif
'scan row 2
high b.5 low b.4,b.6,b.7
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"3")
if programmemode=no then: scancode1=3: pause delaycode
elseif programmemode=yes then: setcode1=3: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"4")
if programmemode=no then: scancode1=4: pause delaycode
elseif programmemode=yes then: setcode1=4:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"5")
if programmemode=no then: scancode1=5: pause delaycode
elseif programmemode=yes then: setcode1=5:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
else
endif
'scan row 3
high b.6 low b.4,b.5,b.7
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"7")
if programmemode=no then: scancode1=7: pause delaycode
elseif programmemode=yes then: setcode1=7: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"8")
if programmemode=no then: scancode1=8: pause delaycode
elseif programmemode=yes then: setcode1=8:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"9")
if programmemode=no then: scancode1=9: pause delaycode
elseif programmemode=yes then: setcode1=9:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
else
endif
'scan row 4
high b.7 low b.4,b.5,b.6
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"*")
if programmemode=no then: scancode1=10: pause delaycode
elseif programmemode=yes then: setcode1=10: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"0")
if programmemode=no then: scancode1=0: pause delaycode
elseif programmemode=yes then: setcode1=0:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"#")
if programmemode=no then: scancode1=11: pause delaycode
elseif programmemode=yes then: setcode1=11:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto scan2
else
endif
goto scan1
'2nd and third code read should happen here
'---------------------------------------------------------------------------------------------------------------------
'read 4th button into memory
scan4:
'scan row 1
high b.4 low b.5,b.6,b.7
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"1")
if programmemode=no then: scancode4=1: pause delaycode
elseif programmemode=yes then: setcode4=1: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"2")
if programmemode=no then: scancode4=2: pause delaycode
elseif programmemode=yes then: setcode4=2:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"3")
if programmemode=no then: scancode4=1: pause delaycode
elseif programmemode=yes then: setcode4=2:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
else
endif
'scan row 2
high b.5 low b.4,b.6,b.7
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"3")
if programmemode=no then: scancode4=3: pause delaycode
elseif programmemode=yes then: setcode4=3: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"4")
if programmemode=no then: scancode4=4: pause delaycode
elseif programmemode=yes then: setcode4=4:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"5")
if programmemode=no then: scancode4=5: pause delaycode
elseif programmemode=yes then: setcode4=5:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
else
endif
'scan row 3
high b.6 low b.4,b.5,b.7
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"7")
if programmemode=no then: scancode4=7: pause delaycode
elseif programmemode=yes then: setcode4=7: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"8")
if programmemode=no then: scancode4=8: pause delaycode
elseif programmemode=yes then: setcode4=8:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"9")
if programmemode=no then: scancode4=9: pause delaycode
elseif programmemode=yes then: setcode4=9:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
else
endif
'scan row 4
high b.7 low b.4,b.5,b.6
if pinc.2=1 then
serout b.3,N2400,(254,codepos1,"*")
if programmemode=no then: scancode4=10: pause delaycode
elseif programmemode=yes then: setcode4=10: programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.1=1 then
serout b.3,N2400,(254,codepos1,"0")
if programmemode=no then: scancode4=0: pause delaycode
elseif programmemode=yes then: setcode4=0:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
elseif pinc.0=1 then
serout b.3,N2400,(254,codepos1,"#")
if programmemode=no then: scancode4=11: pause delaycode
elseif programmemode=yes then: setcode4=11:programmemode=no else: endif
serout b.3,N2400,(254,codepos1,"*"): pause delaycode
goto checkcode
else
endif
goto scan4
checkcode:
if scancode1=setcode1 and scancode2=setcode2 and scancode3=setcode3 and scancode4=setcode4 then
serout b.3,N2400,(254,128,"Code Correct ")
'check for enter code programming mode
do
high B.7
high b.1
inc w9
if pinC.0 = 1 then
programmemode=yes
loop while timetounlock < 2000
goto main
else
serout b.3,N2400,(254,128,"Code Incorrect ")
high b.0
pause 3000
goto main
endif
endif