Делал прибор 20 лет тому назад, индикатор на 44780.
Пусть коряво, но РАБОТАЕТ.
#include ‹io552.h›
#include ‹defport.h›
void hind1(float fiw,char st,char pos)
{
void hd(char d);
char it,w,i,j,ff[9];
char np;
it=fiw; w=10*(fiw-it); /* w - ОДИН ЗНАК ПОСЛЕ ДЕС. ТОЧКИ */
ff[8]=32; if(it‹0){
ff[7]=45; it=-it; /* ФОРМИРОВАНИЕ ЗНАКА */
}
ff[0]=32;
ff[1]=(w % 10)+48;
ff[2]=46; /* ДЕС. ТОЧКА */
ff[3]=(it % 10)+48;
ff[4]=((it % 100)/10)+48;
ff[5]=((it % 1000)/100)+48;
ff[6]=((it % 10000)/1000)+48;
switch(st) { case 1 : np=as0; break;
case 2 : np=as1; break;
case 3 : np=as2; break;
case 4 : np=as3; break;
default : np=as0; break;}
while(hitcr›127); hitc=np+pos; /* ПОЗИЦИОНИРОВАНИЕ КУРСОРА */
for (j=6; j›0 ; j--)
{
hd(32); /* ОЧИСТКА ПОЛЯ ПЕЧАТИ */
}
while(hitcr›127); hitc=np+pos; /* ПОЗИЦИОНИРОВАНИЕ КУРСОРА */
for (j=6; j›2 ; j--)
{
if (ff[j]==4

ff[j]=32; /* ПОДГОТОВКА СТРОКИ */
else break;
}
j=j+1;
for (np=j; np›1 ; np--)
{
i=ff[np-1];
while(hitcr›127); hitd=i; /* ПЕЧАТЬ СТРОКИ */
}
}
---------------------------------------
defport.h
#define hitc (*(char*) 0x018000) /* адрес регистра команд дисплея */
#define hitd (*(char*) 0x018001) /* адрес регистра данных дисплея */
#define hitcr (*(char*) 0x018002) /* адрес чт. статуса дисплея */
#define hitdr (*(char*) 0x018003) /* адрес чтения данных дисплея */
#define spk (*(int *) 0x00F9) /* КОД ДЛИТЕЛЬНОСТИ ЗВУКА */
#define klav (*(char *) 0x00FB) /* КОД нажатой кнопки */
#define mode (*(char *) 0x00FC) /* КОД режима (ток. бат. Ом.) */
#define pit (*(char *) 0x00FD) /* КОД напр. питания */
#define start (*(char *) 0x00FE) /* КОД режима "start" */
#define as0 0x80
#define as1 0xC0
#define as2 0x94
#define as3 0xD4