Archiv verlassen und diese Seite im Standarddesign anzeigen : einfaches menü erstellen
servus ich will für meinen wecker ein einfaches menü erstellen. bestehend aus mp3, radio und aux.
das ganze will ich mit einer taste duchtaben können. bei jedem menü soll 1 ausgange gesetzt werden. das ganze will ich an einem 16x2 lcd display ausgeben.
wie gehe ich da vor?
es soll wirklich simpel sein. ich drücke drauf mp3 erscheint zb dann drücke ich nochmal drauf mp3 verschwindet und radio erscheint, dann nochmal radio verschwindet aux erscheint und dann wieder von vorne.
Ich würde es so machen das mit jedem Tastendruck eine Variable hochgezählt wird (if taste gedrückt then incr A). Jetzt kannst du einfach den "Zählerstand" mit If oder Case Anweisungen abfragen und entsprechende Aktionen ausfühen und im LCD einen dazu passenden Text anzeigen lassen.
If A = 1 then
LCD "Radio"
portx.1 =1
else
portx.1 =0
end if
If A = 2 then
LCD "MP3 "
Portx.2 =1
else
portx.2=0
end if
usw.
(Musst allerdings die Variable Begrenzen und zurücksetzen damit du nicht bis 255 oder noch weiter hochzählst)
Gruß
Neutro
weiß jetzt ehrlich gesagt überhaupt nicht wie ich da rann gehen soll. hab das ganze mal versucht mit timer0 hinzubekommen aber irgendwie will der einfach net meine tastendrücke zählen. denke aber dass meine strucktur schon gar nicht stimmt. kann mir jemand helfen?
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.1 = 1
On Timer0 Ontimer0
Config Timer0 = Counter , Edge = Falling
Enable Timer0
Enable Interrupts
Timer0 = 253
Do
If Pind.1 = 1 Then
Wait 1
Locate 2 , 1
Lcd "mp3"
End If
If Pind.1 = 2 Then
Wait 1
Locate 2 , 1
Lcd "AUX"
End If
Loop
Ontimer0:
Timer0 = 253
Return
peterfido
30.01.2010, 20:56
Verstehst Du Deinen Code?
Hier mal eine Möglichkeit von vielen:
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
const entprellzeit = 2
dim Modus as byte
dim Variablen as byte
Tastelosgelassen Alias Variablen.0
mTaste Alias pind.1
set Portd.1
Do
If mTaste = 0 Then
if tastelosgelassen = 0 then
set tastelosgelassen
gosub moduschange
end if
else ' Entprellen
if tastelosgelassen = 1 then
reset tastelosgelassen
waitms entprellzeit
end if
end if
Loop
end
ModusChange:
incr modus
if modus=4 then modus=0
locate 2,1
if modus = 0 then
lcd "mp3"
end if
if modus = 1 then
lcd "aux"
end if
if modus = 3 then
lcd "Radio"
end if
return
naja ich komm mit den befehlen nicht so klar. weiß nicht wie ich es strukturieren muss.
deine do schleife verstehe ich auch nicht ganz was hat es mit den ganzen tasterlosgelassen auf sich?
peterfido
31.01.2010, 14:50
Das ist zur Entprellung und das der Taster einmal losgelassen sein muss, damit wieder der Modus hochgezählt wird. Sonst würde doch der Modus wahnsinnig schnell durchlaufen. Und von einem Wait 1 als Entprellung halte ich nicht viel, da dann auch der Rest des Programmes angehalten wird.
Wenn Du mit dem Programmieren erst angefangen hast, solltest Du zu jedem Befehl, den Du einsetzt mal die Hilfe durchlesen.
Mein Code ist mit Sicherheit auch nicht perfekt und nur eine Möglichkeit von Vielen. Jeder hat seinen eigenen Stil und wird, wie ich auch, die selbe Aufgabe mal so und mal so lösen. Bei meinem Beispielcode können Leerzeichen hinter mp3 und aux nicht schaden, da Radio 2 ZEichen länger ist und das io ständig angezeigt werden würde. Allerdings habe ich das Programm schnell aus dem Kopf erstellt und ungetestet eingestellt.
Du brauchst auch nicht pauschal die Stacks auf 100 setzen. Schadet natürlich nicht, wenn genug Speicher vorhanden ist. Bei vielen Variablen und Texten kann es aber nötig sein, die Größen anzupassen.
Ich arbeite viel mit Gosub, Return und Interrupts. Dazu sind HWStacks nötig. Deklarierte Subs und Funktionen benötigen je nach den Parametern SWStack und Frame.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.