'------------------------------------------------------------------------------- ' ! D E M O P R O G R A M ! '------------------------------------------------------------------------------- ' Uporabniška koda je 4 mestna. ' 1 uporabniško kodo vpišemo v program. ' Datoteka:code11.bas '------------------------------------------------------------------------------- ' Uporabniška koda je 4 mestna. ' 1 uporabniško kodo vnesemo preko tipkovnice. ' Datoteka:code11-1.hex '------------------------------------------------------------------------------- ' Uporabniška koda je 8 mestna. ' 8 uporabniških kod vnesemo preko tipkovnice. ' Datoteka:code11-2.hex '------------------------------------------------------------------------------- 'Project: CodeLock 8051 'Datoteka: code11.bas 'Copyright: Kripa PURI 'WWW: www.avr.4mg.com 'Device: Atmel AT89C2051 'Date: 1.4.2004 'Compiler: Bascom 8051 '------------------------------------------------------------------------------- 'Tip mikrokontrolerja $regfile = "89c2051.dat" 'Kvarc $crystal = 4000000 'Spremenljivke Dim Cifra As Byte Dim Koda As Word Dim Progkoda As Word Dim Stcifer As Byte Dim Stnapak As Byte Dim N As Byte Dim K As Byte Dim P As Byte 'Vrednost izhodov na portu b in portu d P1 = 255 P3 = 255 P3.3 = 1 P3.4 = 0 'Pomožne spremenljivke (alias) Rele Alias P3.4 Beep Alias P3.3 'Stolpec je aktiven, ko je postavljena 0 Y1 Alias P1.1 Y2 Alias P1.2 Y3 Alias P1.3 'Vrstica je aktivna, ko je na njej 0 X1 Alias P1.4 X2 Alias P1.5 X3 Alias P1.6 X4 Alias P1.7 '------------------------------------------------------------------------------- 'Nastavitev debounce-a Config Debounce = 40 '------------------------------------------------------------------------------- 'Nastavitev Programske kode-šifre 'Setting 1234 for user code Progkoda = 1234 '------------------------------------------------------------------------------- 'Stevec napak Stnapak = 0 '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do Zacetek: Koda = 0 Stcifer = 0 '------------------------------------------------------------------------------- 'Branje tipkovnice (glavna zanka-main loop) Do 'Postavljanje 1. stolpca (Y1) Y1 = 0 : Y2 = 1 : Y3 = 1 Cifra = 1 Debounce X1 , 0 , Pritisnjena , Sub Cifra = 4 Debounce X2 , 0 , Pritisnjena , Sub Cifra = 7 Debounce X3 , 0 , Pritisnjena , Sub 'Tipka * Cifra = 11 Debounce X4 , 0 , Pritisnjena , Sub 'Postavljanje 2. stolpca (Y2) Y1 = 1 : Y2 = 0 : Y3 = 1 Cifra = 2 Debounce X1 , 0 , Pritisnjena , Sub Cifra = 5 Debounce X2 , 0 , Pritisnjena , Sub Cifra = 8 Debounce X3 , 0 , Pritisnjena , Sub Cifra = 0 Debounce X4 , 0 , Pritisnjena , Sub 'Postavljanje 3. stolpca (Y3) Y1 = 1 : Y2 = 1 : Y3 = 0 Cifra = 3 Debounce X1 , 0 , Pritisnjena , Sub Cifra = 6 Debounce X2 , 0 , Pritisnjena , Sub Cifra = 9 Debounce X3 , 0 , Pritisnjena , Sub 'Tipka # Cifra = 12 Debounce X4 , 0 , Pritisnjena , Sub Loop Loop '------------------------------------------------------------------------------- Pritisnjena: 'Potrditev pritiska na tipko Reset Beep Waitms 100 Set Beep Waitms 200 '------------------------------------------------------------------------------- 'Pogoji za menije '* (cifra 11 = menu) za meni in # (cifra 12 = enter) za konec vnosa If Cifra = 11 Then Goto Menu If Cifra = 12 Then Goto Preveri '------------------------------------------------------------------------------- 'Kontrola števila vnesenih cifer Incr Stcifer If Stcifer > 5 Then Goto Napaka 'Sestavljanje kode iz posameznih cifer Koda = Koda * 10 Koda = Koda + Cifra 'Vrnitev v glavno zanko Return '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '8 piskov za napako Napaka: K = 9 : P = 100 : Gosub Piskac Incr Stnapak If Stnapak = 3 Then Wait 60 Stnapak = 0 End If Goto Zacetek '------------------------------------------------------------------------------- 'Preverjanje vnesene kode Preveri: If Koda = Progkoda Then Goto Odpri Else Goto Napaka End If Goto Zacetek '------------------------------------------------------------------------------- 'OK Ok: Waitms 100 K = 2 P = 200 Gosub Piskac Return '------------------------------------------------------------------------------- 'Vklop releja Odpri: Gosub Ok Set Rele 'Trajanje vklopa Wait 2 Reset Rele Stnapak = 0 Goto Zacetek '------------------------------------------------------------------------------- 'Piskač Piskac: Waitms 100 For N = 1 To K Reset Beep Waitms P Set Beep Waitms P Next N Return '------------------------------------------------------------------------------- 'Podprogram za menu Menu: Wait 1 Gosub Ok Gosub Ok Gosub Ok Goto Zacetek '-------------------------------------------------------------------------------