Привет всем!
Вот хочу вывести показания часов на индикатор. Опрашиваю часовую м/с DS1307/ Получаю масив rtc[]={секунды, минуты, часы, день недели,дата, месяц, год}. На индикатор вывожу часы, минуты и дату вывожу цифрами, а день недели и месяц словами.
Код: Выделить всё
/******************************************************************************/
// Вывод на индикатор данных времени
void put_time_lcd(unsigned char a)
{
send_data(lcd_kod(a >> 4));
send_data(lcd_kod(a & 0x0F));
}
/******************************************************************************/
// Вывод на индикатор "день недели"
void put_day_lcd(unsigned char a)
{
switch (a)
{
case 1 : show_str(" Пн "); break;
case 2 : show_str(" Вт "); break;
case 3 : show_str(" Ср "); break;
case 4 : show_str(" Чт "); break;
case 5 : show_str(" Пт "); break;
case 6 : show_str(" Сб "); break;
case 7 : show_str(" Вс "); break;
default: break;
}
}
/******************************************************************************/
// Вывод на индикатор "месяц"
void put_month_lcd(unsigned char a)
{
switch (a)
{
case 1 : show_str("янв"); break;
case 2 : show_str("фев"); break;
case 3 : show_str("мар"); break;
case 4 : show_str("апр"); break;
case 5 : show_str("мая"); break;
case 6 : show_str("июн"); break;
case 7 : show_str("июл"); break;
case 8 : show_str("авг"); break;
case 9 : show_str("сен"); break;
case 16 : show_str("окт"); break;
case 17 : show_str("ноя"); break;
case 18 : show_str("дек"); break;
default: break;
}
}
/*******************************************************************************/
// Прорисовка кадра 0
void videokadr_0(void)
{
send_command(LCD_CLEAR);
// В верхней строке формируем число, месяц, день недели и время
goto_str_pos(1,0);
put_time_lcd(rtc[4]); // выводим дату
put_month_lcd(rtc[5]); // выводим месяц
put_day_lcd(rtc[3]); // выводим день
put_time_lcd(rtc[2]); // выводим часы
if(l == !0) show_str("-");
else show_str(" ");
l = !l; // переменная мигания (частота - 2 Гц)
put_time_lcd(rtc[1]); // выводим минуты
// В нижней строке формируем температуру на улице и в помещении
// goto_str_pos(2,0);
// show_str("У= П= ",0);
//goto_str_pos(2,2);
// put_temperatura(tds1);
// goto_str_pos(2,12);
// put_temperatura(tds2);
}
/*******************************************************************************/
// Вывод строки на дисплей
void show_str(unsigned char *s)
{
while(*s != 0) send_data(get_lcd_rus_char(*s++));
}
/*******************************************************************************/
// Перевод данных в код индикатора
unsigned char lcd_kod(unsigned char data)
{
return data + 0x30;
}
/*******************************************************************************/
Но похоже я пошёл по сложному пути.

Наверное было бы правильней формировать буфер для вывода строки и эту строку уже выводить на индикатор. Только как это правильно сделать, не знаю!
Как вы в своих устройствах выводили данные на индикатор?