⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 基于51单片机的键盘无线通信控制小车
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;

namespace xiaoche
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_OpenSerial_Click(object sender, EventArgs e)
        {
            bool flag = true;
            while (flag == true)
            {
                flag = false;
                try
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.Close();
                        button_OpenSerial.Text = "打开串口";
                    }
                    else
                    {
                        if (comboBox_PortName.SelectedItem != null)
                            serialPort1.PortName = (string)comboBox_PortName.SelectedItem;
                        serialPort1.Open();
                        button_OpenSerial.Text = "关闭串口";
                    }
                }
                catch
                {
                    if (MessageBox.Show("无法打开串口!", "ERROR!", MessageBoxButtons.RetryCancel,
                        MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Retry)

                        flag = true;
                }
            }
        }
        private Thread demoThread = null;
        delegate void SetTextCallback(string text);
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //int temp;
            //while ((temp = serialPort1.ReadByte()) != -1)
            //{
            //    richTextBox_Received.AppendText(temp.ToString());
            //}
            //richTextBox_Received.AppendText("aa");
            //Thread.Sleep(100);
            this.demoThread =
                new Thread(new ThreadStart(this.ThreadProcSafe));

            this.demoThread.Start();
        }
        private void ThreadProcSafe()
        {
            int temp;
            if ((temp = serialPort1.ReadByte()) != -1)
                this.SetText(" " + Convert.ToString(temp, 16));
        }
        private void SetText(string text)
        {
            // InvokeRequired required compares the thread ID of the
            // calling thread to the thread ID of the creating thread.
            // If these threads are different, it returns true.
            if (this.richTextBox_Received.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.richTextBox_Received.AppendText(text);
            }
        }

        private void button_Clear_Click(object sender, EventArgs e)
        {
            richTextBox_Received.Clear();
        }

        private void button_Send_Click(object sender, EventArgs e)
        {

            if (serialPort1.IsOpen)
            {
                byte[] writebyte = { 0x55, 0xaa, 0x01 };
                List<byte> ww = new List<byte>(writebyte);
                string[] splitstr = new string[] { textBox_data.Text.Substring(0, 2), textBox_data.Text.Substring(2, 2) };
                switch (Convert.ToByte(comboBox_Mode.SelectedValue))
                {
                    case 1:
                        ww.Add(0x01);
                        ww.Add(0x01);
                        //writebyte
                        break;
                    case 2:
                        ww.Add(0x02);
                        ww.Add(0x02);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 3:
                        ww.Add(0x02);
                        ww.Add(0x03);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 4:
                        ww.Add(0x01);
                        ww.Add(0x04);
                        break;
                    case 5:
                        ww.Add(0x02);
                        ww.Add(0x05);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 6:
                        ww.Add(0x02);
                        ww.Add(0x06);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 7:
                        ww.Add(0x02);
                        ww.Add(0x07);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 8:
                        ww.Add(0x03);
                        ww.Add(0x07);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 9:
                        break;
                    default:
                        break;
                }
                try
                {
                    serialPort1.Write(ww.ToArray(), 0, ww.Count);
                }
                catch
                {
                    MessageBox.Show("ERROR!");
                }
            }
            else
            {
                MessageBox.Show("请打开串口!");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“modeDataSet.模式”中。您可以根据需要移动或移除它。
            this.模式TableAdapter.Fill(this.modeDataSet.模式);
            try
            {
                textBox_data.Text = "01 d0 01 d0";
                comboBox_PortName.SelectedText = "COM1";
                serialPort1.PortName = "COM1";
                serialPort1.Open();
                button_OpenSerial.Text = "关闭串口";
            }
            catch
            {
                MessageBox.Show("无法打开COM1!");
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            //switch(e.KeyValue)
            //    case 
            //serialPort1.Write(new byte[] { 0x55, 0xaa, 0x01, 0x02, 0x02, 0xf0 }, 0, 5); 
            //richTextBox_Received.AppendText(e.KeyValue.ToString());
        }

        private void richTextBox_Received_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                //richTextBox_Received.AppendText(e.KeyValue.ToString());
                byte[] writebyte = { 0x55, 0xaa, 0x01 };
                List<byte> ww = new List<byte>(writebyte);
                string[] splitstr = textBox_data.Text.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
                //textBox_data.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                switch (e.KeyValue)
                {
                    case 37:
                        ww.Add(0x05);
                        ww.Add(0x08);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                            ww.Add(Convert.ToByte(splitstr[2], 16));
                            ww.Add(Convert.ToByte(splitstr[3], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        //serialPort1.Write(new byte[] { 0x55, 0xaa, 0x01, 0x03, 0x08, 0xff, Convert.ToByte(textBox_data.Text, 16) }, 0, 7);
                        break;
                    case 38:
                        ww.Add(0x03);
                        ww.Add(0x03);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 39:
                        ww.Add(0x05);
                        ww.Add(0x08);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[2], 16));
                            ww.Add(Convert.ToByte(splitstr[3], 16));
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));

                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 40:
                        ww.Add(0x03);
                        ww.Add(0x02);
                        if (splitstr.Length >= 2)
                        {
                            ww.Add(Convert.ToByte(splitstr[0], 16));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 81:
                        ww.Add(0x03);
                        ww.Add(0x03);
                        if (splitstr.Length >= 2)
                        {
                            textBox_data.Text = Convert.ToString(Convert.ToInt32(splitstr[0], 16) + 1, 16) + splitstr[1];
                            ww.Add((byte)(Convert.ToByte(splitstr[0], 16) + 1));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 87:
                        ww.Add(0x03);
                        ww.Add(0x03);
                        if (splitstr.Length >= 2)
                        {
                            textBox_data.Text = Convert.ToString(Convert.ToInt32(splitstr[0], 16) - 1, 16) + splitstr[1];
                            ww.Add((byte)(Convert.ToByte(splitstr[0], 16) - 1));
                            ww.Add(Convert.ToByte(splitstr[1], 16));
                        }
                        else
                        {
                            MessageBox.Show("请输入PWM值");
                        }
                        break;
                    case 83:

                        //serialPort1.Write(new byte[] { 0x55, 0xaa, 0x01, 0x03, 0x02, 0x00, 0xee }, 0, 7);
                        //Thread.Sleep(250);
                        ww.Add(0x01);
                        ww.Add(0x04);
                        break;
                }
                serialPort1.Write(ww.ToArray(), 0, ww.Count);
            }
            catch
            {
                MessageBox.Show("ERROR!");
            }
        }

        private void richTextBox_Received_KeyUp(object sender, KeyEventArgs e)
        {

        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -