找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1956|回复: 1
打印 上一主题 下一主题
收起左侧

c#上位机未能显示波形,求大神支招

[复制链接]
跳转到指定楼层
楼主
ID:229375 发表于 2017-8-26 20:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了方便各路豪杰看代码,我复制相关代码如下:       private const int Unit_length = 20;//单位格大小
        private const int StartPrint = 32;//点坐标偏移量
        private List<float> DataList = new List<float>();//数据结构----线性链表
        private Pen TablePen = new Pen(Color.FromArgb(0x00, 0x00, 0x00));//轴线颜色
        private Pen LinesPen = new Pen(Color.FromArgb(0xa0, 0x00, 0x00));//波形颜色

        private void groupBox3_Paint(object sender, PaintEventArgs e)//在容器里面画波形
        {
            String Str = "";
            Graphics g = e.Graphics;
            System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
            e.Graphics.FillRectangle(Brushes.White, e.Graphics.ClipBounds);
            for (int i = 0; i <= 30; i++)
            {
                e.Graphics.DrawLine(TablePen, StartPrint + i * Unit_length + 5, StartPrint - 14, StartPrint + i * Unit_length + 5, 17 * Unit_length);//画纵线
                gp.AddString((i * 10).ToString(), this.Font.FontFamily, (int)FontStyle.Regular, 11, new RectangleF(StartPrint + i * Unit_length, 16 * Unit_length + 18, 400, 50), null);//添加文字
            }
            for (int i = 0; i <= 16; i++)
            {
                e.Graphics.DrawLine(TablePen, StartPrint +5, i * Unit_length + 18, StartPrint + 30 * Unit_length + 5, i * Unit_length + 18);//画横线
                Str = Convert.ToString((16 - i) * 10);
                if (i == 0)
                    Str = "65536";
                if (i == 17)
                    break;
                gp.AddString(Str, this.Font.FontFamily, (int)FontStyle.Regular, 12, new RectangleF(0, i * Unit_length + 16, 400, 50), null);//添加文字
            }
            e.Graphics.DrawPath(Pens.Black, gp);//文字画在表上
            for (int i = 0; i < DataList.Count - 1; i++)//绘画波形部分
            {

                e.Graphics.DrawLine(LinesPen, StartPrint + 5 + i * 5 ,17 * Unit_length - DataList[i] * 4, StartPrint + 5 + (i + 1) * 5, 7 * Unit_length + 18 - DataList[i + 1] * 4);

            }

        }      
       private void AddData(float Data)//链表 给波形传数值
        {
            for (int i = 0; i < sz3.Length; i++)
            {
                DataList.Add(sz3[i]);
            }
            Invalidate();

        }


            for (int k = 0; k < (Q - 2); k = k + 2)//数组3里面是要绘画的数据  例如:4218,4200 ,4199之类的
            {

                sz3[m] = sz4[k] * b + sz4[k + 1];
                m++;
            }





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:229375 发表于 2017-8-27 11:38 | 只看该作者
今天测试了一下,发现链表里面是有数据的,但就是不知道为什么没有波形显示
我参照这个帖子写的波形显示上位机波形显示 求串口数据波形显示代码,C#的!先表示感谢!
http://www.51hei.com/bbs/dpj-75558-1.html
(出处: 单片机论坛)

还有我修改了几部分:
            //接受串口的数据添加到链表当中。不再从数组3里接收数据
            bl1 = (byte)serialPort1.ReadByte();
            string b = Convert.ToString(bl1, 16).ToUpper();
            textBox1.AppendText("0x" + (b.Length == 1 ? "0" + b : b) + " ");
            data = Convert.ToSingle(bl1);      
            AddData(data);

        //给链表添加数据,之前给链表添加数据好像是错误的
        void AddData(float Data)
{
            DataList.Add(Data);
            Invalidate();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表