如何通过应用掩码来统计开关数量并切换相应数量的LED?

How to count number of switches and switch corresponding number of LEDs by applying masking?

我使用的是 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;    
}

顺便说一句,这个函数 return 开关的数量,但它不会 return 它们的位置。

IOWR_ALTERA_AVALON_PIO_DATA(base, data) 想要一个位域 data:每个位设置为 1 都会将端口 (base) 的相应输出设置为 1 通过。 这意味着您必须根据开关位置设置 sw2 变量的位。