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

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

被折叠的 条评论
为什么被折叠?



