【发布时间】:2015-01-16 12:59:51
【问题描述】:
我想使用两个移位寄存器 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。 你能为我指出正确的方向吗? 编辑: 我使用爱特梅尔工作室 6。 该代码的目的是生成从 00 到 16 的数字。
【问题讨论】:
-
请提供更多细节。目标是生成一些位模式还是一系列位模式?代码看起来像 C,实际上是 C 吗?
-
4094 需要一个额外的信号来将移入的值存储到存储其输出的内部寄存器中。我没有看到你在处理这个问题(在移出两位数字之间)。
-
如果你显示代码,你应该标记语言。除了帮助人们找到问题外,它还会影响语法高亮。
标签: c bit-manipulation avr led