ARGH! Natürlich findet man die Lösung immer erst wenn man schon gepostet hat
Lösung:
( http://www.mikrocontroller.net/artic...im_4-Bit-Modus )1laaaaaa
- l = Zeilennummer (0 oder 1)
- a = 6-Bit Spaltennummer
-> LCD.c
Entschuldigung für diesen wohl sehr überflüssigen Thread^^Code:void LCD_POS (unsigned int line, unsigned int column) { if(line) LCD_COMMAND(0b11000000 + column); else LCD_COMMAND(0b10000000 + column); }
Naja, dafür gibts die hier als Entschädigung die Lib zum nachbasteln (währe dann soweit fertig)
LCD.c:
LCD.h:Code:#include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include "LCD.h" void LCD_SETBYTE (char data) { LCD_PORT = LCD_PIN & ~(LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3); if( data & 1<<0 ) LCD_PORT = LCD_PIN | LCD_D0; if( data & 1<<1 ) LCD_PORT = LCD_PIN | LCD_D1; if( data & 1<<2 ) LCD_PORT = LCD_PIN | LCD_D2; if( data & 1<<3 ) LCD_PORT = LCD_PIN | LCD_D3; } void LCD_ENABLE (void) { LCD_PORT = (LCD_PIN | LCD_EN); _delay_us(1); LCD_PORT = (LCD_PIN & ~LCD_EN); } void LCD_DATA (char data) { char data2 = data; data = (data>>4); data = (data & 0b00001111); LCD_PORT = (LCD_PIN | LCD_RS) & ~(LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3); LCD_SETBYTE (data); LCD_ENABLE(); _delay_us(45); data2 = (data2 & 0b00001111); LCD_PORT = (LCD_PIN | LCD_RS) & ~(LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3); LCD_SETBYTE (data2); LCD_ENABLE(); _delay_ms(2); } void LCD_COMMAND (char command) { char command2 = command; command = (command>>4); command = (command & 0b00001111); LCD_PORT = LCD_PIN & ~(LCD_RS | LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3); LCD_SETBYTE (command); LCD_ENABLE(); _delay_us(45); command2 = (command2 & 0b00001111); LCD_PORT = LCD_PIN & ~(LCD_RS | LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3); LCD_SETBYTE (command2); LCD_ENABLE(); _delay_ms(2); } void LCD_STRING(char *string) { while(*string) { LCD_DATA(*string++); // zeichen am LC-Display ausgeben } } void LCD_CLEAR (void) { LCD_COMMAND(0b00000001); } void LCD_HOME (void) { LCD_COMMAND(0b00000010); } void LCD_POS (unsigned int line, unsigned int column) { if(line) LCD_COMMAND(0b11000000 + column); else LCD_COMMAND(0b10000000 + column); } void LCD_INT (int number) { char string[16]; itoa(number,string, 10); LCD_STRING(string); } void LCD_HEX (int number) { char string[16]; itoa(number,string, 16); LCD_STRING(string); } void LCD_BIN (int number) { char string[16]; itoa(number,string, 2); LCD_STRING(string); } void LCD_OCT (int number) { char string[16]; itoa(number,string, 8); LCD_STRING(string); } void LCD_INIT (void) { LCD_DDR = LCD_DDR | LCD_RS | LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3; for(int inittimes=0; inittimes<3; inittimes++) { LCD_PORT = LCD_PIN | LCD_RS | LCD_EN | LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3; LCD_PORT = LCD_PORT = LCD_PIN & ~(LCD_EN | LCD_RS); _delay_ms(15); LCD_SETBYTE (0x30); LCD_ENABLE(); _delay_ms(5); LCD_ENABLE(); _delay_us(100); LCD_ENABLE(); _delay_us(100); LCD_SETBYTE (0x20); LCD_ENABLE(); _delay_us(100); LCD_COMMAND(0x28); LCD_COMMAND(0x08); LCD_COMMAND(0x01); LCD_COMMAND(0x06); LCD_COMMAND(0x0C); LCD_COMMAND(0b00000001); } }
Und ein kleines Anwendungsbeispiel (Laufschrift in der ersten Zeile und Counter in der zweiten):Code:#ifndef _LCD_h_ #define _LCD_h_ void LCD_SETBYTE (char data); void LCD_ENABLE (void); void LCD_DATA (char data); void LCD_COMMAND (char command); void LCD_STRING(char *string); void LCD_CLEAR (void); void LCD_HOME (void); void LCD_POS (unsigned int line, unsigned int column); void LCD_INT (int number); void LCD_HEX (int number); void LCD_BIN (int number); void LCD_OCT (int number); void LCD_INIT (void); #define LCD_DDR DDRA #define LCD_PORT PORTA #define LCD_PIN PINA #define LCD_EN PIN 6 #define LCD_RS PIN 4 #define LCD_D0 PIN 0 #define LCD_D1 PIN 1 #define LCD_D2 PIN 2 #define LCD_D3 PIN 3 #define PIN 1<< #endif
GrußCode:#include <avr/io.h> #include <util/delay.h> #include "LCD.h" int main(void) { LCD_INIT(); char Zeichenstring[] = "LCD-Lib funzt! "; char temp; char schleife; unsigned char counter=0; while(1) { LCD_CLEAR(); LCD_POS(0, 0); LCD_STRING(Zeichenstring); LCD_POS(1, 5); LCD_INT(counter++); temp = Zeichenstring[0]; for(schleife=0; schleife<14; schleife++) { Zeichenstring[schleife] = Zeichenstring[schleife+1]; } Zeichenstring[14] = temp; _delay_ms(220); } return 0; }
-schumi-






Zitieren


Lesezeichen