输出Y0:
try
{
Y = !Y; // 切换状态
// 根据Y7的状态发送相应的数据
if ( Y)
{
string command = ":01050500FF00F6\r\n"; // 完整的命令,以ASCII码形式发送
serialPort.Write(command);// 发送数据以置1
button5.BackColor = Color.Green;
}
else
{
string command = ":010505000000F5\r\n"; //
serialPort.Write(command); // 发送数据以置0
button5.BackColor = Color.Red;
}
}
catch
{
MessageBox.Show("请先打开串口");
}
写入D1的值:
private void button22_Click(object sender, EventArgs e)
{
string aa = ":";
string Aa = "01061001";
string B = textBox3.Text; // 获取输入的值
if (string.IsNullOrEmpty(B))
{
MessageBox.Show("请输入数据");
return;
}
if (!serialPort.IsOpen) // 检查串口是否已经打开
{
MessageBox.Show("请先打开串口");
return;
}
else
{
int H = int.Parse(B); // 将输入的值解析为整数
string bb = H.ToString("X4"); // 将整数转换为4位16进制字符串
string ab = Aa + bb; // 将A与hexValue串联起来
// 将拼接后的字符串转换为16进制,并以空格隔开
string K = string.Join(" ", Enumerable.Range(0, ab.Length / 2).Select(i => ab.Substring(i * 2, 2)));
string data = K;
int lrc = 0;
for (int i = 0; i < data.Length; i += 3) // 注意这里是每两个字符加一个空格,所以是每三个字符一组
{
lrc += Convert.ToInt32(data.Substring(i, 2), 16); // 将每两个字符转换为16进制数并相加
}
lrc = (~lrc + 1) & 0xFF; // 取反加一并截取低8位
string lrcHex = lrc.ToString("X2"); // 将LRC校验码转换为16进制字符串
//MessageBox.Show("LRC校验码为:" + lrcHex);
string D = "\r\n";
string cc = aa + ab + lrcHex + D; // 将串联起来
serialPort.Write(cc);
MessageBox.Show("写入成功");
}
}
LRC校验码:
private void button4_Click(object sender, EventArgs e)
{
string input = textBox1.Text;
string[] inputArray = input.Split(' ');//请输入数据,以空格分隔:
byte[] data = new byte[inputArray.Length];
for (int i = 0; i < inputArray.Length; i++)
{
data[i] = Convert.ToByte(inputArray[i], 16);
}
byte lrc = CalculateLRC(data);
MessageBox.Show("LRC校验码为: 0x" + lrc.ToString("X2"));
}
public static byte CalculateLRC(byte[] data)
{
byte lrc = 0;
foreach (byte b in data)
{
lrc += b;
lrc = (byte)(lrc & 0xFF); // 保留最低8位
}
lrc = (byte)((lrc ^ 0xFF) + 1); // 取反加1
return lrc;
}
#冬日生活打卡季##什么是地磁暴 对日常生活有影响吗#