Avatar billede Martin005 Nybegynder
15. maj 2011 - 17:48 Der er 1 kommentar

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
//-------------------------------------------------------------------------------------------------------------------------------------------------------//
Avatar billede johnstigers Seniormester
15. maj 2011 - 19:13 #1
Velkommen til :)

Du har valgt at bruge en kategori beregnet til fejl på eksperten:
Passer denne beskrivelse på dit spørgsmål?:
Anmeld fejl i Eksperten systemet her - NB! KUN til at rapportere om fejl i Eksperten.dk's systemer.


Brug hellere denne kategori: www.eksperten.dk/spm/Hardware/Skaerme

Før du opretter nyt, skal du blot svare her og acceptere eget svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Alle kurser indenfor Microsoft 365 – både til begyndere og øvede.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester