51单片机与下位机通信,使用C#语言

51单片机与上位机通信,使用C#语言
我用c#编写了一个小程序,想让它与单片机通信,并把单片机键盘扫描的键值通过串口传给上位机,发1时led1灯亮,发0时灯灭,但是我发出去1时灯没有反应,也接受不到键值;当我把串口的2,3脚相连是,发送数据又可以接到,这是为什么呀?那位朋友可以指点一下,这是代码
  private void Form1_Load(object sender, EventArgs e)
  {
  int i = 0;
  string[] portname = SerialPort.GetPortNames();
  foreach (string port in portname)
  {
  CuankoucomboBox.Items.Add(port);
  i++;
  }

  if (i > 0)
  {
  CuankoucomboBox.SelectedIndex = 0;
  }
  BotecomboBox.SelectedIndex = BotecomboBox.Items.IndexOf("9600");//波特率设为9600
  Openbutton.Text = "打开串口";
  sendbutton.Enabled = false;
  serialPort1.Close();

   
   
   
  }

  private void Openbutton_Click(object sender, EventArgs e)
  {
  if (Openbutton.Text == "打开串口")
  {
  try
  {
  Openbutton.Text = "关闭串口";
  sendbutton.Enabled = true;
  serialPort1.PortName = CuankoucomboBox.SelectedItem.ToString();
  serialPort1.BaudRate = Convert.ToInt32(BotecomboBox.SelectedItem);//设置波特率和把串口名字赋给serailport控件
  serialPort1.DataBits = 8;//传输数据的长度
  serialPort1.StopBits = StopBits.One;//使用停止位为1位
  serialPort1.Parity = Parity.None;//不使用奇偶校验位
  serialPort1.Open();//打开串口
  serialPort1.DiscardInBuffer();
  serialPort1.DiscardOutBuffer();//释放缓冲区的数据
  }
  catch(System.IO.IOException)
  {
  MessageBox.Show("串口不存在,请选择正确串口");
  Openbutton.Text = "打开串口";
   
  }


  }
  else if(Openbutton.Text=="关闭串口")
  {
  try
  {
  Openbutton.Text = "打开串口";
  sendbutton.Enabled = false;
  serialPort1.DiscardInBuffer();
  serialPort1.DiscardOutBuffer();//释放缓冲区的数据
  serialPort1.Close();
  }
  catch (System.InvalidOperationException)
  {
   
  Openbutton.Text = "打开串口";
  serialPort1.Close();
  }

  }
  }
  Int32 receivelength;
  private void sendbutton_Click(object sender, EventArgs e)
  {
   
   
  byte[] data = Encoding.Unicode.GetBytes(sendtextBox.Text);
  serialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312");//如果发中文必须有这一句
  receivelength = 0;
  serialPort1.Write(sendtextBox.Text);//发送数据
   
  serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//注册DataReceived事件
   


  }

  void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//DataReceived委托事件