資源簡介
串口讀取電子秤的重量
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.IO.Ports;
using?System.Linq;
using?System.Text;
using?System.Threading;
using?System.Threading.Tasks;
using?System.Windows.Forms;
namespace?SerialPortDemo
{
????public?partial?class?Form1?:?Form
????{
????????private?SerialPort?com;
????????public?Form1()
????????{
????????????InitializeComponent();
????????}
????????private?void?GetAutoCom()
????????{
????????????//獲取本地配置文件(注冊表文件)????????
????????????Microsoft.Win32.RegistryKey?hklm?=?Microsoft.Win32.Registry.LocalMachine;
????????????//讀取HARDWARE節點的鍵值
????????????Microsoft.Win32.RegistryKey?software11?=?hklm.OpenSubKey(“HARDWARE“);
????????????//打開“HARDWARE“子鍵
????????????Microsoft.Win32.RegistryKey?software?=?software11.OpenSubKey(“DEVICEMAP“);
????????????Microsoft.Win32.RegistryKey?sitekey?=?software.OpenSubKey(“SERIALCOMM“);
????????????//獲取當前子鍵
????????????string[]?Str2?=?sitekey.GetValueNames();
????????????//獲得當前子鍵存在的鍵值
????????????int?i;
????????????for?(i?=?0;?i?????????????{
????????????????cmbCOMPort.Items.Add(sitekey.GetValue(Str2[i]));
????????????}
????????}
????????private?void?Form1_Load(object?sender?EventArgs?e)
????????{
????????????GetAutoCom();
????????????com?=?new?SerialPort(cmbCOMPort.Text);?//實例化SerialPort并設置COM口
????????????com.BaudRate?=?9600;//波特率
????????????com.Parity?=?Parity.None;//無奇偶校驗位
????????????com.StopBits?=?StopBits.Two;//兩個停止位
????????????com.Handshake?=?Handshake.RequestToSend;//控制協議
????????????com.ReceivedBytesThreshold?=?13;//設置?DataReceived?事件發生前內部輸入緩沖區中的字節數我這里是13字節為一組
????????????com.Open();?????????????????//打開串口??
????????????com.DataReceived?+=?new?SerialDataReceivedEventHandler(Com_DataReceived);
????????}
????????///?
????????///?監聽串口數據線程
????????///?
????????///?
????????///?
????????private?void?Com_DataReceived(object?sender?SerialDataReceivedEventArgs?e)
????????{
????????????Thread.Sleep(500);//線程休眠500毫秒,方便接收串口的全部數據
????????????try
????????????{
????????????????if?(com.IsOpen)
????????????????{
????????????????????byte[]?readBuffer?=?new?byte[com.ReadBufferSize?+?1];
????????????????????try
????????????????????{
????????????????????????int?count?=?com.Read(readBuffer?0?com.ReadBufferSize);????????//讀取串口數據(監聽)
????????????????????????String?SerialIn?=?System.Text.Encoding.ASCII.GetString(readBuffer?0?count);//將字節數組解碼為字符串
????????????????????????if?(count?!=?0)
????????????????????????{
????????????????????????????//這里強調一下線程里不可以直接對UI進行賦值,只能使用委托操作控件
????????????????????????????this.BeginInvoke(new?System.Threading.ThreadStart(delegate?()
????????????????????????????{
????????????????????????????????richTextBox1.Text?=?SerialIn;
????????????????????????????}));
????????????????????????}
????????????????????}
????????????????????
評論
共有 條評論