Hallo,
ich versuche derzeit auch selbstdefinierte Zeichen am LCD auszugeben.
Zur info, ich arbeite mit Codevision C.
Der folgende Code gibt leider noch gar nichts aus.
Hier mein Code:
1 | void show_sign (void)
|
2 | {
|
3 | unsigned char byte[8], n, cgAdr, z;
|
4 | cgAdr=0b01000000; //DB7=0 DB6=1 DB5-0=Adr
|
Hier setze ich die Code generator ram adr auf Null, richtig? Falls es
richtig ist und ich die cgAdr auf Null setze, wie kann ich dann später
das Zeichen anzeigen welches hier liegt?
1 |
|
2 | // High nibble
|
3 | LCD_PORT = (0<<RS);
|
4 | LCD_PORT |= (cgAdr&0xf0);
|
5 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
Zur 3. Codezeile: EN ist der enable Pin. Ist das so richtig?
1 |
|
2 | // Low nibble
|
3 | LCD_PORT = (0<<RS);
|
4 | LCD_PORT |= (cgAdr<<4)&0xf0;
|
5 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
6 |
|
7 | // Array füllen
|
8 | byte[0] = 0b00000000;
|
9 | byte[1] = 0b00001010;
|
10 | byte[2] = 0b00001010;
|
11 | byte[3] = 0b00000000;
|
12 | byte[4] = 0b00000100;
|
13 | byte[5] = 0b00010001;
|
14 | byte[6] = 0b00001010;
|
15 | byte[7] = 0b00000100;
|
16 |
|
17 | // Array in den CG RAM schreiben
|
18 | for(n=0; n<8;n++){
|
19 | // Data to be sent
|
20 | // high nibble
|
21 | LCD_PORT = (1<<RS);
|
22 | LCD_PORT |= (byte[n]&0xf0);
|
23 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
24 |
|
25 | // low nibble
|
26 | LCD_PORT = (1<<RS);
|
27 | byte[n] = byte[n]<<4; //juergen
|
28 | LCD_PORT |= (byte[n]&0xf0);
|
29 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
30 | }
|
Zur Zeile mit //juergen: Ist es richtig / nötig hier die Bits zu shiften
oder kann ich die Bits "unten" stehen lassen und mit &0f maskieren?
Bis hier ist mir das Prinzip klar, wenns aber zum anzeigen geht hab ich
meine probleme!
1 | // CG RAM verlassen, indem man Set DD RAM Address oder Display Clear aufruft
|
2 | //...
|
3 | lcd_clear();
|
4 | // Zeichen ausgeben
|
5 | // high nibble
|
6 | LCD_PORT = (1<<RS);
|
7 | LCD_PORT |= (0&0xF0);
|
8 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
9 | // low nibble
|
10 | LCD_PORT = (1<<RS);
|
11 | LCD_PORT |= sentVal<<4;
|
12 | EN=1; for(z=0;z<5;z++)z=z; EN=0;
|
13 | }
|
Der Code ist vom netz übernommen und mir ist nicht klar was in der
Variable sentVal zu stehen hat??!
Der Code stammt von dieser Seite (befindet sich ganz unten):
http://www.hs-augsburg.de/~hhoegl/tmp/da-liehr/Tutorial/programmierung/lcd.html
lg Jürgen