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。
我想使用两个移位寄存器 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。