Hi all, zu aller erst wünsche ich allen frohe Ostern. Ich hab mir ein Graphik Display zugelegt und möchte über zwei tasten bilder auf dem display anzeigen. Die pics kann ich schon ausgeben am display nur weis ich nicht wie der code für die tasten ausschauen soll. Ich möchte das einfach nur so haben das wenn ich auf taste 1 auf port D1 drücke das mir der atmega128 das gewünschte bild zeigt daweil schaut der code so aus, vieleicht kann mir ja wer verraten was ich tun muss. PS.: Das ist das display http://www.shop.display3000.com/pi12/pi2/pd43.html nur im handbuch steht kein wort darüber wie mann die tasten ansteuert #include <stdio.h> #include <avr/io.h> #include <avr/wdt.h> #include <util/delay.h> #include <math.h> #include <avr/pgmspace.h> #define LCD_DDR DDRB void delay_ms(unsigned int period); #include <glcd-Display3000-211.h> extern const prog_uint8_t Font1[], Font2[]; //Include graphics files (if any) #include "nasa256c.h" #include "bild2.h" #include "bild3.h" extern const prog_uint16_t *Bitmap; int main(void) { LCD_Init(); delay_ms(1000); while(1) { Orientation = Portrait; LCD_Bitmap_256high(0, 0, 131, 175, Nasa256c, Table_Nasa256c, true); delay_ms(4000); #//Hier sollte das bild angezeigt werden wenn ich auf taste 1 PD1 drücke Orientation = Portrait; LCD_Bitmap_256high(0, 0, 131, 175, Bild2, Table_Bild2, true); delay_ms(4000); #//Hier sollte das bild angezeigt werden wenn ich auf taste 2 PD6 drücke Orientation = Portrait; LCD_Bitmap_256high(0, 0, 131, 175, Bild3, Table_Bild3, true); delay_ms(4000); } return 0; } { for(unsigned int i=0; i<=period; i++) _delay_ms(1); }
Hi peda danke für denn link aber ich begreif da null :( achso ja ich benötige ja keinen short oder long tastendruck hab ja für jeden aufruf eine einzelne taste wenn es dir möglich ist könntest du mir das idioten sicher beschreiben :) mfg Saber
Aaalso, weil heute Ostern ist... 1. Taster kann nicht ansteuern, sondern nur abfragen :-) 2. Muss man den Prozessor sagen wo die Taster dran hängen, dazu muss man die entsprechenden Pins auf Eingang/Pullup konfigurieren.
1 | DDRD = 0; // alle Pins an PortD auf Eingang, |
2 | // diese Zeile kann man sich sparen,
|
3 | // sofern man DDRD nach dem Reset nicht angefasst hat
|
4 | |
5 | PORTD |= (1 << PD1) | (1 << PD6); // Pullup für PD1+PD6 |
6 | |
7 | ...
|
8 | while(1) |
9 | {
|
10 | if (PIND & (1 <<PD1)) |
11 | {
|
12 | // Taster NICHT gedrückt
|
13 | } else { |
14 | // Taster gedrückt
|
15 | }
|
16 | }
|
3. Wirst du recht schnell fest stellen, dass obiger Code zwar funktioniert, aber nicht optimal ist, Stichwort Entprellung und Wiederholung. Bei gedrückter Taste wird das Bild z.B. immer wieder gezeichnet. Evtl hilft dir obiges Beispiel, das Prinzip zu verstehen wie man einen Port abfragt und du dich somit besser in die Materie der Entprellung einzuarbeiten. Such einfach mal nach "Entprellen", es gibt da verschiedene Codeschnipsel, manche evtl leichter verständlich wie Peda's aber dafür mit anderen Nachteilen. Auch ein Blick ins GCC-Tut ist nicht verkehrt: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter Wünsche noch allen Frohe Ostern Roland
Danke Danke Danke Roland hast mir sehr geholfen damit ich dein einstieg in tasten entprellen verstehe. Frohe Ostern
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.