我把全部代码贴出来 新手代码比较low 虚心请教
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 这里主要是显示的form里的实时时间 用的委托
new Thread(() =>
{
while (true)
{
try { shijian.BeginInvoke(new MethodInvoker(() => shijian.Text = DateTime.Now.ToString("HH:mm tt"))); }
catch { }
try { shijian2.BeginInvoke(new MethodInvoker(() => shijian2.Text = DateTime.Now.ToString("yyyy/MM/dd dddd"))); }
catch { }
Thread.Sleep(1000);
}
})
{ IsBackground = true }.Start();
}
private void button2_Click(object sender, EventArgs e)
// 这里使用button按钮向单片机发送数据包,单片机接收到后开始给上位机发送数据
{
byte[] xxx = new byte[4];
xxx[0] = 0x11;
xxx[1] = 0x22;
xxx[2] = 0x33;
xxx[3] = 0x44;
serialPort1.Write(xxx, 0, 4);
}
private void Form1_Load(object sender, EventArgs e)
// 这里是显示的页面,我把页面贴出图片
{
Form2 frm = new Form2();
frm.ShowDialog();
CheckForIllegalCrossThreadCalls = false;
string[] ports = SerialPort.GetPortNames( );
comboBox1.Items.AddRange(ports);
if (ports.Length == 0)
{
MessageBox.Show("没有可用串口", "系统提示");
}
else
{
SerialPort serialPort1 = new SerialPort();
}
}
private void button1_Click(object sender, EventArgs e)
//这个button控件打开comboBox1中的串口名 ,如果没打开报出错误
{
if (comboBox1.Text == null)
{
MessageBox.Show("请打开串口", "系统提示", MessageBoxButtons.YesNoCancel);
}
if (serialPort1.IsOpen == false)
{
button1.Text = "打开串口";
serialPort1.PortName = comboBox1.Text.ToString();
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = 9600;
try
{
serialPort1.Open();
MessageBox.Show("串口已打开!", "系统提示");
}
catch (Exception ex)
{
//serialPort1 = new SerialPort();
MessageBox.Show(ex.Message);
}
}
else
{
button1.Text = "串口已打开";
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
/*这段是触发了控件的接收事件,开始接收数据 解析数据包 我感觉就是这里出了问题接收上来的数据会有挺长时间的延迟 还会时不时的显示0.0 这种情况感觉不应该出现 不想显示0.0 但出现这种情况的时候要让他显示上一个数据*/
{
SerialPort serialPort1 = sender as SerialPort;
byte[] shuju = new byte[serialPort1.ReadBufferSize];
serialPort1.Read(shuju, 0, shuju.Length);
if (shuju[0] == 0x5A)
{
if (shuju[5] == 0x01)
{
{
label8.Text = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f1");
}
}
if (shuju[5] == 0x03)
{
{
label9.Text = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f1");
}
}
if (shuju[5] == 0x05)
{
{
label10.Text = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f3");
}
}
}