Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: hex to dec и в массив как сделать
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
bugor
Есть число однобайтное или 2х байтное как его преобразовать в массив в символьном виде чтобы потом это дело вывести на LCD дисплей
например 0131h -это 305 десятичное - нужен массив из допустим mydata[3] со значениями {33, 30, 35}
чтобы можно было каждое значение выкинуть в свое место на экран
пробовал форматированный вывод но ничего не получилось чегото да и обьем огромный просто занимает эта функция. Я в IAR не смог по контексту найти чегото такой функции, может искал неправильно?
xemul
itou(), ltoa(), ...
Оптимизацию подобных функций стОит поискать по конфе.
Goodefine
Как вариант:
Код
...
#define BUF_SIZE 4
...
unsigned int value; //число подлежащее выводу на дисплей
unsigned char buffer [BUF_SIZE]; //буфер вывода
...
//функция преобразования

void decbin (unsigned int const* x, unsigned char* buff) {
    unsigned int i;
        for (i=0; i<BUF_SIZE;i++){buff[i]=0;} //зануляем
        for (i=*x; i>=100; i-=100) {buff[0]++;}
        for (i=*x-100*buff[0]; i>=10; i-=10) {buff[1]++;}
        for (i=*x-100*buff[0]-10*buff[1]; i>=1; i-=1) {buff[2]++;}
                //забыл добавить еще:
                for (i=0; i<BUF_SIZE;i++){buff[i]+=0x30;} //в ASCII

                                                          }
...
//использование
...
decbin(&value, buffer);
lcd_gotoxy(0,0);
lcd_puts(buffer); //вывод
...

На тини2313 это дало экономию памяти более чем в два раза по сравнению со sprintf, которая к тому же не хотела работать с тинькой...
ucMike
Вариант
Код
...
#define BUF_SIZE 6  //  5 цифр + 0x00 (конец строки - привычка)
...
unsigned int value; //число подлежащее выводу на дисплей
unsigned char buffer [BUF_SIZE]; //буфер вывода

void XtoS(unsigned int *value, unsigned char *buffer)
{
   unsigned char i;
  unsigned int val;
  val = value;  // Чтоб не тревожить value
   for(i=0; i<BUF_SIZE-1; i++){
       buffer[BUF_SIZE - i - 1] = val % 10; // Остаток от деления
      val  = val / 10;                                // Целочисленное деление
  }
  for(i=0; i<BUF_SIZE-1; i++)  
      buffer[i] = buffer[i] + '0';  // Перейти к ASCII. Это можно делать сразу с взятием остатка
buffer[BUF_SIZE-1] = 0x00; // Привычка ставить ноль в конец строки
}
Goodefine
Цитата(ucMike @ Mar 9 2009, 17:17) *
Вариант...

В варианте выше деление не использовалось принципиально... Забыл, правда, ноль в конец массива дорисовать...
Цитата(ucMike @ Mar 9 2009, 17:17) *
Код
...
void XtoS(unsigned int *value, unsigned char *buffer)
{
...
  val = value;  // Чтоб не тревожить value
...
}

Так работать не будет...
ucMike
Цитата(Goodefine @ Mar 9 2009, 19:34) *
Так работать не будет...


Вы правы. Должно быть val = *value;

Посыпаю голову пеплом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.