2015-07-09 2 views
0

Я изучал этот код в одном из учебников YouTube, я не могу отправить данные на ЖК-дисплее, программа показывает ошибку, то ошибка, которую я получаю этоне в состоянии послать информацию на LCD

Initializing argument 1 of 'void Send_A_String(char*)' [-fpermissive] 
initializing argument 3 of 'void Send_An_IntegerToMrLCD(uint8_t, uint8_t, int, char)' [-fpermissive] 
invalid conversion from 'char' to 'char*' [-fpermissive] 
invalid conversion from 'char*' to 'int' [-fpermissive] 

Ниже заголовочный файл для LCD - MrLCD.h

#ifndef MrLCD 
#define MrLCD 

#include <avr/io.h> 
#include <util/delay.h> 
#include <stdlib.h> 

#define MrLCDsCrib PORTB 
#define DataDir_MrLCDsCrib DDRB 
#define MrLCDsControl PORTD 
#define DataDir_MrLCDsControl DDRD 
#define LightSwitch 5 
#define ReadWrite 7 
#define BiPolarMood 2 

char firstColumnPositionsForMrLCD[4] = {0, 64, 20, 84}; 

void Check_IF_MrLCD_isBusy(void); 
void Peek_A_Boo(void); 
void Send_A_Command(unsigned char command); 
void Send_A_Character(unsigned char character); 
void Send_A_String(char *StringOfCharacters); 
void initializeMrLCD(void); 
void GotoMrLCDsLocation(uint8_t x, uint8_t y); 
void Send_A_StringToMrLCDWithLocation(uint8_t x, uint8_t y, char *StringOfCharacters); 
void Send_An_IntegerToMrLCD(uint8_t x, uint8_t y, int IntegerToDisplay, char NumberOfDigits); 


void Check_IF_MrLCD_isBusy() 
{ 
    DataDir_MrLCDsCrib = 0; 
    MrLCDsControl |= 1<<ReadWrite; 
    MrLCDsControl &= ~1<<BiPolarMood; 

    while (MrLCDsCrib >= 0x80) 
    { 
     Peek_A_Boo(); 
    } 

    DataDir_MrLCDsCrib = 0xFF; 
} 
void Peek_A_Boo() 
{ 
    MrLCDsControl |= 1<<LightSwitch; 
    asm volatile ("nop"); 
    asm volatile ("nop"); 
    MrLCDsControl &= ~1<<LightSwitch; 
} 

void Send_A_Command(unsigned char command) 
{ 
    Check_IF_MrLCD_isBusy(); 
    MrLCDsCrib = command; 
    MrLCDsControl &= ~ ((1<<ReadWrite)|(1<<BiPolarMood)); 
    Peek_A_Boo(); 
    MrLCDsCrib = 0; 
} 

void Send_A_Character(unsigned char character) 
{ 
    Check_IF_MrLCD_isBusy(); 
    MrLCDsCrib = character; 
    MrLCDsControl &= ~ (1<<ReadWrite); 
    MrLCDsControl |= 1<<BiPolarMood; 
    Peek_A_Boo(); 
    MrLCDsCrib = 0; 
} 

void Send_A_String(char *StringOfCharacters) 
{ 
    while(*StringOfCharacters > 0) 
    { 
     Send_A_Character(*StringOfCharacters++); 
    } 
} 

void initializeMrLCD() 
{ 
    DataDir_MrLCDsControl |= 1<<LightSwitch | 1<<ReadWrite | 1<<BiPolarMood; 
    _delay_ms(15); 

    Send_A_Command(0x01); //Clear Screen 0x01 = 00000001 
    _delay_ms(2); 
    Send_A_Command(0x38); 
    _delay_us(50); 
    Send_A_Command(0b00001110); 
    _delay_us(50); 
} 

void GotoMrLCDsLocation(uint8_t x, uint8_t y) 
{ 
    Send_A_Command(0x80 + firstColumnPositionsForMrLCD[y-1] + (x-1)); 
} 

void Send_A_StringToMrLCDWithLocation(uint8_t x, uint8_t y, char *StringOfCharacters) 
{ 
    GotoMrLCDsLocation(x, y); 
    Send_A_String(*StringOfCharacters); 
} 

void Send_An_IntegerToMrLCD(uint8_t x, uint8_t y, int IntegerToDisplay, char NumberOfDigits) 
{ 
    char StringToDisplay[NumberOfDigits]; 
    itoa(IntegerToDisplay, StringToDisplay, 10); 
    Send_A_StringToMrLCDWithLocation(x, y, StringToDisplay); 
    Send_A_String(" "); 
} 

#endif 

И в простейших программ в главном файле, если я пытаюсь вызвать эти функции в файле заголовка, как Send_A_StringToMrLCDWithLocation или Send_An_IntegerToMrLCD ... программа показывает ошибку .. .

ответ

0

Вам нужно переместить весь этот код в файл C, т. Е. MrLCD.c, потому что именно здесь создается экземпляр кода.

+0

Это должен быть комментарий. – serenesat

+0

appologies, я хотел изменить его, но у меня нет достаточной репутации, чтобы прокомментировать вопрос ... – wire67

0

Вы не включили файл .c, в котором вы вызываете эти функции, но, похоже, ошибка говорит о том, что вы вызываете функции с неправильным типом переменных.

Вы вызываете void Send_A_String(char*) с char, а не указателем на строку.

Вы вызываете void Send_An_IntegerToMrLCD(uint8_t, uint8_t, int, char) с указателем char (string), а не int в третьем параметре.

Смежные вопросы