1.串口编程(一)

一.一些基本的语句
1.1 将整数转化为字符串
     str = i.Tostring("x").ToUpper( );//i为整形,str为字符串,括号里的"x"代表将i转化为16进制,ToUpper()代表转化为大写
    举例:i= 255--转化为16进制的字符串0xff--转化为大写0XFF
1.2 将字符串转化为byte,byte相当于单片机中的unsigned char 
    byte[ ] buffer = new byte[1];//定义一个只含一个元素的数组buffer
    buffer  = Convert.ToByte(str,16);//将字符串转化为16进制型的Byte
    举例:str = "ab",那buffer就等于0xab
1.3 从一个长的字符串里取出一段字符串
    str2 = str1.Substring(2,2);//从str1的第3个字符开始取两个字符
    举例:str1 = "0X19",str2就等于"19"
二.串口编程准备
界面
2.1 新建两个下拉列表框,用以选择端口号和波特率
1.string[] baudrate = new string[8] { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };
2.comboBox_Baudrate.Items.AddRange(baudrate); //在波特率的下拉列表框中填入可选的波特率
3.comboBox_Baudrate.SelectedIndex = 3; //复选框选择第4个,9600
4.comboBox_Number.Items.AddRange(System.IO.Ports. SerialPort.GetPortNames()); //获取所有可用COM口5.comboBox_Number.SelectedIndex = 0; //选择下拉框第一个端口
三.打开串口按钮操作
serialPort1.BaudRate = Convert.ToInt32(comboBox_Baudrate.Text);
serialPort1.PortName = comboBox_Number.Text;
serialPort1.Open();
设置波特率以及串口号以后,打开串口
四.串口发送程序
byte[] buffer = new byte[1];
if (serialPort1.IsOpen)
{
     if (true == radioButton2.Checked)//字符单选框选中
     {
           serialPort1.WriteLine(textBox_Send.Text);//发送文本框中一行字符
      }
      else
      {
            for (i = 0; i < textBox_Send.TextLength/2; i++)
             {
                    buffer[0] = Convert.ToByte(textBox_Send.Text.Substring(i*2,  2), 16);
                   //每2个数值化为一个16进制数发送
                   serialPort1.Write(buffer, 0, 1);
             }
             if (0 != textBox_Send.TextLength % 2)
            {
                buffer[0] = Convert.ToByte(textBox_Send.Text.Substring(
                textBox_Send.TextLength- 1,1), 16);
                serialPort1.Write(buffer, 0, 1);//发送一个字节
            }
      }
五.串口接收函数
int num = serialPort1.BytesToRead;//读取串口接收缓冲区字节数
byte[] buffer = new byte[num];
if (true == radioButton4.Checked)
{
    //因为访问textBox_Receive文本框,需要访问UI,所以采用委托
    Invoke((EventHandler)(delegate 
    {textBox_Receive.AppendText(serialPort1.ReadExisting());}
    );
}
else
{
    serialPort1.Read(buffer, 0, num);
    foreach (byte b in buffer)
    {
        Invoke((EventHandler)(delegate
        {
        textBox_Receive.AppendText("0X"+b.ToString("X2")+" ");
        }
        )
        );                
    }
}      
六.说明
6.1获取串口接收区接收到数据个数: serialPort1.BytesToRead
6.2如何防止在一个控件的响应事件中调用控件时,线程报警
方法一.使用委托:委托函数格式:Invoke( (EventHandler)(delegate){函数内容});
方法二.在窗体初始化时加一句话:
6.3串口接收中断不是实时的,所以可能不是接收一个字节就进入一次接收函数
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值