我正在使用 DE0 板,想要计算处于 ON 位置的滑动开关的数量(其中有 10 个),然后点亮板上相应数量的 LED(也是 10 个)。但是我不知道如何使用 IOWR 的屏蔽结果。谢谢您
alt_u16 sw;
volatile int i = 0;
alt_u16 count = 0x0;
alt_u16 mask = 0x0001;
alt_u16 sw2;
int CountSWITCHES(alt_u16 sw);
int alt_main (void)
{
while(1)
{
sw = IORD_ALTERA_AVALON_PIO_DATA(SWITCHES_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE, sw2);
}
return 0;
}
int CountSWITCHES(alt_u16 sw)
{
for(i = 0; i < 10; i++)
{
if (sw & mask)
{
count++;
}
mask = mask >> 1;
}
return count;
}
void TurnLedsON(alt_u16 sw2)
{
sw2 = CountSWITCHES(sw);
}
最佳答案
函数CountSWITCHES
不正确,应该是:
int CountSWITCHES(alt_u16 sw)
{
alt_u16 mask = 1;
for(i = 0; i < 10; i++)
{
if (sw & mask)
{
count++;
}
mask = mask << 1;
}
return count;
}
顺便说一句,此函数返回开关打开的数量,但不返回它们的位置。
IOWR_ALTERA_AVALON_PIO_DATA(base, data)
需要一个位域data
:每个设置为 1 的位都会将端口对应的输出设置为 1 (base
) >)通过了。
这意味着您必须根据开关位置设置 sw2 变量的位。
关于c - 如何计算开关数量并通过应用屏蔽来开关相应数量的LED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041700/