C#winform上位机开发学习笔记11-串口助手接收数据用波形显示功能添加

1.功能描述

接收串口数据,并将收到的十六进制数据用坐标系的方式将数据波形展示出来

2.代码部分

步骤1:定义链表,用于数据保存

        //数据结构-线性链表
        private List<byte> DataList = new List<byte>();

步骤2:定义波形颜色

        //定义波形颜色
        private Pen LinesPen = new Pen(Color.FromArgb(0xFF,0x00,0x00));//FF 00 00 为红色

步骤3:绘制接收数据的波形

            //如果数据量大于可容纳的数据量,则删除最左数据
            if (DataList.Count >= (this.ClientRectangle.Width - StartPrint) / DrawStep)
            {
                DataList.RemoveRange(0, DataList.Count - (this.ClientRectangle.Width - StartPrint) / DrawStep);
            }
            //绘制波形
            for(int i = 0; i < DataList.Count - 1; i++)
            {
                //点与点之间做直线连接
                e.Graphics.DrawLine(LinesPen, StartPrint + i * DrawStep, StartPrint + Unit_length * 16 - DataList[i] * (Unit_length / 16), StartPrint + (i + 1) * DrawStep, StartPrint + Unit_length * 16 - DataList[i + 1] * (Unit_length / 16));
            }

步骤4:定义数据添加函数

//定义链表尾部添加数据
        public void AddDataToWaveList(byte[] Data)
        {
            for (int i = 0; i < Data.Length; i++)
                DataList.Add(Data[i]);
            this.Invalidate();//刷新显示
        }

步骤5:串口接收函数中添加代码

                    //更新波形显示窗体的链表数据
                    if(WaveForm != null)
                    {
                        WaveForm.AddDataToWaveList(data);
                    }

完整接收函数

//串口接收事件
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

            //接收格式为ASCII码
            if (!checkBox16.Checked)//复用框没有被选择时
            {
                try
                {
                    textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");

                    string str = serialPort1.ReadExisting();//将接收到的数据存在自定义的字符串变量中
                    textBox1.AppendText(str + "\r\n");

                    //统计接收字节数
                    UInt32 RBytes = Convert.ToUInt32(textBox7.Text, 10);//定义接收字节数变量,并初始化为已接收字节数
                    RBytes += (UInt32)str.Length;//加ASCII码字节数
                    textBox7.Text = Convert.ToString(RBytes, 10);//显示总接收字节数
                }
                catch
                {
                    textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");
                    textBox1.AppendText("ASCII格式接收错误!\r\n");
                }
            }
            //接收格式为HEX
            else
            {
                try
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值