標(biāo)題: 單片機(jī)串口通訊收發(fā)數(shù)據(jù)C#上位機(jī)界面顯示出來(lái) [打印本頁(yè)]
作者: XKX744476583 時(shí)間: 2019-5-17 15:35
標(biāo)題: 單片機(jī)串口通訊收發(fā)數(shù)據(jù)C#上位機(jī)界面顯示出來(lái)
如果,翻看我之前的博客,會(huì)找到一篇用I/O模擬IIC通信的程序文章。好吧,如果找不到可以點(diǎn)擊
這里,這里就不在贅述了,系統(tǒng)也已經(jīng)完全調(diào)試通過(guò)了。
今天的任務(wù)是,把測(cè)試得到的數(shù)據(jù)在上位機(jī)的界面上顯示出來(lái),于是鍵盤手花了兩天的時(shí)間模仿著巨人的肩膀通過(guò)了用C#編寫的界面程序,界面很簡(jiǎn)單就像下面顯示的一樣。
0.png (1.69 KB, 下載次數(shù): 129)
下載附件
2019-5-17 23:41 上傳
下面就一步一步給大伙展示一下我的程序吧。
C#非常的強(qiáng)大而且友好,串口的通信可以通過(guò)編程環(huán)境(這里我用的是Visual Studio 2010),如果有需要的話可以給我信息,我有完整版的安裝包。如下圖,簡(jiǎn)單的調(diào)用和選擇就完成了串口的基本配置。
0.png (5.89 KB, 下載次數(shù): 124)
下載附件
2019-5-17 23:41 上傳
0.png (13.07 KB, 下載次數(shù): 112)
下載附件
2019-5-17 23:42 上傳
下面主要就是編程的問(wèn)題了,在窗體Load的進(jìn)程中可以完成串口的啟動(dòng)
而后就是讀取數(shù)據(jù)的操作,這時(shí)候用到事件
1 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
在這個(gè)事件里面編程就可以了,但是在對(duì)窗體內(nèi)文本進(jìn)行操作的時(shí)候會(huì)發(fā)現(xiàn)出現(xiàn)了線程的沖突和錯(cuò)誤。網(wǎng)上給出的一種解決方法是采用代理的方式具體的程序如下:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.IO.Ports;
- using System.Net.Http;
- using System.Collections;
- namespace SerialPortDataUploader
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void comboBoxSerialPort_SelectedIndexChanged(object sender, EventArgs e)
- {
- serialPort1.PortName = comboBoxSerialPort.Items[comboBoxSerialPort.SelectedIndex].ToString();
- }
- private void comboBoxSerialPort_MouseClick(object sender, MouseEventArgs e)
- {
- comboBoxSerialPort.Items.Clear();
- comboBoxSerialPort.Items.AddRange(SerialPort.GetPortNames());
- }
- private void listBoxLog_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (listBoxLog.SelectedItem != null)
- textBoxLog.Text = listBoxLog.SelectedItem.ToString();
- }
- Queue<char> DataQueue = new Queue<char>();
- volatile private int lightZ = 50, tempZ = 28, wetZ = 30;
- volatile private int lightX = 50, tempX = 28, wetX = 30;
- volatile private int lightL = 50, tempL = 28, wetL = 30;
- private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
- {
- char[] tmp = new char[1000];
- int count = serialPort1.BytesToRead;
- serialPort1.Read(tmp, 0, count);
- for (int i = 0; i < count; i++)
- DataQueue.Enqueue(tmp[i]);
- while (DataQueue.Count >= 11)
- {
- switch (DataQueue.Peek())
- {
- case 'z':
- case 'l':
- case 'x':
- {
- char[] tmp1 = new char[100];
- for (int i = 0; i < 11; i++)
- tmp1[i] = DataQueue.Dequeue();
- try
- {
- int light = (tmp1[2] - 0x30) * 10 + (tmp1[3] - 0x30);
- int temp = (tmp1[5] - 0x30) * 10 + (tmp1[6] - 0x30);
- int wet = (tmp1[8] - 0x30) * 10 + (tmp1[9] - 0x30);
- switch (tmp1[0])
- {
- case 'z': lightZ = light; tempZ = temp; wetZ = wet; break;
- case 'x': lightX = light; tempX = temp; wetX = wet; break;
- case 'l': lightL = light; tempL = temp; wetL = wet; break;
- }
- }
- catch (Exception) { }
- break;
- }
- default:
- DataQueue.Dequeue();
- break;
- }
- }
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- comboBoxSerialPort.Items.Clear();
- comboBoxSerialPort.Items.AddRange(SerialPort.GetPortNames());
- }
- private void buttonConnect_Click(object sender, EventArgs e)
- {
- serialPort1.Open();
- buttonConnect.Enabled = false;
- comboBoxSerialPort.Enabled = false;
- labelStatu.ForeColor = Color.Green;
- timer1.Start();
- }
- private string HTTPGet(string url)
- {
- using (var client = new HttpClient())
- {
- var responseString = client.GetStringAsync(url);
- return responseString.Result;
- }
- }
- private async Task<string> HTTPPost(string url, Dictionary<string, string> values)
- {
- using (var client = new HttpClient())
- {
- var content = new FormUrlEncodedContent(values);
- var response = await client.PostAsync(url, content);
- var responseString = await response.Content.ReadAsStringAsync();
- return responseString.ToString();
- }
- }
- delegate void listBoxLogAddMessage_Callback(string mwssage);
- private void listBoxLogAddMessage(string message)
- {
- if (listBoxLog.InvokeRequired)
- {
- listBoxLogAddMessage_Callback d = new listBoxLogAddMessage_Callback(listBoxLogAddMessage);
- this.Invoke(d, new object[] { message });
- }
- else
- {
- listBoxLog.Items.Add(message);
- listBoxLog.SelectedIndex = listBoxLog.Items.Count - 1;
- }
- }
- bool Timer1Flag = false;
- int timer = 0, TimeSet = 5;
- private void timer1_Tick(object sender, EventArgs e)
- {
- timer++;
- if (Timer1Flag)
- return;
- string tmp = HTTPGet(BaseURL + "API.aspx?api=contralget1");
- try
- {
- TimeSet = int.Parse(tmp);
- }
- catch (Exception) { }
- if (TimeSet > 0 && timer >= TimeSet)
- {
- timer -= TimeSet;
- Timer1Flag = true;
- try
- {
- string url = BaseURL + "API.aspx?api=upload&lightZ={LIGHTZ}&lightX={LIGHTX}&lightL={LIGHTL}&tempZ={TEMPZ}&tempX={TEMPX}&tempL={TEMPL}&wetZ={WETZ}&wetX={WETX}&wetL={WETL}".Replace("{LIGHTZ}", lightZ.ToString()).Replace("{LIGHTX}", lightX.ToString());
- url = url.Replace("{LIGHTL}", lightL.ToString()).Replace("{TEMPZ}", tempZ.ToString()).Replace("{TEMPX}", tempX.ToString()).Replace("{TEMPL}", tempL.ToString()).Replace("{WETZ}", wetZ.ToString()).Replace("{WETX}", wetX.ToString()).Replace("{WETL}", wetL.ToString());
- string message = HTTPGet(url);
- if (!message.Equals("{\"statu\":\"ok\"}"))
- listBoxLogAddMessage(DateTime.Now.ToString() + " 服務(wù)器返回異常:" + message);
- else
- listBoxLogAddMessage(DateTime.Now.ToString() + " 已上傳至服務(wù)器。");
- }
- catch (Exception ext)
- {
- listBoxLogAddMessage(DateTime.Now.ToString() + " 上傳至服務(wù)器失敗:" + ext.Message);
- }
- Timer1Flag = false;
- }
- }
- }
- }
復(fù)制代碼全部資料51hei下載地址:
EngineeringPractice20171_ServerAndUploader-master.zip
(28.48 KB, 下載次數(shù): 252)
2019-5-17 15:33 上傳
點(diǎn)擊文件名下載附件
串口數(shù)據(jù)收發(fā)
下載積分: 黑幣 -5
作者: lsf002 時(shí)間: 2019-5-31 17:15
謝謝分享 好資料,51黑有你更精彩!!!
作者: 代碼狗帶 時(shí)間: 2019-7-24 09:39
不錯(cuò)
作者: jeeseliu 時(shí)間: 2019-11-15 13:05
謝謝分享
作者: 古樂(lè)之聲 時(shí)間: 2021-5-6 16:58
樓主可以發(fā)一下安裝包給大家嗎?
作者: 335872522 時(shí)間: 2023-8-1 18:25
下載的文件和展示的文件是2個(gè)不同的,各位要下載的注意下,不是上面文檔介紹的溫濕度!!!
作者: 愛(ài)學(xué)習(xí)的小菜 時(shí)間: 2023-11-14 21:39
感謝樓主分享,最近要做項(xiàng)目剛好要學(xué)習(xí)使用
作者: qsssuv 時(shí)間: 2023-11-27 09:16
STC-ISP軟件有將數(shù)據(jù)接收到文件的功能,你可以試一下。
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
草草在线视频
|
日韩网站在线观看
|
www四虎|
精品视频网站
|
欧美精品福利
|
久久久久久久久国产精品
|
91国在线
|
九九九热
|
久久天天躁狠狠躁夜夜躁2014
|
天天射一射
|
国产人成一区二区三区影院
|
国产成人精品一区二区
|
久久少妇|
理论片中文字幕
|
久久综合影院
|
男女激情视频网站
|
日韩欧美亚洲国产
|
亚洲精品欧美
|
色中色av|
日批视频免费在线观看
|
国产精品久久久久久久久借妻
|
国产一区二区在线观看视频
|
日韩精品一区二区视频
|
午夜大片
|
91啦丨九色丨刺激
|
中文字幕在线观
|
国产午夜视频
|
日韩精品成人
|
欧美精品久久99
|
97在线播放
|
一级黄色在线观看
|
国产日韩在线播放
|
国产成人精品一区
|
在线观看网址你懂的
|
日韩色在线|
亚洲精品999|
久久久久国产精品视频
|
三级视频在线观看
|
日韩福利一区
|
九月丁香婷婷
|
四虎av
|