реклама на сайте
подробности

 
 
> Преобразование Int в строку на LCD (ICCAVR7), Помогите примером...
Vovan007
сообщение Dec 16 2006, 23:57
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 16-12-06
Пользователь №: 23 591



При выводе текста на LCD от Nokia3210 использую стандартную функцию

//----------------------------
void LcdStr ( LcdFontSize size, byte *dataPtr )
{
while ( *dataPtr !=0x00)
{
LcdChr( size, *dataPtr++ );
}
}

!!! вопрос как отобразить на LCD числовые значения заданной переменной
например
int X;
X=4123;
пример взят с www.microsyl.com
буду признателен всем! santa2.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
umup
сообщение Dec 17 2006, 05:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720



Вот еще. bin2bcd32 - преобразование bin-packed bcd (num_bytes - количество байтов на выходе), ilcd_ks066_pul - вывод беззнакового числа data в память по адресу buf, options - параметры вывода (биты 0..2 - количество знаков-1, биты 4..6 - положение точки, считая справа, бит 7=1 для преобразования bin-bcd, бит 3=1 для удаления незначащих нулей. ilcd_ks066_point_char - используемый символ точки. ilcd_ks066_psl - вывод знакового числа с теми же параметрами.
Код
uint32_t bin2bcd32(uint32_t num, uint8_t num_bytes) /**< \brief Convert uint32_t num to packed BCD using num_bytes of number - universal \ingroup ul_math */
{uint32_t ul1=0; /*result*/
uint8_t uc1;
for (uc1=(4-num_bytes);uc1;uc1--) num<<=8; /*adjust input bytes*/
for (uc1=(num_bytes<<3);uc1;uc1--) /*bit shift loop*/
{uint8_t uc2,uc3;
  /*BCD nibbles correction*/
  ul1+=0x33333333;
  for (uc3=4;uc3;uc3--)
  {uc2=(uint8_t)(ul1>>24);
   if (!(uc2&0x08)) uc2-=0x03;
   if (!(uc2&0x80)) uc2-=0x30;
   ul1=ul1<<8; ul1|=uc2;
  }
  /*shift next bit of input and result*/
  ul1<<=1;
  if ((num>>24)&0x80) ul1|=1;
  num<<=1;
}
return(ul1);
}

static unsigned char ilcd_ks066_point_char='.'; /*point symbol,can be changed*/
void ilcd_ks066_pul(unsigned long data,void* ibuf,unsigned char options)
{unsigned char uc1,uc2,uc3,uc4;
  uc1=(options&7)+1;
  if (options&0x80)
  {unsigned char uc5;
   uc5=(uc1+1)>>1;
   if (uc5>4) uc5=4;
   if (uc5==0) uc5=1;
   data=conv_bin2bcd(data,uc5);
  }
  uc3=((options>>4)&7);
  uc2=uc1-uc3;
  if (uc3) uc2++;
  while (uc1)
  {if ((options&8)&&(data==0)&&(uc1<uc2)) *(unsigned char *)ibuf=' ';
   else
   {uc4=(data&0xf)+'0';
    if (uc4>'9') uc4+=7;
    if ((uc1==uc2)&&(uc3))
    {*(unsigned char *)ibuf=ilcd_ks066_point_char;
     ibuf--;
    }
    *(unsigned char *)ibuf=uc4;
   }
   uc1--; data>>=4; ibuf--;
  }
}

void ilcd_ks066_psl(signed long data,void *ibuf,unsigned char options)
{if (data<0)
  {ilcd_ks066_pul(-data,ibuf,options);
   *(unsigned char*)(ibuf-(options&7))='-';
  } else ilcd_ks066_pul(data,ibuf,options);
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016