Не удается отправить информацию на ЖК-дисплей

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

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... Программа показывает ошибку...

2 ответа

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

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

Ты звонишь void Send_A_String(char*) с char а не указатель на строку.

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

Другие вопросы по тегам