Перейти к содержанию
    

Как последовательно вытаскивать биты из массива?

Вобщем,нужно для светодиодного табло,на сдвиговые регистры пихать биты из массива,я так понимаю-нужно с конца массива поочередно брать биты. На си, например массив

unsigned char code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};

Как их вытащить? На си код хотелось бы увидеть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
}

БИТЫ не прочитали.

 

size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
   for(j=0;j<8;j++) push_bit(  (code[i]&(1<<j))?1:0  )
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

size_t i;

-а что это? Компилятор CVAVR ругается на это.

Поставьте просто int, а можно и char, если массив у вас такой короткий. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

a ведь никто и не посоветует человеку привыкать к стандартному заголовку stdint.h http://en.wikipedia.org/wiki/Stdint.h

и использовать uint8_t вместо unsigned char ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробую в Протеусе, матрица на 1 букву 8х8 светодиодов, вот с этим кодом горят все светодиоды,что то не то.

unsigned char counter;

unsigned char code[]={0x38};
int i;
unsigned char some_value;

DDRD=0x0F;

    RESET=1;  //линия сброса отключена
    
    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    
for (counter = 0; counter < 64; counter++){  // цикл
DS = some_value;      //записываем в линию данных 
//Дергаем ногой чтоб пропихнуть бит в регистр
SH_CP = 1;
SH_CP = 0;
  }
  //Дергаем ногой и защёлкиваем данные
  ST_CP = 1;
  ST_CP = 0; 
      }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено

for(j=0;j<8;j++) push_bit( (code&(1<<j))?1:0 )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.. если массив у вас такой короткий. :)

 

..Тот задумчивый и кроткий,

У кого массив короткий.

Нет сомнений за душой,

У кого массив большой.

:rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено

for(j=0;j<8;j++) push_bit( (code&(1<<j))?1:0 )

push_bit - функция которую. вам нужно написать

что-то вроде

static void

push_bit(char in)

{

strob = 0; //сигнал строба в 0

data_out = in; // BIT (1 нога процессора) должна опустится в 0 если на входе 0. Или подняться в 1, если на входе функции не 0.

strob = 1; // по фронту строба сдвигули бит дальше.

}

 

Про оператор (condition)? val_for_true:val_for_false посмотрите в книжке про С. Я не помню как оно называется.

 

Юмор я понимаю, но мне проблему решить..

Лучше решите проблему как сделать ее дешевле в Китае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да уж,это слишком сложно для меня

Совершенно верно. На С любой дурак писать может. А вот сделать у нас, дешевле чем в Китае, это уже фиг! А сделать так чтобы китайцы не начали делать тоже самое но еще дешевле, это уже вообще не реально, как смерть фотона от старости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...