Gast
#795465
Hallo Freaks.... wenn ich das C Programm "LCD2 Beispiel Ausgabe" im AVR Studio compeiliere und Linke bekomme ich folgende Fehlermeldungen. Im AVR Workpad funktioniert es, aber ich möchte undbedingt das AVR Studio zum programieren nehmen. Bitte dringend um Hilfe.... Build started 27.2.2008 at 13:20:55 avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT display.o -MF dep/display.o.d -c ../display.c ../display.c: In function 'lcd_send': ../display.c:43: warning: implicit declaration of function 'sbi' ../display.c:44: warning: implicit declaration of function 'cbi' ../display.c: At top level: ../display.c:81: error: conflicting types for 'lcd_write' ../display.c:71: error: previous definition of 'lcd_write' was here ../display.c: In function 'lcd_write': ../display.c:84: warning: passing argument 1 of 'lcd_write' makes pointer from integer without a cast ../display.c: At top level: ../display.c:94: error: conflicting types for 'lcd_write' ../display.c:71: error: previous definition of 'lcd_write' was here ../display.c: In function 'lcd_write': ../display.c:97: warning: passing argument 1 of 'lcd_write' makes pointer from integer without a cast ../display.c:97: error: too few arguments to function 'lcd_write' ../display.c: In function 'main': ../display.c:194: error: too few arguments to function 'lcd_write' ../display.c:196: error: too few arguments to function 'lcd_write' make: *** [display.o] Error 1 Build failed with 7 errors and 4 warnings... Hier das Programm: #define F_CPU 3686400 #include <avr\io.h> #include <util\delay.h> //////////////////////////////////////////////////////////////////////// ///// // allgemeine-Funktionen //---------------------------------------------------------------------- ----- // wait_ms(..) - Wartet einige Millisekunden // Die Dauer ist nicht kalibriert. // PE: miliSec=Anzahl der zu wartenden Millisekunden //---------------------------------------------------------------------- ----- void wait_ms(int miliSec) { _delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec); // 4 Zyklen warteschleife } void wait_us(int mikroSec) { _delay_loop_2( 1*(F_CPU/(1000000/4)) * mikroSec); // 4 Zyklen warteschleife } //////////////////////////////////////////////////////////////////////// ////// // LCD-Funktionen für myAVR-Board + myAVR-LCD // 4-BitModus an PortD Bit 4-7 // PortD Bit 2 = RS, high=Daten, low=Kommando // PortD Bit 3 = E, high-Impuls für gültige Daten //---------------------------------------------------------------------- ----- // lcd_send(..) - sendet ein Byte an LCD im 4-Bit-Modus // RS muss vorher richtig gesetzt sein // PE: data=zu sendendes Byte //---------------------------------------------------------------------- ----- void lcd_send(char data) { // aktuelles RS ermitteln char rs=PORTD; rs&=4; // High-Teil senden char tmp=data; tmp&=0xf0; tmp|=rs; PORTD=tmp; // Schreibsignal sbi(PORTD,3); cbi(PORTD,3); // Low-Teil senden tmp=data; tmp&=0x0f; tmp*=16; tmp|=rs; PORTD=tmp; // Schreibsignal sbi(PORTD,3); cbi(PORTD,3); // verarbeiten lassen wait_ms(1); } //---------------------------------------------------------------------- ----- // lcd_cmd(..) - sendet ein Kommando an LCD // PE: cmd=Kommando-Byte //---------------------------------------------------------------------- ----- void lcd_cmd(char cmd) { cbi(PORTD,2); // RS löschen = Kommando lcd_send(cmd); // senden } //---------------------------------------------------------------------- ----- // lcd_write(..) - sendet ein Zeichen (Daten) an LCD // PE: text=Zeichen //---------------------------------------------------------------------- ----- void lcd_write(char text) { sbi(PORTD,2); // RS setzen = Daten lcd_send(text); // senden } //---------------------------------------------------------------------- ----- // lcd_write(..) - sendet eine Zeichenkette an LCD // Die Zeichenkette muss mit 0x00 abgeschlossen sein // PE: pText=Zeiger auf Zeichenkette //---------------------------------------------------------------------- ----- void lcd_write(char* pText) { while(pText[0]!=0) { lcd_write(pText[0]); pText++; } } //---------------------------------------------------------------------- ----- // lcd_write(..) - sendet eine Zeichenkette an LCD // PE: pText=Zeiger auf Zeichenkette // count=Anzahl der zu sendenden Zeichen //---------------------------------------------------------------------- ----- void lcd_write(char* pText, int count) { while(count!=0) { lcd_write(pText[0]); pText++; count--; } } //---------------------------------------------------------------------- ----- // lcd_home(..) - Cursor auf Position 1,1 //---------------------------------------------------------------------- ----- void lcd_home() { lcd_cmd(0x02); wait_ms(2); // warten } //---------------------------------------------------------------------- ----- // lcd_clear(..) - löscht die Anzeige im LCD //---------------------------------------------------------------------- ----- void lcd_clear() { lcd_cmd(0x01); wait_ms(2); // warten } //---------------------------------------------------------------------- ----- // lcd_on(..) - schaltet das LCD an //---------------------------------------------------------------------- ----- void lcd_on() { lcd_cmd(0x0E); } //---------------------------------------------------------------------- ----- // lcd_off(..) - schaltet das LCD aus //---------------------------------------------------------------------- ----- void lcd_off() { lcd_cmd(0x08); } //---------------------------------------------------------------------- ----- // lcd_goto(..) - setzt die Cursorposition // PE: row = Zeile 1..2 // col = Spalte 1..16 //---------------------------------------------------------------------- ----- void lcd_goto(int row, int col) { row--; // Null-basierend row&=0x01; // sicherheitshalber row*=0x40; // Zeile nach Bit 6 bringen col--; // Null-basierend col&=0x0f; // sicherheitshalber char tmp=row|col; tmp|=0x80; // Cursor setzen lcd_cmd(tmp); // senden } //---------------------------------------------------------------------- ----- // lcd_init(..) - Schaltet die Ports und Initialisiert das LCD //---------------------------------------------------------------------- ----- void lcd_init() { // Port D = Ausgang DDRD=0xff; PORTD=0; // warten bist LCD-Controller gebootet wait_ms(50); // SOFT-RESET PORTD = 0x30; //0b00110000; sbi(PORTD,3); cbi(PORTD,3); wait_ms(5); PORTD = 0x30; //0b00110000; sbi(PORTD,3); cbi(PORTD,3); wait_us(100); PORTD = 0x30; //0b00110000; sbi(PORTD,3); cbi(PORTD,3); wait_ms(5); // 4-BitModus einschalten PORTD=0x20; // Schreibsignal sbi(PORTD,3); cbi(PORTD,3); wait_ms(5); // ab hier im 4-Bit-Modus lcd_cmd(0x28); // Funktions-Set: 2 Zeilen, 5x7 Matrix, 4 Bit //lcd_off(); lcd_cmd(0x06); // Entry Mode lcd_on(); lcd_clear(); } //---------------------------------------------------------------------- ----- // Main-Funktion //---------------------------------------------------------------------- ----- int main (void) { wait_ms(200); lcd_init(); lcd_goto(1,1); lcd_write("Hallo LCD"); lcd_goto(2,1); lcd_write("12345678"); while (1) { } // Mainloop return 0; } //---------------------------------------------------------------------- -----