上位机入门之二进制置位

上位机程序帧数据处理最终内容是控制码和数据。由于帧数据通过二进制传输、字节缓冲进行接收和发送。所以编程的核心就是对字节中二进制的读写运算。这里通过一个最小的演示程序来讲解。对一个字节中的8个位进行置位(设置为1)和恢复(置0)操作。程序基本界面如下所示:
在这里插入图片描述

1.程序说明

numericUpDown1.Enable=false,不能修改数据,主要显示1个字节的十进制值。lbl1 中以绿色前景色显示字节的二进制显示方式,8个按钮用于切换所在位的0或者是1。

2.类的成员变量

 #region 字段
bool b1 = false;
bool b2 = false;
bool b3 = false;
bool b4 = false;
bool b5 = false;
bool b6 = false;
bool b7 = false;
bool b8 = false;
byte b;
#endregion

3.Form1_Load事件代码

private void Form1_Load(object sender, EventArgs e)
{
    if (b1) btn1.Text = "0"; else btn1.Text = "1";
    if (b2) btn2.Text = "0"; else btn2.Text = "1";
    if (b3) btn3.Text = "0"; else btn3.Text = "1";
    if (b4) btn4.Text = "0"; else btn4.Text = "1";
    if (b5) btn5.Text = "0"; else btn5.Text = "1";
    if (b6) btn6.Text = "0"; else btn6.Text = "1";
    if (b7) btn7.Text = "0"; else btn7.Text = "1";
    if (b8) btn8.Text = "0"; else btn8.Text = "1";
    numericUpDown1.Enabled = false;
}

4.置位方法把位数切换成位值

按二进制从右至左:1,2,4,8,16,32,64,128进行转化,调用setByte方法。

private void bittoint (bool bb,int shift)
{
    int a = bb ? 1 : 0;
    switch (shift)
    {
        case 0:
            setByte(bb, 1);
            break;
        case 1:
            setByte(bb, 2);
            break;
        case 2:
            setByte(bb, 4);
            break;
        case 3:
            setByte(bb, 8);
            break;
        case 4:
            setByte(bb, 16);
            break;
        case 5:
            setByte(bb, 32);
            break;
        case 6:
            setByte(bb, 64);
            break;
        case 7:
            setByte(bb, 128);

            break;
    }
    numericUpDown1.Value = b;
    lbl1.Text = ConvertBinaryString();
}

5.置位操作方法

private void setByte( bool bb, int shiftValue)
{
    if (bb)
        b = (byte)(b | shiftValue);
    else
        b= (byte)(b & (shiftValue^0xff));
}

6.把一个字节转化成二进制字符串

private string ConvertBinaryString()
{
    byte bTmp = b;
    string str="";
    for(int i=7;i>=0;i--)
    {
        if ((1 << i & bTmp) > 0)
               
            str += "1";
               
        else str += "0";
    }
    return str;
}

7.八个置位按钮代码

private void btn1_Click(object sender, EventArgs e)
{
    btn1.Text = (Convert.ToInt16(b1).ToString());
    b1 =!b1;
    bittoint(b1,0);
}
private void btn2_Click(object sender, EventArgs e)
{
    btn2.Text = (Convert.ToInt16(b2).ToString());
    b2 = !b2;
    bittoint(b2,1);
}
private void btn3_Click(object sender, EventArgs e)
{
    btn3.Text = (Convert.ToInt16(b3).ToString());
    b3 = !b3;
    bittoint(b3,2);
}
private void btn4_Click(object sender, EventArgs e)
{
    btn4.Text = (Convert.ToInt16(b4).ToString());
    b4 = !b4;
    bittoint(b4,3);
}
private void btn5_Click(object sender, EventArgs e)
{
    btn5.Text = (Convert.ToInt16(b5).ToString());
    b5 = !b5;
    bittoint(b5,4);
}
private void btn6_Click(object sender, EventArgs e)
{
    btn6.Text = (Convert.ToInt16(b6).ToString());
    b6 = !b6;
    bittoint(b6,5);
}
private void btn7_Click(object sender, EventArgs e)
{
    btn7.Text = (Convert.ToInt16(b7).ToString());
    b7 = !b7;
    bittoint(b7,6);
}
private void btn8_Click(object sender, EventArgs e)
{
    btn8.Text = (Convert.ToInt16(b8).ToString());
    b8 = !b8;
    bittoint(b8,7);
}

写在最后

时间关系,程序代码不够紧凑,是在连思考边设计的过程中完成的。喜欢C#编程和上位机开发的朋友正好可以拿来练手。
可以改进的地方:
①一个字节的八个二进制位,可以使用枚举来做,更适合程序的模块化设计。
②八个置位按钮事件代码可以共用一个事件完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒茗清雾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值