如何通过应用掩码来统计开关数量并切换相应数量的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 变量的位。
我使用的是 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 变量的位。