Как использовать символ новой строки из моего текстового файла, чтобы перевести курсор на следующую строку? - PullRequest
0 голосов
/ 20 января 2019

Я пишу программу для чтения символов из файла .txt и последовательной отправки этих данных в UART MCU ATMEGA2560.ЖК-дисплей, подключенный к этому MCU, должен отображать символы один за другим в строке.Как только я сталкиваюсь с символом новой строки '\ n', следующая строка строки .txt должна быть напечатана в следующей строке ЖК-дисплея.Теперь проблема, с которой я сталкиваюсь, заключается в том, что хотя я могу печатать символы один за другим на ЖК-дисплее, символ новой строки не перемещает курсор в начало следующей строки.Вместо этого японский (или я не уверен) символ печатается на своем месте, и символы следующей строки печатаются в той же строке, что и другие.Мне нужна только помощь в получении новой строки, которая будет рассматриваться на ЖК-дисплее как команда / запрос, чтобы курсор перемещался на следующую строку вместо печати случайного специального символа в той же строке.

У меня есть серийночитать символы из текстового файла, используя pySerial.Я сделал соответствующую кодировку и работаю в Windows 10. Я также записал символы по одному на UART.Это часть кода, которая выполняет последовательную запись с необходимой кодировкой.Я не уверен, что именно здесь я ошибаюсь.

with open(args.file) as f:
        for line in f:
            for ch in line:
                serialPort.write(ch.encode())

В коде C данные принимаются последовательно, а полученные символы сохраняются в переменной.Я пытался добавить персонажей, но я думаю, что это вызывает проблему.

    volatile unsigned char data;
    unsigned char h[] ;

    //Function to print string on LCD
    void lcd_string(char *str)
{
    while(*str != '\0')
    {
        lcd_wr_char(*str);
        str++;
    }
}
    void append(char* s, char c)
    {
        int len = strlen(s);
        s[len]=c;
        s[len+1]='\0';
    }

    SIGNAL(SIG_USART2_RECV)         // ISR for receive complete interrupt
    {
        data = UDR2;
        UDR2 = data;
        append(h,data);
    }

    //The main program which has to do the job. 

    int main(void)
    {   
        init_devices();
        lcd_set_4bit();
        lcd_init();
            while(1)
        {
            lcd_cursor(1,1);
            lcd_string(h);
        }       
    }

Последовательные данные, передаваемые в UART, имеют этот формат '11, 23, 8 \ nC1, A5, F3 # 'Хеш указывает конец последовательных данных.

Вкл.ЖК-дисплей должен отображаться следующим образом:

11, 23, 8

C1, A5, F3

Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 29 января 2019

Похоже, что функция добавления не принимала символ новой строки как есть. Вот как я решил свою проблему.

ISR(USART2_RX_vect)     // ISR for receive complete interrupt
{
    data[count]= UDR2;
    UDR2 = data[count];
    if(data[count] == 0x0A)
    {
        lcd_cursor(2,1);
        pos = count;
        count++;
        flag = FALSE;
    }
    else if(count > pos && flag == FALSE)
    {
        lcd_wr_char(data[count]);
        x[a]=data[count];
        a++;
        count++;
        flag = FALSE;
    }
    else if(flag==TRUE)
    {
        lcd_wr_char(data[count]);
        y[b]=data[count];
        b++;
        count++;
        flag = TRUE;
    }
}

Я сравнил поступающие данные с шестнадцатеричным значением символа новой строки (0x0A) и, если он найден равным, пропустите этот символ и переместите курсор на 2-ю строку ЖК-дисплея.

...