毕业设计是关于单片机与C#桌面软件串口通信,学习了一下网上关于C#串口通信相关的知识,特整理如下。
1在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等。
主要方法:
string[] ports = SerialPort.GetPortNames();//获取端口号:
serialPort1.PortName = comboBox1.Text;//设置COM口
serialPort1.BaudRate = Int32.Parse(comboBox2.Text);//设置波特率
serialPort1.StopBits = System.IO.Ports.StopBits.One;//设置停止位
serialPort1.DataBits = 8;//设置数据位
serialPort1.Parity = System.IO.Ports.Parity.None;//设置奇偶校验位
serialPort1.Open();//打开串口
serialPort1.Close();//关闭串口
serialPort1.IsOpen);//判断是否打开串口
serialPort1.Write("1");//向串口发送数据
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//申明串口接收处理函数
//串口数据处理函数
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
System.Threading.Thread.Sleep(100);//延时100ms等待接收完数据
Byte[] RecData = new Byte[4];
try
{
serialPort1.Read(RecData, 0, 4);
//传递过来的数据形式为02050600的形式,如下进行处理
String str = ByteToHexStr(RecData)[1].ToString() + ByteToHexStr(RecData)[3].ToString() + ByteToHexStr(RecData)[5].ToString();
a = float.Parse(str);//String类型转float
Console.WriteLine("接收到的数据:" + a);
insertTemperature();//将温度数据插入mysql数据库
drawTemperature();//绘制曲线
}
catch (Exception)
{
MessageBox.Show("接收错误!");
}
serialPort1.DiscardInBuffer();
this.Invoke(new Delelabel(chart1_update));
serialPort1.DiscardInBuffer();
}
c#通过DataReceived接收串口数据需要转换16进制
public static string ByteToHexStr(byte[] bytes) //函数,字节数组转16进制字符串
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
2 单片机发送温度数据代码:
//显示温度数据到数码管,及发送温度数据到PC端
void display(uint temp)
{
uchar bai,shi,ge;
bai=temp/100;//百位数字
shi=temp%100/10;//十位数字
ge=temp%100%10;//个位数字
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(3);
dula=1;
P0=table1[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(3);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(3);
//简单的延迟
count++;
if(count==200){
//send_temperature(temp);
send_temperature(bai);//发送温度数据
send_temperature(shi);
send_temperature(ge);
count=0;
}
//send_temperature(shi);
//send_temperature(ge);
}
//发送数据
void send_temperature(uchar tempData){
SBUF=tempData;//将数据传递到缓存区
while(!TI); //检测数据是否发送完成
TI=0;//清0,发送下一帧的数据
}
3 运行效果:
C#端发送数据报警运行结果
附C#桌面软件代码和单片机烧代码。
http://download.csdn.net/detail/btwangzhi/9836681
未完待续。。。