【发布时间】:2021-02-11 05:40:20
【问题描述】:
我正在使用 C# 创建一个与 I/O 板通信的 WPF 程序。为了将数据写入 I/O 板,我需要传递一个 8 位二进制数(1111 1111 表示所有 8 个输出端口都“关闭”,而 0000 0000 表示所有 8 个输出端口都“打开”)。我有复选框,通过以 8 位数字的形式写入数据来切换这些输出端口。这是我当前代码的示例:
private void sol1_Checked(object sender, RoutedEventArgs e)
{
switch (io_boards_list.SelectedIndex)
{
case 0:
if (sol2.IsChecked == true)
{
USBIOBoards.io_boards.WritePort(0, 16, 0xFC); // 1111 1100
} else
{
USBIOBoards.io_boards.WritePort(0, 16, 0xFE); // 1111 1110
}
break;
}
}
private void sol1_Unchecked(object sender, RoutedEventArgs e)
{
// 1111 1111
switch (io_boards_list.SelectedIndex)
{
case 0:
if (sol2.IsChecked == true)
{
USBIOBoards.io_boards.WritePort(0, 16, 0xFD); // 1111 1101
} else
{
USBIOBoards.io_boards.WritePort(0, 16, 0xFE); // 1111 1111
}
break;
}
}
现在的问题是,如果我先勾选第一个复选框,然后勾选第二个复选框,I/O 板将不会将第一个信号与第二个保持一致,而是禁用该信号,因为数据是如何写入的。我希望能够看到一些东西,我可以只拥有一个变量保持 1111 1111 并且我可以在其位置修改一个位,以便我可以打开多个输出信号。我对 C# 比较陌生,所以我不确定如何有效地解决这个问题。我总是可以暴力破解它,但我想避免这种情况,因为我们将把这个软件移植到许多可能有不同端口的定制机器上。
【问题讨论】:
标签: c# .net io bit-manipulation