PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einfaches menü erstellen



xbgamer
29.01.2010, 19:27
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.

Neutro
30.01.2010, 09:30
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

xbgamer
30.01.2010, 20:14
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

xbgamer
30.01.2010, 23:26
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.