in zeile 197 stand: LCD_WriteString(" ,wie geht's");
hab es etwas abgeändert, jetzt bezieht sich der fehler zwar auf eine andere zeile, aber das ist ja unwichtig, es geht um die gleiche funktion.
Code:
/** D E F I N I T I O N S ****************************************************/
#define PORTLCD LATB
#define TRIS_LCD TRISB
#define LCD_E PORTBbits.RB0
#define LCD_RS PORTBbits.RB2
#define LCD_RW PORTBbits.RB3
#define nop _asm nop _endasm
/****************************************************************************
/*****************************************************************************/
//#pragma udata glob_point
/*****************************************************************************/
#pragma code
/**delay for PicLSBK (16MHz Taktzyklus = 4 MHz Befehlszyklus)*****************/
void delay100us(unsigned char multiplikator)
{
while(multiplikator--) Delay10TCYx(40); //40*10*0,25µs = 100 µs
}
/****************************************************************************/
void enable(void)
{
nop;
LCD_E = 1; // Daten übernehmen
delay100us(1);
LCD_E = 0;
nop;
}
/**LCD_BUSY*****************************************************************/
void LCD_BUSY(void)
{
unsigned char temp1;
do
{
TRIS_LCD = 0xF0; // LCD-PORT = high nibbles:eingang; low nibbles:ausgang
//Display abfrage
LCD_RS = 0; // LCD im Befehls-Mode
LCD_RW = 1; // LCD im Lesen-Mode
enable();
temp1 = PORTLCD;
temp1 = temp1 & 0x80;
enable(); // high nibble abfragen (wird für busy-flag abfrage nich weiter benötigt)
} while (temp1==0x80); // wiederhole schleife bis busy-flag (LCD DATA PIN D7) low
delay100us(2);
LCD_RW = 0; // Busy = low: LCD im Schreiben-Mode
TRIS_LCD = 0x00; // LCD-PORT = Ausgänge
PORTLCD = 0x00; // Daten und Steuerleitungen LOW
}
void LCD_WriteZeichen( char zeichen)
{
unsigned char x;
LCD_BUSY(); // Warten bis LCD bereit ist
x = zeichen & 0xf0;
PORTLCD = x; // höherwertiges nibbel an LCDPORT übergeben
LCD_RS = 1; // LCD im Daten-Mode
LCD_RW = 0; // LCD im Schreiben-Mode
enable(); // high nibble bei fallenden Flanke von enable an LCD senden
x = zeichen;
x = (x << 4)& 0xf0; //niederwertiges nibbel an LCDPORT übergeben
PORTLCD = x;
LCD_RS=1;
LCD_RW = 0;
enable(); // low nibble bei fallenden Flanke von enable an LCD senden
LCD_RS = 0;
PORTLCD = 0x00; // Daten und Steuerleitungen LOW
}
void LCD_WriteString(char *string)
{
unsigned char temp;
temp=*string;
while(temp)
{
LCD_WriteZeichen(temp); // zeichen am LC-Display ausgeben
string++;
temp=*string;
}
}
void LCD_WriteRegister(unsigned char data)
{
unsigned char x;
LCD_BUSY(); // Warten bis LCD bereit ist
x = data & 0xf0;
PORTLCD = x; //höherwertiges nibbel an LCD senden
LCD_RW = 0; // LCD im Schreiben-Mode
LCD_RS = 0; // LCD im Befehl-Mode
enable();
x = data;
x = (x << 4)& 0xf0; //niederwertiges nibbel an LCD senden
PORTLCD = x;
enable();
}
void LCD_Init(void)
{
// LCD initialisieren
TRIS_LCD = 0x00; // LCD-PORT = Ausgänge
PORTLCD = 0x00; // Daten und Steuerleitungen LOW
delay100us (151);
delay100us (151); // warte über 30ms
PORTLCD = 0x30; // Interface auf 8-Bit setzen
enable();
delay100us(46); //warte 4,5ms
// Interface auf 8-Bit setzen
enable(); // Enable (LCD)
delay100us(2); //warte 100µs
enable(); // Interface auf 8-Bit setzen
// Enable (LCD)
delay100us(2); //warte 100µs
PORTLCD = 0x20; // Interface auf 4-Bit setzen
enable(); // Enable (LCD)
LCD_WriteRegister(0x28); // 2-zeilig, 5x8-Punkt-Matrix
LCD_WriteRegister(0x08); // Display aus
LCD_WriteRegister(0x01); // Display löschen
LCD_WriteRegister(0x06); // Kursor nach rechts wandernd, kein Display-Shift
LCD_WriteRegister(0x0f); // Display ein [ 0x0C = ein, 0x08 = aus ]
}
void main (void)
{
LCD_Init();
LCD_WriteZeichen('H');
LCD_WriteZeichen('a');
LCD_WriteZeichen('l');
LCD_WriteZeichen('l');
LCD_WriteZeichen('o');
LCD_WriteString(" ,wie geht's"); // compiler meldet Warning [2066] type qualifier mismatch in assignment
while(1);
}
wodrann kann das liegen
Lesezeichen