[uquote="Zhuk72",url="/forum/viewtopic.php?p=3129810#p3129810"]void lcd_out (unsigned char row, unsigned char col, unsigned char *text)
{
.....
Вызов остался прежним:
Вот на на эту строку я и получаю предупреждение .[/uquote]
Вообще-то, если подходить с правильного направления, то та рассматриваемая функция изначально предназначена для работы совместно с одной из "печатающих" функций типа форматной
sprint или неформатной "копирующей"
strcpy . Это стандартные встроенные функции, поставляемые с компилятором. Правда, встроенная sprintf довольно тяжела по объему и скорости, и потому у нее есть облегченный вариант
siprintf с урезанным функционалом, входящий в комплект tiny printf.
Суть этого - получение универсального способа вывода, причем не только на физический дисплей, но и куда угодно, хоть в UART-терминалку, хоть в азбуку Морзе.
Выглядеть это может вот так, на примере вывода двух строк в классический двухстрочник 1602 (на самом деле, эти функции не привязаны к конкретному дисплею)
Код: Выделить всё
#define LINE_LENGTH (16+1) // длина строки, плюс символ конца строки
char txtbuf[LINE_LENGTH * 2] = {0}; // текстовый буфер длиной в 2 строки по (16+1) элементов
int length; // длина строки
int voltage = 0, current = 0; // переменные для значений напряжения и тока
voltage = 7;
current = 210;
length = sprintf(txtbuf, "Voltage: %2i V", voltage); // первая строка (возвращается число скопированных символов)
length = sprintf(txtbuf + LINE_LENGTH, "Current: %4i mA", current); // вторая строка
/* либо немного иначе, но функция вывода должна распознавать символ переноса строки \n */
length = sprintf(txtbuf, "Voltage: %2i V\nCurrent: %4i mA", voltage, current);
write_to_LCD(txtbuf, LINE_LENGTH * 2 ); // выводятся в дисплей две строки сразу
а сама функция просмотра строки для вывода на дисплей будет вот такой:
Код: Выделить всё
int write_to_LCD(char *buf, int lehgth)
{
/* это заглушка функции */
}
благодаря такой конструкции мы можем выводить в дисплей любые данные - текстовые сообщения, текст с переменной, просто переменную в нужной нам позиции на дисплее
Код: Выделить всё
sprintf(txtbuf + 5, "%i", voltage); // вывод только значения переменной в опред.позиции
sprintf(txtbuf + LINE_LENGTH + 3, "Hello world"); // вывод текста в определенной позиции
strcpy(txtbuf, " "); // затирается строка
const char message[] = {"Main messaga"}; // есть некий массив, инициализованный как строка
strcpy(txtbuf+1, message); // копируем ее в текстовый буфер для вывода
strcpy(txtbuf + LINE_LENGTH, "Waka-Waka-shet"); // или пишем напрямую на второй строчке
Таким образом, мы видим, что мы простым способом можем вывести в дисплей любую инфу в любом месте дисплея и нам не требуется изобретать ничего в функции вывода на дисплей. Выбор способа идет на уровне подготовки массива текстового буфера.