мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Вобщем,нужно для светодиодного табло,на сдвиговые регистры пихать биты из массива,я так понимаю-нужно с конца массива поочередно брать биты. На си, например массив unsigned char code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C}; Как их вытащить? На си код хотелось бы увидеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба 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); /* альтернативный вариант */ } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба 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 ) } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба size_t i; -а что это? Компилятор CVAVR ругается на это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 31 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба size_t i; -а что это? Компилятор CVAVR ругается на это. Поставьте просто int, а можно и char, если массив у вас такой короткий. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба a ведь никто и не посоветует человеку привыкать к стандартному заголовку stdint.h http://en.wikipedia.org/wiki/Stdint.h и использовать uint8_t вместо unsigned char )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Пробую в Протеусе, матрица на 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Methane ответил на Ваш вопрос. а вы же пытаетесь байт выдать за бит ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено for(j=0;j<8;j++) push_bit( (code&(1<<j))?1:0 ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wise 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба .. если массив у вас такой короткий. :) ..Тот задумчивый и кроткий, У кого массив короткий. Нет сомнений за душой, У кого массив большой. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Юмор я понимаю, но мне проблему решить.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено 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 посмотрите в книжке про С. Я не помню как оно называется. Юмор я понимаю, но мне проблему решить.. Лучше решите проблему как сделать ее дешевле в Китае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Да уж,это слишком сложно для меня Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Да уж,это слишком сложно для меня Совершенно верно. На С любой дурак писать может. А вот сделать у нас, дешевле чем в Китае, это уже фиг! А сделать так чтобы китайцы не начали делать тоже самое но еще дешевле, это уже вообще не реально, как смерть фотона от старости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
мега16 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться