7段LED + 4094

7 segment LED + 4094

我想使用两个移位寄存器 4094、一些 7 段 LED 和一个 ATmega 328p 来显示 2 个数字。 我当前的代码是:

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。 你能为我指出正确的方向吗? 编辑: 我使用 Atmel studio 6。 该代码的目的是生成从 00 到 16 的数字。

首先,你应该把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。