久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 13133|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

上位機(jī)波形顯示 求串口數(shù)據(jù)波形顯示代碼,C#的!先表示感謝!

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:157594 發(fā)表于 2016-12-26 10:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
求串口數(shù)據(jù)波形顯示代碼,C#的!先表示感謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-1-1 15:55 | 只看該作者
該上位機(jī)是由串口和波形顯示兩部分組成。廢話少說(shuō)先上傳上位機(jī)的圖片如下:
1.串口的配置通過(guò)“端口設(shè)置”來(lái)設(shè)置串口的相應(yīng)參數(shù),“端口檢測(cè)”用來(lái)自動(dòng)檢測(cè)當(dāng)前計(jì)算機(jī)可用的串口,端口號(hào)會(huì)顯示例如“COM1 、COM2......”的端口號(hào),本上位機(jī)最大只設(shè)置到COM10。波特率可以配置“1200 2400 4800 9600.......”
“ClrWave ”按鍵用來(lái)清除已畫的波形,“ClrData”按鍵用來(lái)清除接收區(qū)和發(fā)送區(qū)的數(shù)據(jù)。數(shù)據(jù)發(fā)送區(qū)和數(shù)據(jù)接收區(qū)用來(lái)發(fā)送和接收數(shù)據(jù);
在Visual Studio 2012 菜單欄點(diǎn)擊“文件”>“新建項(xiàng)目”,創(chuàng)建Visual C#下的windows窗體應(yīng)用程序:


在窗體中上添加5個(gè)“GroupBox”控件,分別將窗體分為“端口設(shè)置”,“波形顯示”,“數(shù)據(jù)接收區(qū)”,“數(shù)據(jù)發(fā)送區(qū)”,“當(dāng)前溫度顯示”;
添加label控件顯示“端口號(hào)”,“波特率”;添加若干Button控件;添加若干TextBox控件用來(lái)數(shù)據(jù)的收發(fā);
添加checkBox控件用來(lái)設(shè)置“自動(dòng)換行”和“接收換行”;
雙擊控件可以在程序中添加相應(yīng)的代碼,另外可以使用USB轉(zhuǎn)串口模塊來(lái)測(cè)試,將串口的TX和RX用杜邦線連接,這樣串口發(fā)出的信息就能被自己接收到了。
布置好控件后如下圖:

串口部分的代碼如下:
  1. /*************************************************************************************************************
  2. 串口配置
  3. ************************************************************************************************************/
  4.         SerialPort sp = null;
  5.         bool isOpen = false;
  6.         bool isSetProperty = false;
  7.         bool Enter_flag = false;
  8.         bool Rece_flag = false;
  9.         //窗口加載
  10.         private void Form1_Load(object sender, EventArgs e)
  11.         {
  12.             this.MaximumSize = this.Size;
  13.             this.MinimumSize = this.Size;
  14.             this.MinimizeBox = false;
  15.             for (int i = 0; i < 10; i++)
  16.             {
  17.                 comboBox1.Items.Add("COM" + Convert.ToString(i + 1));
  18.             }
  19.             comboBox2.Items.Add("1200");
  20.             comboBox2.Items.Add("2400");
  21.             comboBox2.Items.Add("4800");
  22.             comboBox2.Items.Add("9600");
  23.             comboBox2.Items.Add("19200");
  24.             comboBox2.Items.Add("38400");
  25.             comboBox2.Items.Add("43000");
  26.             comboBox2.Items.Add("115200");
  27.             comboBox2.SelectedIndex = 3;
  28.         }
  29.         //設(shè)置串口屬性
  30.         void SetPortProperty()
  31.         {
  32.             sp = new SerialPort();
  33.             sp.PortName = comboBox1.Text.Trim();
  34.             sp.BaudRate = Convert.ToInt32(comboBox2.Text.Trim());
  35.             sp.StopBits = StopBits.One;
  36.             sp.Parity = Parity.None;
  37.             sp.DataBits = 8;
  38.             sp.RtsEnable = true;
  39.             sp.ReadTimeout = -1;
  40.             sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
  41.         }
  42.         //接收數(shù)據(jù)
  43.         private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
  44.         {
  45.             this.Invoke((EventHandler)(delegate
  46.             {


  47.                     try
  48.                     {
  49.                         float data;
  50.                         string str = sp.ReadExisting();
  51.                         textBox1.AppendText(str+" ");
  52.                         textBox3.Text = str;
  53.                         data = Convert.ToSingle(str);
  54.                         AddData(data);


  55.                     }
  56.                     catch (Exception)
  57.                     {
  58.                         MessageBox.Show("讀數(shù)據(jù)出錯(cuò)", "錯(cuò)誤提示!");
  59.                     }


  60.                 if (Rece_flag)
  61.                     textBox1.Text += "\r\n";


  62.                 this.textBox1.Focus();
  63.                 this.textBox1.Select(this.textBox1.TextLength, 0);
  64.                 this.textBox1.ScrollToCaret();
  65.                 sp.DiscardInBuffer();
  66.             }));
  67.         }


  68.         private void button1_Click(object sender, EventArgs e)
  69.         {
  70.             bool comExistence = false;
  71.             comboBox1.Items.Clear();
  72.             for (int i = 0; i < 10; i++)
  73.             {
  74.                 try
  75.                 {
  76.                     SerialPort sp = new SerialPort("COM" + Convert.ToString(i + 1));
  77.                     sp.Open();
  78.                     sp.Close();
  79.                     comboBox1.Items.Add("COM" + Convert.ToString(i + 1));
  80.                     comExistence = true;
  81.                 }
  82.                 catch (Exception)
  83.                 {
  84.                     continue;
  85.                 }
  86.             }
  87.             if (comExistence)
  88.             {


  89.                 comboBox1.SelectedIndex = 0;
  90.             }
  91.             else
  92.             {
  93.                 MessageBox.Show("沒(méi)有找到可用串口!", "錯(cuò)誤提示");


  94.             }
  95.         }

  96.         private void button2_Click(object sender, EventArgs e)
  97.         {
  98.             if (isOpen == false)
  99.             {
  100.                 if (!isSetProperty)
  101.                 {
  102.                     isSetProperty = true;
  103.                     SetPortProperty();
  104.                 }
  105.                 try
  106.                 {
  107.                     sp.Open();
  108.                     isOpen = true;
  109.                     button1.Enabled = false;
  110.                     button2.BackColor = Color.Red;
  111.                     button2.Text = "關(guān)閉";
  112.                 }
  113.                 catch (Exception)
  114.                 {
  115.                     isSetProperty = false;
  116.                     isOpen = false;
  117.                     MessageBox.Show("串口無(wú)效或已被占用!", "錯(cuò)誤提示");
  118.                 }
  119.             }
  120.             else
  121.             {
  122.                 try
  123.                 {
  124.                     sp.Close();
  125.                     isOpen = false;
  126.                     isSetProperty = false;
  127.                     button1.Enabled = true;
  128.                     button2.BackColor = Color.White;
  129.                     button2.Text = "開";
  130.                         }
  131.                 catch (Exception)
  132.                 {
  133.                     MessageBox.Show("串口異常斷開!", "錯(cuò)誤提示");
  134.                      }
  135.                 }
  136.         }


  137.         private void button3_Click(object sender, EventArgs e)
  138.         {
  139.             byte[] Data = new byte[1];
  140.             if (isOpen)
  141.             {
  142.                
  143.                     try
  144.                     {
  145.                         byte[] data = Encoding.Default.GetBytes(textBox2.Text);
  146.                         sp.Write(data, 0, data.Length);
  147.                     }
  148.                     catch (Exception)
  149.                     {
  150.                         MessageBox.Show("數(shù)據(jù)發(fā)送是發(fā)生錯(cuò)誤!", "錯(cuò)誤提示");
  151.                         return;
  152.                     }
  153.               
  154.                 if (Enter_flag)
  155.                     sp.Write("\r\n");
  156.                    }
  157.             else
  158.             {
  159.                 MessageBox.Show("串口未打開!", "錯(cuò)誤提示");
  160.                 return;
  161.             }
  162.         }
  163. 2.波形的顯示
  164. 初始化參數(shù):      
  165. private const int Unit_length = 50;//單位格大小
  166.          private const int StartPrint = 50;//點(diǎn)坐標(biāo)偏移量
  167.          private List<float> DataList = new List<float>();//數(shù)據(jù)結(jié)構(gòu)----線性鏈表
  168.          private Pen TablePen = new Pen(Color.FromArgb(0xff, 0xff, 0xff));//軸線顏色
  169.          private Pen LinesPen = new Pen(Color.FromArgb(0xff, 0x00, 0x00));//波形顏色
  170. 波形網(wǎng)格圖繪制:

  171. 波形的顯示,我們采用繪制直線的方式,繪制網(wǎng)格圖,使用Graphics對(duì)象的Drawline()方法.

  172. pubulic  void Drawline(Pen pen,int x1,int y1,int x2,int y2);其中,pen對(duì)象是畫線所用的畫筆,它決定了線的顏色、寬度和樣式;x1和y1的起點(diǎn)坐標(biāo),x2和y2的終點(diǎn)坐標(biāo);

  173. 繪制表格的代碼如下:

  174.         for (int i = 0; i <=10 ; i++)
  175.             {
  176.                 e.Graphics.DrawLine(TablePen, StartPrint + i * Unit_length, StartPrint - 32, StartPrint + i * Unit_length, 7* Unit_length + 18);//畫線
  177.                 gp.AddString((i * 10).ToString(), family, fontstyle, 18, new RectangleF(StartPrint + i * Unit_length - 7, 7 * Unit_length + 18 + 4, 400, 50), null);//添加文字
  178.             }
  179.             gp.AddString("時(shí)間", family, fontstyle, 18, new RectangleF(groupBox4.ClientRectangle.Width/2 - StartPrint, 7 * Unit_length+36, 400, 50), null);
  180.             ////Draw X 橫向軸繪制
  181.             for (int i = 0; i < 8; i++)
  182.             {
  183.                 e.Graphics.DrawLine(TablePen, StartPrint, i *Unit_length+18, StartPrint + 10 * Unit_length, i* Unit_length+18);//畫線
  184.                 Str = Convert.ToString((7 - i) * 10);
  185.                 if (i == 0)
  186.                     Str = "70";
  187.                 if (i == 7)
  188.                     break;
  189.                 gp.AddString(Str, family, fontstyle, 18, new RectangleF(20,  i * Unit_length+8, 400, 50), null);//添加文字
  190.             }
  191.             gp.AddString("溫", family, fontstyle, 18, new RectangleF(0,groupBox4.ClientRectangle.Height/2-StartPrint, 400, 50), null);
  192.             gp.AddString("度", family, fontstyle, 18, new RectangleF(0,groupBox4.ClientRectangle.Height /2+18-StartPrint, 400, 50), null);
  193.             e.Graphics.DrawPath(Pens.White, gp);//寫文字

  194. 畫波形圖代碼:

  195.       for (int i = 0; i < DataList.Count - 1; i++)

  196.             {

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

  198.             }

  199. 我們需要給線性鏈表datalist增加數(shù)據(jù):

  200.         void AddData(float Data)
  201.         {
  202.             DataList.Add(Data);
  203.             groupBox4.Invalidate();   
  204.         }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

板凳
ID:183035 發(fā)表于 2017-3-27 21:14 | 只看該作者
正好需要的,感謝!!!
回復(fù)

使用道具 舉報(bào)

地板
ID:183970 發(fā)表于 2017-3-27 21:29 | 只看該作者
正好需要的,感謝!!!
回復(fù)

使用道具 舉報(bào)

5#
ID:196111 發(fā)表于 2017-5-3 16:53 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

6#
ID:229375 發(fā)表于 2017-8-26 09:46 | 只看該作者
求大神解釋一下這個(gè)表格是怎么出現(xiàn)在groupBox4里面的,并且沒(méi)出出groupBox4的情況。還有g(shù)p.AddString是怎么一回事
回復(fù)

使用道具 舉報(bào)

7#
ID:278603 發(fā)表于 2018-1-22 15:19 | 只看該作者
admin 發(fā)表于 2017-1-1 15:55
該上位機(jī)是由串口和波形顯示兩部分組成。廢話少說(shuō)先上傳上位機(jī)的圖片如下:
1.串口的配置通過(guò)“端口設(shè)置” ...

有木有整個(gè)文件包
回復(fù)

使用道具 舉報(bào)

8#
ID:377298 發(fā)表于 2018-7-22 15:25 | 只看該作者
好,寫的好
回復(fù)

使用道具 舉報(bào)

9#
ID:390996 發(fā)表于 2018-8-29 09:23 | 只看該作者
有沒(méi)有完整的包啊
回復(fù)

使用道具 舉報(bào)

10#
ID:425955 發(fā)表于 2019-5-25 15:03 | 只看該作者
河邊洗腳人 發(fā)表于 2017-8-26 09:46
求大神解釋一下這個(gè)表格是怎么出現(xiàn)在groupBox4里面的,并且沒(méi)出出groupBox4的情況。還有g(shù)p.AddString是怎么 ...

你好 請(qǐng)問(wèn)這gp.的問(wèn)題你是怎么解決的?
回復(fù)

使用道具 舉報(bào)

11#
ID:414645 發(fā)表于 2020-6-2 00:52 | 只看該作者
黑好 不錯(cuò) 學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产一区二区三区四区 | 国产精品久久久久久影院8一贰佰 | 中文字幕国产精品视频 | 免费国产一区 | 国产精品久久国产精品 | 欧美精品成人一区二区三区四区 | 日韩美女一区二区三区在线观看 | 国产一级片在线观看视频 | 日韩精品在线网站 | 盗摄精品av一区二区三区 | 欧美精品 在线观看 | 日韩黄色免费 | 亚洲精品久久久久久久久久久久久 | 日韩中文字幕 | 国产亚洲网站 | 狠狠色狠狠色综合日日92 | 国产精品国产精品国产专区不片 | 免费在线a视频 | 欧美日韩亚洲国产 | 欧美精品网 | 99精品99 | 天堂网中文 | 国产在线看片 | 久久亚洲一区二区三区四区 | 国产精品婷婷 | 精品国产青草久久久久福利 | 色综合美女 | 九九热精品在线视频 | av影音资源 | 天堂资源最新在线 | 毛片一区二区三区 | 亚洲国产精品久久久久婷婷老年 | 精国产品一区二区三区四季综 | 精品国产久 | 亚洲精品黄 | 久久综合一区 | 欧美福利| 久久精品国产一区二区三区 | 久久亚洲综合 | 亚洲美女视频 | 久久久久久国产精品免费免费男同 |