2015-01-16 3 views
0

Я бы хотел отобразить 2 номера usig двух сдвиговых регистров 4094, некоторые 7-сегментные светодиоды и ATmega 328p. Мой curent код:7-сегментный светодиод + 4094

uint8_t LED[10]={0b11111100,0b01100000,0b011011010,0b011110010,0b01100110,0b10110110,0b10111110,0b111000000,0b11111110,0b11110110}; 


int j =Led; //input from the main 
uint8_t num_1=Led/10; 
uint8_t num_2=Led%10;  
Strobe=0; 
uint8_t mask=0x80; 
for(uint8_t i=0; i<8; i++) 
    { 
     mask=mask>>1;  

    if((LED[num_1] & mask) ==1) 
    { 
     DATA= 1; 
    } 
    else 
    { 

     DATA= 0; 
    } 
    pulse(); 
} 
mask=0x80; 
for(uint8_t i=0; i<8; i++) 
{ 
    mask=mask>>1; 
    ; 

    if((LED[num_2] & mask)==1) 
    { 
     DATA= 1; 
    } 
    else 
    { 

     DATA= 0; 
    } 
    pulse(); 
} 

Но, конечно, это не работает должным образом. Он генерирует только 0. Можете ли вы указать мне в правильном направлении? EDIT: Я использую Atmel студию 6. Цель кода для генерации число от 00 до 16.

+1

Просьба предоставить более подробную информацию. Цель состоит в том, чтобы сгенерировать некоторый битовый шаблон или последовательность битовых шаблонов? Код выглядит как C, на самом деле C? – Codor

+0

4094 требует дополнительного сигнала для хранения сдвинутых значений в свой внутренний регистр, который сохраняет свой вывод. Я не вижу, чтобы вы заботились об этом (между смещением двух цифр). – Cactus

+0

Если вы показываете код, вы должны пометить язык. Помимо помощи людям в поиске вопроса, это также влияет на подсветку синтаксиса. – crashmstr

ответ

2

Во-первых, вам следует поместить mask = mask>>1 в конце цикла.

Во-вторых, вам нужно заменить
if((LED[num_2] & mask) == 1) с
if((LED[num_2] & mask) == mask) или просто
if( LED[num_2] & mask)

Маска может быть 0b10000000, 0b01000000, ..., 0b00000001.
Результат операции & может быть такой же, как маска или ноль.
И правая сторона == Оператор 1, который всегда 0b00000001.

+0

Могу ли я избавиться от оператора if и написать напрямую Data = LED [num_2] & mask ?? – user3713940

+0

Это работает как шарм. Спасибо за ваше время – user3713940

+0

Как я уже отмечал, результат операции ** И ** может быть такой же, как маска или ноль. Вы можете сделать это, когда resutl равен нулю. Когда результатом будет маска, результат будет отличным от нуля, что не совпадает с ** 1 **. Согласно принципу ** 4094 **, ** Данные ** могут быть ** 1 ** или ** 0 **. – iama

Смежные вопросы