импорт строки по последовательному порту и печать на ЖК-дисплее - PullRequest
0 голосов
/ 18 декабря 2011
//================= konfigure LCD
// porta za podatoci e PORTB
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
char name;
char txt[16];


void init(){
    PORTB = 0xFF;
    TRISB = 0x00;
    ANSEL = 0x00;
    ANSELH = 0x00;
    C1ON_bit = 0;
    C2ON_bit = 0;
    UART1_Init(9600);
    Delay_ms(100);
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
}
//=========================================================



void main()
{
    init();
    UART1_Write_Text("Start");
    UART1_Write(10);
    UART1_Write(13);
    do{
    }
    while(!UART1_Data_Ready());

    name = UART1_Read();
    if (name!='.')
    {
        strcpy(txt,"name");
        strcat(txt,name);
        Lcd_Out(1,1, txt);
        Delay_ms(1);
    }
    else
        Lcd_Out(2,1, "error");
}

Я хочу отобразить string="MYNAME" на ЖК-дисплее.Я импортирую строку на последовательный порт, но она не отображается на ЖК-дисплее.В чем ошибка?Может ли кто-нибудь помочь мне?Я использую pic16f887 и Pic IDE симулятор.Есть какая-то функция или что-то еще?

1 Ответ

0 голосов
/ 18 декабря 2011

Вам необходимо проверить UART1_Data_Ready для каждого символа и поместить прием символов в цикл, который заканчивается, когда вы нажимаете «.». Кроме того, вам нужно вывести strcpy из цикла, чтобы не писать поверх выходной строки для каждого символа.

РЕДАКТИРОВАНИЕ: заменено strcat, поскольку обе переменные должны быть строками.

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

strcpy(txt,"name ");
while (1)
{
    while(!UART1_Data_Ready());

    name = UART1_Read();
    if (name!='.')
    {
        char i;

        UART1_Write(name);
        i = strlen(txt);
        txt[i] = name;      // add char to end of string
        txt[i+1] = '\0';    // add zero to terminate new string
        Lcd_Out(1,1, txt);
        Delay_ms(1);
    }
    else
    {
        UART1_Write(13);     // cr
        UART1_Write(10);     // lf
        break;
}
...