IR_SC2红外线发射模拟器

该程序是一个红外线发射模拟器,用于模拟和处理红外信号。它通过串行端口与设备通信,自动获取并显示可用串行口,并允许用户配置波特率、数据位等参数。当接收到特定的红外信号时,程序会识别并回应相应的地址码,如F15、Factory、HDMI等。用户还可以手动输入16进制字符串进行发送。此外,程序提供了保存和加载配置的功能,方便用户管理和重复使用设置。

using System;
using System.Windows.Forms;

namespace IR_SC2红外线发射模拟器
{
    public partial class Form1 : Form
    {
        System.IO.Ports.SerialPort sp_ir;
        byte[] data = new byte[6];
        public Form1()
        {
            InitializeComponent();
        }

        private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox1 ab = new AboutBox1();
            ab.Show();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            config_json.config_json_readall();
            foreach (string com in System.IO.Ports.SerialPort.GetPortNames()) //自动获取串行口名称
            {
                IR_SerialPort_PortName.Items.Add(com);
            }

            IR_SerialPort_PortName.Text = config_json.IR_SerialPort_PortName;
            IR_SerialPort_BaudRate.Text = config_json.IR_SerialPort_BaudRate;
            IR_SerialPort_DataBits.Text = config_json.IR_SerialPort_DataBits;
            AssemblyInformation ass = new AssemblyInformation();
            ts1.Text = ass.AssemblyCompany;
            ts2.Text = ass.AssemblyCopyright;
            ts3.Text = ass.AssemblyVersion;
            //ts3.Text = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
        }

        private void btn_open_Click(object sender, EventArgs e)
        {
            sp_ir = new System.IO.Ports.SerialPort();
            sp_ir.PortName = IR_SerialPort_PortName.Text;
            sp_ir.BaudRate = Convert.ToInt32( IR_SerialPort_BaudRate.Text);
            sp_ir.DataBits = Convert.ToInt32(IR_SerialPort_DataBits.Text);
            sp_ir.DataReceived += Sp_ir_DataReceived;
            try { sp_ir.Open();
                addmemo(IR_SerialPort_PortName.Text+"打开成功");
            } catch {
                MessageBox.Show("打开端口失败!");
            }
        }

        private void Sp_ir_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            System.IO.Ports.SerialPort sp = (System.IO.Ports.SerialPort)sender;
            Byte[] receivedData = new Byte[sp.BytesToRead]; //创建接收字节数组 
            sp.Read(receivedData, 0, receivedData.Length);  //读取数据 

            string showstr = byteToHexStr(receivedData);
           // showstr = ;

            addmemo("收到数据:" + showstr);

            if (receivedData.Length == 6) {

                if (showstr.Contains(  Class_IR.IR_SendStr_F15)) addmemo("地址码1:F15");
                if (showstr.Contains(  Class_IR.IR_SendStr_Factory)) addmemo("地址码2:工厂模式");
                if (showstr.Contains(Class_IR.IR_SendStr_HDMI)) addmemo("地址码3:HDMI");
                if (showstr.Contains(Class_IR.IR_SendStr_F10)) addmemo("地址码4:F10");
                if (showstr.Contains(  Class_IR.IR_SendStr_OK)) addmemo("地址码5:OK");

                if (showstr.Contains(  Class_IR.IR_SendStr_A6)) addmemo("地址码6");
                if (showstr.Contains(  Class_IR.IR_SendStr_A7)) addmemo("地址码7");
                if (showstr.Contains(  Class_IR.IR_SendStr_A8)) addmemo("地址码8");
                if (showstr.Contains(  Class_IR.IR_SendStr_A9)) addmemo("地址码9");
                if (showstr.Contains(  Class_IR.IR_SendStr_A10)) addmemo("地址码10");

                if (rb_ok.Checked)
                {
                    addmemo("回复:" + Class_IR.IR_Reply_OK);
                    byte[] Reply = hexStringToBytes(Class_IR.IR_Reply_OK);
                    sp.Write(Reply, 0, Reply.Length);
                }
                else
                {
                    addmemo("回复:" + Class_IR.IR_Reply_NG);
                    byte[] Reply = hexStringToBytes(Class_IR.IR_Reply_NG);
                    sp.Write(Reply, 0, Reply.Length);
                }
                addmemo("-----------------------------");
            }

        }
        public static string byteToHexStr(byte[] bytes)
        {
            string returnStr = "";
            if (bytes != null)
            {
                for (int i = 0; i < bytes.Length; i++)
                {
                    returnStr += bytes[i].ToString("X2") + " ";
                }
            }
            return returnStr;
        }

        private void addmemo(string v)
        {
            tb_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff: ")+ v+"\r\n");
        }

        private void btn_save_Click(object sender, EventArgs e)
        {
            string json = System.IO.File.ReadAllText(config_json.config_file_path);
            dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

            jsonObj["IR_SerialPort_PortName"] = IR_SerialPort_PortName.Text;
            jsonObj["IR_SerialPort_BaudRate"] = IR_SerialPort_BaudRate.Text;
            jsonObj["IR_SerialPort_DataBits"] = IR_SerialPort_DataBits.Text;


            string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
            System.IO.File.WriteAllText(config_json.config_file_path, output);
            MessageBox.Show("保存成功");
        }
        public byte[] hexStringToBytes(String hexString)
        {
            if (hexString == null || hexString.Equals(""))
            {
                return null;
            }
            hexString = hexString.ToUpper().Replace(" ", "");
            int length = hexString.Length / 2;
            char[] hexChars = hexString.ToCharArray();
            byte[] d = new byte[length];
            for (int i = 0; i < length; i++)
            {
                int pos = i * 2;
                d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

            }
            return d;
        }


        private byte charToByte(char c)
        {
            return (byte)"0123456789ABCDEF".IndexOf(c);
        }

        private void btn_close_Click(object sender, EventArgs e)
        {
            if (sp_ir.IsOpen)
            {
                sp_ir.Close();
                addmemo("端口已关闭");
            }
            else {
                addmemo("端口原来就是关闭的");
            }
               
        }

        private void btn_send_Click(object sender, EventArgs e)
        {
            if (sp_ir.IsOpen == false) { btn_open_Click(null, null); }

            if (sp_ir.IsOpen)
            {
                byte[] data = hexStringToBytes(tb_hexstring.Text);
                sp_ir.Write(data, 0, data.Length);
                addmemo("手动发送:"+tb_hexstring.Text);
            }                
        }
    }
}
 

Form1_Designer.cs

namespace IR_SC2红外线发射模拟器
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
      &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zybpub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值