加入指示灯数据反馈

在这里插入图片描述

namespace Reply
{
    public partial class Form1 : Form
    {
        byte DataSended = 0;
        byte[] DataToSend = new byte[] { 0x01, 0x02, 0x03 };                                               //数据发送
        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPortDataReceived);       //添加串口中断事件
        }

        private void SetOvlShape(int which)                                                               //填充颜色   
        {
            switch(which)
            {
                case 1:
                    ovalShape1.FillColor = Color.Green;
                    ovalShape2.FillColor = Color.Red;
                    ovalShape3.FillColor = Color.Red;
                    break;
                case 2:
                    ovalShape1.FillColor = Color.Red;
                    ovalShape2.FillColor = Color.Green;
                    ovalShape3.FillColor = Color.Red;
                    break;
                case 3:
                    ovalShape1.FillColor = Color.Red;
                    ovalShape2.FillColor = Color.Red;
                    ovalShape3.FillColor = Color.Green;
                    break;
                case 4:
                    ovalShape1.FillColor = Color.Green;
                    ovalShape2.FillColor = Color.Green;
                    ovalShape3.FillColor = Color.Green;
                    break;
                default:
                    break;
            }
        }

        private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte DataReceived = (byte)(~serialPort1.ReadByte());                                           //单字节读取
            try
            {
                timer1.Stop();                                                                          //关定时器
            }
            catch { }
            if (DataSended == 0)                                                                        //防止下位机乱发,不处理
                return;
            SetOvlShape(DataReceived);
            try
            {
                if (DataToSend[DataSended - 1] == DataReceived)                                            //校验数据
                {
                    MessageBox.Show("数据校验成功", "成功!");                                              //弹出提示
                }
                else
                {
                    MessageBox.Show("数据校验失败", "数据校验失败");
                }
            }
            catch
            {

            }
        }

        private void button1_Click(object sender, EventArgs e)                                          //打开/关闭串口
        {
            if (serialPort1.IsOpen)                                                                     //一堆处理……
            {
                try
                {
                    serialPort1.Close();
                }
                catch
                {

                }
                button1.Text = "打开串口";
            }
            else
            {
                try
                {
                    serialPort1.PortName = comboBox1.Text;                                              //串口号    
                    serialPort1.Open();                                                                 //打开
                }
                catch
                {
                    MessageBox.Show("串口打开错误,请检查", "串口");
                }
                button1.Text = "关闭串口";
            }
        }

        private void SendDataToSerialPort(SerialPort MyPort, byte DataToSend)                            //单字节发送数据    
        {
            byte[] DatasToWrite = new byte[] { DataToSend };                                               //数据包
            if (serialPort1.IsOpen)
            {
                try
                {
                    MyPort.Write(DatasToWrite, 0, 1);                                                  //发数据
                    timer1.Interval = 3 * 1000;                                                        //设定超时时间
                    timer1.Start();                                                                    //定时器
                }
                catch
                {
                    MessageBox.Show("串口数据写入错误", "错误");
                }
            }
        }

        private void Button_Click(object sender, EventArgs e)                                         //三个按键共用一个处理函数
        {
            Button MyButton = (Button)sender;                                                         //通过tag属性来区分
            DataSended = Convert.ToByte(MyButton.Tag);
            SendDataToSerialPort(serialPort1, DataToSend[DataSended - 1]);                             //发数据
        }

        private void timer1_Tick(object sender, EventArgs e)                                          //定时器事件
        {
            string MyStr = DataSended.ToString() + "路数据校验超时,请检查";                          //Messagebox内容 
            timer1.Stop();
            MessageBox.Show(MyStr, "错误");
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值