using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Runtime.InteropServices;
namespace Adc_Display
{
public partial class Form1 : Form
{
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);//系統dll導入ini寫函數
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);//系統dll導入ini讀函數
string FileName = System.AppDomain.CurrentDomain.BaseDirectory + "data.ini";//ini文件名 獲取文件路徑
StringBuilder temp = new StringBuilder(255);//存儲讀出ini內容變量
string CurrentPortName;
public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(PortDataReceivedEvent); //串口數據接收事件
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; //禁用多線程調用,防止空間被其他線程使用
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Form1_FormClosing);
}
//窗體關閉前發送的消息
private void Form1_FormClosing(object sender,EventArgs e)
{
WritePrivateProfileString("PortData", "PortName", CurrentPortName, FileName);//窗口關閉,保存
WritePrivateProfileString("TEST", "NAME1", comboBox1.Text, FileName);
}
//預加載時獲取開啓的串口號
private void Form1_Load(object sender, EventArgs e)
{
this.Size = new Size(620, 107);//縮小
GetPrivateProfileString("PortData", "PortName", "COM1", temp, 256, FileName);//讀取ini值,默認是COM1
comboBox1.Text = temp.ToString();//初始化
}
TrackBar[] GetTrackBar()
{
return new TrackBar[] { trackBar1, trackBar2, trackBar3, trackBar4, trackBar5,
trackBar6, trackBar7, trackBar8, trackBar9, trackBar10,
};//返回一個對象數組
}
private void PortDataReceivedEvent(object sender, SerialDataReceivedEventArgs args) //串口數據接收
{
TrackBar[] MytrackBar = GetTrackBar();
byte[] Data = new byte[serialPort1.BytesToRead];
serialPort1.Read(Data, 0, Data.Length);//讀
foreach (byte MyData in Data)
{
for (int i = 1; i < 10; i++)
{
MytrackBar[10 - i].Value = MytrackBar[10 - i - 1].Value;
}
trackBar1.Value = (int)MyData;
string str = MyData.ToString("x");
//textBox1.Text = "0x" + (str.Length == 1 ? "0" + str : str);
}
}
//開啓或關閉串口
private void button1_Click(object sender, EventArgs e)
{
//關閉串口的操作
if (serialPort1.IsOpen)//判斷
{
groupBox2.Visible = false; //第二個框框不可見
this.Size = new Size(620, 107); //縮小
serialPort1.Close();//此處可不加try,catch
TrackBar[] MyProgeressBar = GetTrackBar();
foreach (TrackBar theBar in MyProgeressBar)//遍歷,每個trackBar歸零
{
theBar.Value = 0;
}
button1.Text = "打開串口";
}
//打開串口的操作
else
{
try
{
serialPort1.PortName = comboBox1.Text;//串口號
serialPort1.Open(); //打開
CurrentPortName = comboBox1.Text;
groupBox2.Visible = true; //第二個框框可見
this.Size = new Size(620, 436); //放大
button1.Text = "關閉串口";//按鍵標題
}
catch
{
MessageBox.Show("串口打開錯誤", "錯誤");
}
}
}
}
}