需求
我們在平時使用單片機制作項目時,總是希望能夠實時顯示一些數據,并將這些數據進行處理,從而進行使用。那么上位機就必不可少了。上位機是指可以直接發出操控命令的計算機,一般是PC屏幕上顯示各種信號變化。下位機是直接控制設備獲取設備狀況的計算機,一般是單片機之類的。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序信號直接控制相應設備。下位機不時讀取設備狀態數據(一般為模擬量),轉換成數字信號反饋給上位機。簡言之如此,實際情況千差萬別,但萬變不離其宗:上下位機都需要編程,都有專門的開發系統。
在概念上,控制者和提供服務者是上位機,被控制者和被服務者是下位機,也可以理解為主機和從機的關系,但上位機和下位機是可以轉換的。
那么我今天就來制作這樣一款上位機,主要用來實現獲取開發板的數據,并進行判別,顯示不同的提示。還可以發送給單片機相關數據。
準備
- 帶串口的單片機(用來進行測試,沒有也行)
- Visual Studio 2019
- 設置波特率等串口參數
- 打開串口
- 檢測串口
- 發送數據
- 接收數據
- 調整格式
- 檢測收發數據的字節總量
- 清空接收區和發送區
- 對收到的數據進行處理
- 設置串口數據緩沖等待時間
界面設計
關鍵程序
打開串口
if (cbbComList.Items.Count <= 0)
{
MessageBox.Show("沒有發現串口,請檢查線路!");
return;
}
if (ComDevice.IsOpen == false)
{
ComDevice.PortName = cbbComList.SelectedItem.ToString();
//ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString());
ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.Text.ToString());
ComDevice.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString());
ComDevice.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString());
ComDevice.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());
time = Convert.ToInt32(cbBox_time.Text.Trim());
try
{
ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);
ComDevice.Open();
btnSend.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
btnOpen.Text = "關閉串口";
pictureBox1.BackgroundImage = Properties.Resources.green;
}
else
{
try
{
ComDevice.DataReceived -= new SerialDataReceivedEventHandler(Com_DataReceived);//取消綁定COM接收
Thread.Sleep(1000);
ComDevice.Close();
btnSend.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
btnOpen.Text = "打開串口";
pictureBox1.BackgroundImage = Properties.Resources.red;
}
cbbComList.Enabled = !ComDevice.IsOpen;
cbbBaudRate.Enabled = !ComDevice.IsOpen;
cbbParity.Enabled = !ComDevice.IsOpen;
cbbDataBits.Enabled = !ComDevice.IsOpen;
cbbStopBits.Enabled = !ComDevice.IsOpen;
cbBox_time.Enabled = !ComDevice.IsOpen;
發送數據
if (ComDevice.IsOpen)
{
try
{
ComDevice.Write(data, 0, data.Length);//發送數據
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("串口未打開", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
接收數據
//等待緩沖區數據
Thread.Sleep(time);
byte[] ReDatas = new byte[ComDevice.BytesToRead];
byte[] DIY = new byte[ComDevice.BytesToRead];
DIY[0] =0x6F;
ComDevice.Read(ReDatas, 0, ReDatas.Length);//讀取數據
if (ReDatas[0] ==0x63 )
{
MessageBox.Show("正確");
}
else
MessageBox.Show("錯誤");
//丟棄接收緩沖區數據
ComDevice.DiscardInBuffer();
this.AddData(ReDatas);//輸出數據
實現頁面
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6032文章
44525瀏覽量
633257 -
上位機
+關注
關注
27文章
930瀏覽量
54738 -
下位機
+關注
關注
0文章
93瀏覽量
18730
發布評論請先 登錄
相關推薦
使用Stellaris(群星)單片機制作自動小車
使用Stellaris(群星)單片機制作自動小車
本文講述如何使用Stellaris(群星)單片機制作自動小車
發表于 04-06 17:28
?25次下載
使用visual studio制作上位機
使用visual studio 制作上位機使用visual studio 制作上位機 1.新建工程 2.放置組件,組件,按鈕等 3.放置串口,放置定時器! 4.串口相關設置 搜索串口
發表于 05-10 11:00
?11次下載
評論