C#--01--串口通信

毕业设计是关于单片机与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 单片机发送温度数据代码:

//显示温度数据到数码管,及发送温度数据到PCvoid 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
未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值