LCD intiliasering kode fejl :( AVR studio 4
Hejsa! jeg er igang med intiliasere mit Lcd display og undervejs har jeg støt på nogle problemer! jeg er nybegynnder og håber jeg får hjælp!når jeg trykker på RUN kommer der 6 error frem:
1../newayhaninitlcd.c:25: error: stray '\222' in program
2../newayhaninitlcd.c:25: error: stray '\222' in program
( det viser sig at der er noget galt her LCD_printchar('A');)
3../newayhaninitlcd.c:25: error: 'A' undeclared (first use in this function)
4../newayhaninitlcd.c:25: error: (Each undeclared identifier is reported only once
5../newayhaninitlcd.c:25: error: for each function it appears in.)
6.../newayhaninitlcd.c:106: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'LCD_printchar'
Her er så koden:
//---------------------------------------------------------------------------------------------------------------------------------------------------------
# include <avr/io.h>
//
//---------------------------------------------------------------------------------------------------------------------------------------------------------
int LCD_init (void); // Her erklæres programmets anvendte prototyper
int LCD_command (char);
int LCD_printchar (char);
void delay (int);
int LCD_enable (void);
int LCD_busy (void);
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//---------------------------------------------------------------------------------------------------------------------------------------------------------
int main (void) // Her starter programmet
{
DDRA = 0xFF; // PORTA sættes til output
DDRC = 0xFF; // PORTC sættes til output
//
PORTA = 0x00; // PORTA nulstilles for at tilfredsstille kontrol-genet.
delay(5000); // Delay funktionen kaldes med variablen 5000
LCD_init(); // LCD_init kaldes
delay(2000);
LCD_busy(); // LCD_busy kaldes
LCD_printchar('A'); // LCD_printchar kaldes med variablen A
//
while (1) // While (1) løkke til senere brug
{
//
}
}
//
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ LCD_init ]-
// Initialiserer displayet ved POWER-ON
//
// Input data: INGEN
// Output data: INT : delay I millisekunder , CHAR : HEX-værdi til LCD_display
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
int LCD_init (void)
{
PORTA = 0x30; // Displayet konfigureres til 4-bit interface
LCD_enable(); // LCD_enable kaldes
delay(5); // Ovenstående, gentages 2 gange i følge producentens anvisning.
LCD_enable();
delay(1);
LCD_enable();
delay(1);
PORTA = 0x20; // Displayet konfigureres til 4-bit interface, 5x7 dot matrix.
LCD_enable();
delay(1);
LCD_command(0x28); // Ovenstående gentages ifølge producentens anvisninger
LCD_command(0x08); // Displayet slukkes
LCD_command(0x01); // Displayet kører sin interne CLEAR-funktion
LCD_command(0x06); // Displayet konfigureres til at skrive fra venstre mod højre
LCD_command(0x0F); // Displayet tændes og konfigureres til at anvende blinkende cursor
LCD_command(0x02); // Cursor'en sendes hjem til øverste, venstre hjørne
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ LCD_command ]-
// Fungerer som interface for andre funktioner,
// der ønsker at sende instruktioner til displayet.
// Konverterer data fra HEX til 4-bit signaler der sendes til DATABUS.
//
// Input data: CHAR value, erklæres internt i funktionen ved navn x
// Output data: INT : delay I millisekunder , Output til DATABUS
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
int LCD_command (char x)
{
char a, b; // char a og b erklæres som interne variabler
//
a = ( x & 0xF0 ); // a tillægges de første fire bits af variablen x
x = x << 4; // alle bits i variablen x flyttes 4 pladser til venstre
b = ( x & 0xF0 ); // b tillægges de første fire bits af variablen x
//
LCD_busy(); // LCD_busy kaldes
PORTA = a; // Værdien af variablen a sendes til PORTA
LCD_enable();
delay(2);
PORTA = b; // Værdien af variablen b sendes til PORTA
LCD_enable();
delay(2);
PORTA = 0x00; // Alle bits på PORTA sættes lav
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ LCD_printchar ]-
// Fungerer som interface for andre funktioner,
// der ønsker at sende tekst til displayet.
// Konverterer data fra latinske bogstaver, HEX eller ASCII
// til 4-bit signaler, der sendes til DATABUS.
//
// Input data: CHAR value, erklæres internt i funktionen ved navn z
// Output data: INT : delay I millisekunder , Output til DATABUS
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
Int LCD_printchar (char z)
{
char a, b; // char a og b erklæres som interne variabler
//
PORTA = 0x04; // RS sættes høj for at der kan skrives tekst til displayet
//
a = ( z & 0xF0 ); // a tillægges de første fire bits af variablen z
z = z << 4; // alle bits i variablen z flyttes 4 pladser til venstre
b = ( z & 0xF0 ); // b tillægges de første fire bits af variablen z
//
PORTA = ( PORTA | a ); // Værdien af variablen a sendes til PORTA
LCD_enable();
delay(2);
PORTA = 0x04;
PORTA = ( PORTA | b ); // Værdien af variablen b sendes til PORTA
LCD_enable();
delay(2);
PORTA = 0x00; // PORTA nulstilles
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ LCD_enable ]-
// Giver displayet instrukser om at læse data.
//
// Input data: INGEN
// Output data: INT : delay I millisekunder , ENABLE-puls
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
int LCD_enable (void)
{
delay(1);
PORTC = ( ( PORTC & 0xFE ) | 0x01 ); // Pin 1 på PORTC sættes høj for at sende Enable-signal til displayet
delay(2);
PORTC = ( PORTC & 0xFE ); // Pin 1 på PORTC nulstilles
delay(2);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ LCD_busy]-
// Anvendes, af andre funktioner, til at afgøre
// om displayet er klar til at modtage nye instrukser
//
// Input data: INGEN
// Output data: INT : delay I millisekunder
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
int LCD_busy (void)
{
PORTA = 0x08 ; // R/W sættes høj, så der kan læses fra displayet
LCD_enable();
while( ( PORTA & 0x80 ) != 0x80 ) // while-løkke, fortsætter så længe BUSY-FLAG på displayet er høj
{
delay(1);
}
PORTA = 0x00;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// -[ delay ]-
// Anvendes af andre funktioner til at skabe
// ophold i programmets udførelse.
// Laver variable ophold i millisekunder.
//
// Input data: INT value, antal millisekunder
// Output data: INGEN
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
void delay (int x)
{
int i, j; // i og j erklæres som interne variabler
for ( i = 0 ; i < x ; i++ ) // for-løkke, kører så længe x er mindre end i
{
for ( j = 0 ; j < 846 ; j++ ); // for-løkke tæller til 846 på ca. 1 ms
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
// PROGRAMKODE SLUT
// . 2010
//-------------------------------------------------------------------------------------------------------------------------------------------------------//