 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Pet Maj 02, 2008 7:47 pm Naslov sporočila: 89c52 in 3x4 tipkovnica |
|
|
Imam 3x4 matrično tipkovnico in 89c52 in bi rad izpis številk ki jih natipkam na tipkovnici videl na treh LED display-ih. A mi lahko kdo malo pomaga,zanima me samo tisti del za izpis? |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sob Maj 03, 2008 1:15 am Naslov sporočila: |
|
|
Probal sem tako narediti zadevo ampak ta šment ne deluje. Ko pritisnem eno številko se ta pokaže naslednja pa ne. Prosim ,če je kdo pri volji,da mi pove kje je napaka. Hvala
Koda: |
Dim Preveri As Byte
Dim Vrednost As Byte
Dim Cifra As Long
Dim Pom As Byte
'-------------------------------------------------------------------------------
Config Debounce = 40
'-------------------------------------------------------------------------------
Kolona1 Alias P2.5
Kolona2 Alias P2.4
Kolona3 Alias P2.3
'-------------------------------------------------------------------------------
Stolp1 Alias P2.2
Stolp2 Alias P2.1
Stolp3 Alias P2.0
Stolp4 Alias P2.6
'-------------------------------------------------------------------------------
Preveri_t:
Kolona1 = 0 : Kolona2 = 1 : Kolona3 = 1
Vrednost = 1 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 4 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 7 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 11 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 0 : Kolona3 = 1
Vrednost = 2 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 5 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 8 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 0 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 1 : Kolona3 = 0
Vrednost = 3 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 6 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 9 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 12 : Debounce Stolp4 , 0 , Sprejeta , Sub
Goto Preveri_t
End
'-------------------------------------------------------------------------------
Sprejeta:
Preverispet:
Preveri = P2 And &B01000111
If Preveri <> &B01000111 Then
Goto Preverispet
End If
Cifra = Cifra * 10
Cifra = Cifra + Vrednost
Do
Pom = Cifra / 100
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.4 = 0
Waitms 2
P1.4 = 1
Pom = Cifra Mod 100
Pom = Pom / 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.3 = 0
Waitms 2
P1.3 = 1
Pom = Cifra Mod 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.0 = 0
Waitms 2
P1.0 = 1
Loop
End
'-------------------------------------------------------------------------------
Stevilke:
Data 65 , 221 , 100 , 76 , 216 , 74 , 66 , 93 , 64 , 72 |
|
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sob Maj 03, 2008 9:18 am Naslov sporočila: |
|
|
toncibalonci je napisal/a: |
Probal sem tako narediti zadevo ampak ta šment ne deluje. Ko pritisnem eno številko se ta pokaže naslednja pa ne. Prosim ,če je kdo pri volji,da mi pove kje je napaka. Hvala
Koda: |
'-------------------------------------------------------------------------------
Preveri_t:
Vrednost = 12 : Debounce Stolp4 , 0 , Sprejeta , Sub
Goto Preveri_t
End
'-------------------------------------------------------------------------------
Sprejeta:
Preverispet:
Preveri = P2 And &B01000111
If Preveri <> &B01000111 Then
Goto Preverispet
End If
Cifra = Cifra * 10
Cifra = Cifra + Vrednost
Do
Pom = Cifra / 100
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.4 = 0
Waitms 2
P1.4 = 1
Pom = Cifra Mod 100
Pom = Pom / 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.3 = 0
Waitms 2
P1.3 = 1
Pom = Cifra Mod 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.0 = 0
Waitms 2
P1.0 = 1
Loop
End
'-------------------------------------------------------------------------------
Stevilke:
Data 65 , 221 , 100 , 76 , 216 , 74 , 66 , 93 , 64 , 72 |
|
"Sprejeta:" nima na koncu "return" , zato se nikoli ne vrneš iz podprograma "Sprejeta:" . Pa tudi sicer bi moral biti verjetno kak "else" nekje.
Imam občutek, da greš iz "Sprejeta:" naravnost v "Do - Loop" zanko, kjer ničesar več ne kličeš in ničesar ne počneš, pač pa ostaneš v neskončni zanki. Od tod samo zaznavanje ene tipke.
Najprej krožiš po "Preveri_t:" , ko pa prvič zaznaš tipko, skočiš v "Sprejeta:" in od tam v "Do - Loop".
Mislim, da tole že drugoč razlagam. Pred dnevi sem na SE nekomu isto zmešnjavo reševal.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sob Maj 03, 2008 2:35 pm Naslov sporočila: |
|
|
Stvar mi nekako ne potegne,še malo pomoči prosim. Upoštevajte dejstvo da sem bolj začetnik v Bascom-u. Hvala |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sob Maj 03, 2008 5:06 pm Naslov sporočila: |
|
|
toncibalonci je napisal/a: |
Upoštevajte dejstvo da sem bolj začetnik v Bascom-u. |
Malenkost.
Jaz namreč Bascoma sploh ne poznam.
In za povrhu programe za PICe pišem v Zbirniku.
Resda imam podlago iz C++, Matlab-a, VHDL-a in Zbirnika za HC11, ampak zaenkrat še nisem strokovnjak za Bascom.
Krožiš po zanki:
Koda: |
Preveri_t:
...
Vrednost = 2 : Debounce Stolp1 , 0 , Sprejeta , Sub
...
Goto Preveri_t |
Pritisneš tipko "2" in KLIČEŠ (call) podprogram (Sub) "Sprejeta" .
No iz te nesrečne "Sprejeta" bi se na nek način moral vrniti z "return", pa se ne, saj nikjer v programu nimaš ukaza "return".
Še več. Ko "If" pogoj ni več izpolnjen, gre program naprej v "Do - Loop", kjer samo še kroži in ničesar ne počne. Zato tudi zaznaš samo prvi pritisk tipke, nadaljnjih pa ne.
Še najboljša rešitev bi bila, da si najprej razjasniš, kaj je glavna zanka ("Do-Loop") in kaj so podprogrami ("Sub"). Iz vsakega podprograma se moraš vrniti z "Return", znotraj vsakega podprograma ali zanke pa lahko poljubno uporabljaš "goto" za skoke znotraj podprograma oziroma zanke. Znotraj podprograma spet lahko kličeš drug podprogram, a se moraš iz njega spet vrniti ("return") nazaj.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sob Maj 03, 2008 6:39 pm Naslov sporočila: |
|
|
Hvala da se trudiš Igor! Saj mi je vse jasno kar si napisal,ampak stvari nekako ne znam izvesti. Rešitev je verjetno zelo enostavna,ampak mene pa j***!  |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sob Maj 03, 2008 8:41 pm Naslov sporočila: |
|
|
Če pa naredim takole,pa se mi izpisujejo številke,ampak le za kratek čas,ko spustim tipko. A lahko kakšen Bascom strokovnjak to pogleda
Koda: |
Dim Preveri As Byte
Dim Vrednost As Byte
Dim Cifra As Long
Dim Pom As Byte
'-------------------------------------------------------------------------------
Start:
Kolona1 Alias P2.5
Kolona2 Alias P2.4
Kolona3 Alias P2.3
'-------------------------------------------------------------------------------
Stolp1 Alias P2.2
Stolp2 Alias P2.1
Stolp3 Alias P2.0
Stolp4 Alias P2.6
'-------------------------------------------------------------------------------
Tipke:
Kolona1 = 0 : Kolona2 = 1 : Kolona3 = 1
Vrednost = 1 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 4 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 7 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 11 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 0 : Kolona3 = 1
Vrednost = 2 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 5 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 8 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 0 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 1 : Kolona3 = 0
Vrednost = 3 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 6 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 9 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 12 : Debounce Stolp4 , 0 , Sprejeta , Sub
Goto Tipke
'-------------------------------------------------------------------------------
Sprejeta:
Preverispet:
Preveri = P2 And 71
If Preveri <> &B01000111 Then
Goto Preverispet
End If
If Vrednost = 11 Then
Goto Akcija
End If
Cifra = Cifra * 10
Cifra = Cifra + Vrednost
Pom = Cifra / 100
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.4 = 0
Waitms 2
P1.4 = 1
Pom = Cifra Mod 100
Pom = Pom / 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.3 = 0
Waitms 2
P1.3 = 1
Pom = Cifra Mod 10
Pom = Lookup(pom , Stevilke)
P3 = Pom
P1.0 = 0
Waitms 2
P1.0 = 1
Return
End
'-------------------------------------------------------------------------------
Akcija:
If Cifra = 235 Then
P2.7 = 0
Wait 1
P2.7 = 1
End If
Goto Start
Stevilke:
Data 65 , 221 , 100 , 76 , 216 , 74 , 66 , 93 , 64 , 72 |
|
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sob Maj 03, 2008 9:50 pm Naslov sporočila: |
|
|
Joj, no, zdaj se bom začel pa še jaz Bascom učiti .
V glavnem, tule: http://www.elektronik.si/phpBB2/viewtopic.php?t=9413
si poglej osnovno zgradbo programa
V prvem prispevku.
Osnovni Do-Loop in klicanje podprogramov.
Natančno si poglej zaporedje vsega skupaj od tega, kje se nahaja inicializacija, pa kje je Do-Loop, pa kje so podprogrami, pa kako jih kličeš in kako se vračaš,...
@smatjaz-evo rešitev bi pa jaz še malce dodelal, da ne bi bilo utripanja izpisa na zaslonu:
Koda: |
Do
Config Debounce = 1 Ms
'Debounce P1.0 , 1 , Zastoj , Sub
Debounce P1.0 , 0 , Glavni , Sub
'Debounce P3.7 , 1 , Poledica , Sub
Debounce P3.7 , 0 , Glavni , Sub
If P3.7 = 0 And P1.0 = 1 then
Gosub Zastoj
End If
If P3.7 = 1 And P1.0 = 0 then
Gosub Poledica
End If
If P3.7 = 1 And P1.0 = 1 then
Gosub Poledicazastoj
End If
Loop
End
|
Ah, ja, zadevo sem našel tako, da sem se malo sprehodil po tehle temah: http://www.elektronik.si/phpBB2/viewforum.php?f=10 Lepo po vrsti, jih je 6 strani. Odprl vsako in pogledal, kaj se dogaja.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Pon Maj 05, 2008 2:46 pm Naslov sporočila: |
|
|
Moram povedat da po enodnevnem počitku še nisem uspel zadeve narediti tako da bi delala!!!! Razmišljam da bi mogoče postal pek! |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pon Maj 05, 2008 3:53 pm Naslov sporočila: |
|
|
Citiram: |
Moram povedat da po enodnevnem počitku še nisem uspel zadeve narediti tako da bi delala!!!! |
Včasih si je treba malce oddahniti.
Takole si poskusil?
Koda: |
Dim Preveri As Byte
Dim Vrednost As Byte
Dim Cifra As Long
Dim Pom As Byte
Dim Vnesenih As Byte
'-------------------------------------------------------------------------------
Config Debounce = 40
Cifra = 0
'-------------------------------------------------------------------------------
Enako Alias P1.0
Kolona1 Alias P2.5
Kolona2 Alias P2.4
Kolona3 Alias P2.3
'-------------------------------------------------------------------------------
Stolp1 Alias P2.2
Stolp2 Alias P2.1
Stolp3 Alias P2.0
Stolp4 Alias P2.6
'------- Do - Loop ------------------------------------------------------------------------
Do
If Enako = 0 Then ' ko si vnesel pravo kodo, ne preverja več
Gosub Preveri_t
GoSub JePrava
End If
Pom = Cifra / 100
Pom = Lookup(Pom , Stevilke)
P3 = Pom
P1.4 = 0
Waitms 2
P1.4 = 1
Pom = Cifra Mod 100
Pom = Pom / 10
Pom = Lookup(Pom , Stevilke)
P3 = Pom
P1.3 = 0
Waitms 2
P1.3 = 1
Pom = Cifra Mod 10
Pom = Lookup(Pom , Stevilke)
P3 = Pom
P1.0 = 0
Waitms 2
P1.0 = 1
Loop
'-------------------------------------------------------------------------------
'-------------- Podprogrami -------------------------------------------------------------
Preveri_t:
If Vnesenih > 3 Then ' Če smo vnesli več kot 3 tipke, gre spet znova čez 10 sekund
' -- Gosub Cakaj 10 ' sekund po vnosu napačne kode
Cifra = 0
Enako = 0
Vnesenih = 0
End If
Kolona1 = 0 : Kolona2 = 1 : Kolona3 = 1
Vrednost = 1 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 4 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 7 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 11 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 0 : Kolona3 = 1
Vrednost = 2 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 5 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 8 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 0 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 1 : Kolona3 = 0
Vrednost = 3 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 6 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 9 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 12 : Debounce Stolp4 , 0 , Sprejeta , Sub
return
'-------------- Ob pritisnjeni tipki gremo na vnos nove -----------------------------------
Sprejeta:
Cifra = Cifra * 10
Cifra = Cifra + Vrednost
Vnesenih = Vnesenih + 1
return
'--------Če JePrava koda, gre Enako na 1 -----------------------------------------------
JePrava:
Preveri = P2 And &B01000111 ' Verjetno misliš preveriti Cifra in stanje na P2 ???
If Preveri <> &B01000111 Then
Enako = 1
return
Else
Enako = 0
End If
return
'-------------------------------------------------------------------------------
Stevilke:
Data 65 , 221 , 100 , 76 , 216 , 74 , 66 , 93 , 64 , 72 |
Citiram: |
Razmišljam da bi mogoče postal pek! |
Ja zakaj pa misliš, da jaz pečem PICe
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
pato90 Član

Pridružen-a: Tor 17 Apr 2007 20:16 Prispevkov: 39 Aktiv.: 0.18 Kraj: Logatec
|
Objavljeno: Pon Maj 05, 2008 5:20 pm Naslov sporočila: |
|
|
toncibalonci tvoje zaporedje pisanja programa je pravilno edino nevem zakaj si napisal
Koda: |
Tipke:
Kolona1 = 0 : Kolona2 = 1 : Kolona3 = 1
Vrednost = 1 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 4 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 7 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 11 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 0 : Kolona3 = 1
Vrednost = 2 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 5 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 8 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 0 : Debounce Stolp4 , 0 , Sprejeta , Sub
'-------------------------------------------------------------------------------
Kolona1 = 1 : Kolona2 = 1 : Kolona3 = 0
Vrednost = 3 : Debounce Stolp1 , 0 , Sprejeta , Sub
Vrednost = 6 : Debounce Stolp2 , 0 , Sprejeta , Sub
Vrednost = 9 : Debounce Stolp3 , 0 , Sprejeta , Sub
Vrednost = 12 : Debounce Stolp4 , 0 , Sprejeta , Sub
Goto Tipke
|
namesto tega da daš na koncu goto tipke daj vse skupaj v do-loop zanko in poženi še enkrat |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Pon Maj 05, 2008 8:07 pm Naslov sporočila: |
|
|
Igor,jaz bi rajši potico,je bolj enostavno,jajce že imam! Nekaj ni vredi,gorijo same ničle in nič se ne dogaja.Poskušam najti napako. |
|
Nazaj na vrh |
|
 |
pato90 Član

Pridružen-a: Tor 17 Apr 2007 20:16 Prispevkov: 39 Aktiv.: 0.18 Kraj: Logatec
|
Objavljeno: Pon Maj 05, 2008 8:13 pm Naslov sporočila: |
|
|
Daj pripni še shemo vezja da vidim kaj imaš na kakšen pin prikloplen. |
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Pon Maj 05, 2008 8:39 pm Naslov sporočila: |
|
|
Nimam vezja ampak Bascom testno ploščo. Na P2 imam tipkovnico,kot je napisano v programu, P3 imam za display, P1.0 , P1.3 , P1.4 pa je multiplex. Mislim da tu ni kaj narobe. |
|
Nazaj na vrh |
|
 |
pato90 Član

Pridružen-a: Tor 17 Apr 2007 20:16 Prispevkov: 39 Aktiv.: 0.18 Kraj: Logatec
|
Objavljeno: Pon Maj 05, 2008 8:49 pm Naslov sporočila: |
|
|
kaj to potem prikazuješ na enem displayu |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|