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

 
 
> Как последовательно вытаскивать биты из массива?
мега16
сообщение Dec 26 2010, 12:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Вобщем,нужно для светодиодного табло,на сдвиговые регистры пихать биты из массива,я так понимаю-нужно с конца массива поочередно брать биты. На си, например массив
Код
unsigned char code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};
Как их вытащить? На си код хотелось бы увидеть.
Go to the top of the page
 
+Quote Post
6 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
kurtis
сообщение Dec 26 2010, 12:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Код
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); /* альтернативный вариант */
}
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 12:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(kurtis @ Dec 26 2010, 17:18) *
Код
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  )
}
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 12:35
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Код
size_t i;
-а что это? Компилятор CVAVR ругается на это.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 26 2010, 12:36
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(мега16 @ Dec 26 2010, 18:35) *
Код
size_t i;
-а что это? Компилятор CVAVR ругается на это.

Поставьте просто int, а можно и char, если массив у вас такой короткий. sm.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 26 2010, 12:55
Сообщение #6


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:02
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Пробую в Протеусе, матрица на 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;
      }
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 26 2010, 13:05
Сообщение #8


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Methane ответил на Ваш вопрос. а вы же пытаетесь байт выдать за бит )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:16
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено
for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 )
Go to the top of the page
 
+Quote Post
Wise
сообщение Dec 26 2010, 13:35
Сообщение #10


Пользователь забанен
*****

Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492



Цитата(Xenia @ Dec 26 2010, 21:36) *
.. если массив у вас такой короткий. sm.gif


..Тот задумчивый и кроткий,
У кого массив короткий.
Нет сомнений за душой,
У кого массив большой.
rolleyes.gif


--------------------
It's me
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:45
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Юмор я понимаю, но мне проблему решить..
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 13:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 18:16) *
Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено
for(j=0;j<8;j++) push_bit( (code[i]&(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 посмотрите в книжке про С. Я не помню как оно называется.

Цитата(мега16 @ Dec 26 2010, 18:45) *
Юмор я понимаю, но мне проблему решить..

Лучше решите проблему как сделать ее дешевле в Китае.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:04
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Да уж,это слишком сложно для меня
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:08
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:04) *
Да уж,это слишком сложно для меня

Совершенно верно. На С любой дурак писать может. А вот сделать у нас, дешевле чем в Китае, это уже фиг! А сделать так чтобы китайцы не начали делать тоже самое но еще дешевле, это уже вообще не реально, как смерть фотона от старости.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:12
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..
Go to the top of the page
 
+Quote Post

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

 


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


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