久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5762|回復: 3
打印 上一主題 下一主題
收起左側

c#寫的串口設置LoRa模組的上位機源碼

[復制鏈接]
跳轉到指定樓層
樓主
程序的運行界面:




全部資料51hei下載地址:
5、COM_LoRa模塊設置.zip (3.62 MB, 下載次數: 98)


部分源碼預覽:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;

  9. using System.IO.Ports;
  10. using System.Threading;
  11. using System.Collections;
  12. using System.IO;

  13. namespace COM_A
  14. {
  15.     public partial class Form1 : Form
  16.     {
  17.         public byte[] myBy;//傳遞串口接收到的數據
  18.         public int myByLenth = 0;//串口接收到的數據長度
  19.         public string myStr;//串口接收的字符串
  20.         public bool receiveDtatFlag = false;
  21.         public int send_count = 0;

  22.         public Form1()
  23.         {
  24.             InitializeComponent();
  25.             //this.ControlBox = false;//最小化最大化關閉按鈕處理
  26.         }

  27.         private void Form1_Load(object sender, EventArgs e)//頁面加載
  28.         {
  29.             #region 串口設置初始化加載
  30.             try
  31.             {
  32.                 foreach (string com in System.IO.Ports.SerialPort.GetPortNames())//串口檢測
  33.                     comboBox1.Items.Add(com);
  34.                 //comboBox1.Text = (string)comboBox1.Items[0];//初始化選擇串口
  35.                 comboBox1.Text = myConfing.ConfingGetValue("COM");//使用配置文件加載
  36.                 if (comboBox1.Text == "")
  37.                 {
  38.                     comboBox1.Text = (string)comboBox1.Items[0];//初始化選擇串口
  39.                 }

  40.             }
  41.             catch (Exception er)
  42.             {
  43.                 MessageBox.Show("端口加載失敗!" + er.Message, "提示");
  44.             }

  45.             //列出常用的波特率
  46.             string[] ss = new string[] { "1200", "2400", "4800", "9600", "19200", "38400", "43000", "56000", "57600", "115200" };
  47.             comboBox2.DataSource = ss;
  48.             /*for (int temp = 0; temp < 10; temp++)
  49.             {
  50.                 comboBox2.Items.Add(ss[temp]);
  51.             }*/
  52.             comboBox2.Text = myConfing.ConfingGetValue("buadRate");
  53.             if (comboBox2.Text == "")
  54.             {
  55.                 comboBox2.SelectedIndex = 3;
  56.             }
  57.             //comboBox2.SelectedIndex = 3;

  58.             //列出奇偶校驗位
  59.             comboBox3.DataSource = Enum.GetNames(typeof(Parity));
  60.             //comboBox3.Items.Add("無校驗");
  61.             //comboBox3.Items.Add("奇校驗");
  62.             //comboBox3.Items.Add("偶校驗");
  63.             //comboBox3.SelectedIndex = 0;
  64.             comboBox3.Text = myConfing.ConfingGetValue("Parity");
  65.             if (comboBox3.Text == "")
  66.             {
  67.                 comboBox3.Text = "None";
  68.             }

  69.             //列出數據位
  70.             ss = new string[] { "5", "6", "7", "8", "9", "10" };
  71.             comboBox4.DataSource = ss;
  72.             //comboBox4.Text = "8";
  73.             comboBox4.Text = myConfing.ConfingGetValue("dataBits");
  74.             if (comboBox4.Text == "")
  75.             {
  76.                 comboBox4.SelectedIndex = 3;
  77.             }

  78.             //列出停止位
  79.             comboBox5.DataSource = Enum.GetNames(typeof(StopBits));
  80.             //comboBox5.Text = Enum.Format(typeof(StopBits), StopBits.One, "G");
  81.             comboBox5.Text = myConfing.ConfingGetValue("stopBits");
  82.             if (comboBox5.Text == "")
  83.             {
  84.                 comboBox5.SelectedIndex = 1;
  85.             }

  86.             button1.Text = "打開串口";
  87.             //開始執行后臺操作
  88.             //backgroundWorker1.RunWorkerAsync();
  89.             checkBox1.Checked = true;
  90.             checkBox2.Checked = true;
  91.             checkBox3.Checked = true;
  92.             checkBox4.Checked = true;
  93.             #endregion
  94.             //this.button3.Visible = false;
  95.             #region 加載開選擇的模塊
  96.             cmbSetParaLoRaDataRate.Items.Clear();
  97.             cmbSetParaWakeUpTime.Items.Clear();
  98.             if (cmbSelectLoRaMode.Text == "杭州塔石")//
  99.             {
  100.                 //LoRa的空中速率
  101.                 cmbSetParaLoRaDataRate.Items.Add("000_0.3K");
  102.                 cmbSetParaLoRaDataRate.Items.Add("001_0.6K");
  103.                 cmbSetParaLoRaDataRate.Items.Add("010_1.2K");
  104.                 cmbSetParaLoRaDataRate.Items.Add("011_2.5K");
  105.                 cmbSetParaLoRaDataRate.Items.Add("100_4.5K");
  106.                 cmbSetParaLoRaDataRate.Items.Add("101_9.1K");
  107.                 cmbSetParaLoRaDataRate.Items.Add("110_18.2K");
  108.                 cmbSetParaLoRaDataRate.Items.Add("111_21.8K");//(默認)
  109.                 //cmbSetParaLoRaDataRate.Text = "111_21.8K";//(默認)
  110.                 cmbSetParaLoRaDataRate.Text = cmbSetParaLoRaDataRate.Items[7].ToString();
  111.                 //喚醒時間
  112.                 cmbSetParaWakeUpTime.Items.Add("000_500");//(默認)
  113.                 cmbSetParaWakeUpTime.Items.Add("001_1000");
  114.                 cmbSetParaWakeUpTime.Items.Add("010_1500");
  115.                 cmbSetParaWakeUpTime.Items.Add("011_2000");
  116.                 cmbSetParaWakeUpTime.Items.Add("100_2500");
  117.                 cmbSetParaWakeUpTime.Items.Add("101_3000");
  118.                 cmbSetParaWakeUpTime.Items.Add("110_3500");
  119.                 cmbSetParaWakeUpTime.Items.Add("111_4000");
  120.                 //cmbSetParaWakeUpTime.Text = "000_500";//(默認)
  121.                 cmbSetParaWakeUpTime.Text = cmbSetParaWakeUpTime.Items[0].ToString();
  122.             }
  123.             else
  124.             {
  125.                 //LoRa的空中速率
  126.                 cmbSetParaLoRaDataRate.Items.Add("000_0.3K");
  127.                 cmbSetParaLoRaDataRate.Items.Add("001_0.6K");
  128.                 cmbSetParaLoRaDataRate.Items.Add("010_1.2K");
  129.                 cmbSetParaLoRaDataRate.Items.Add("011_2.4K");//(默認)
  130.                 cmbSetParaLoRaDataRate.Items.Add("100_4.8K");
  131.                 cmbSetParaLoRaDataRate.Items.Add("101_9.6K");
  132.                 cmbSetParaLoRaDataRate.Items.Add("110_19.2K");
  133.                 cmbSetParaLoRaDataRate.Items.Add("111_19.2K");
  134.                 //cmbSetParaLoRaDataRate.Text = "011_2.4K";//(默認)
  135.                 cmbSetParaLoRaDataRate.Text = cmbSetParaLoRaDataRate.Items[3].ToString();
  136.                 //喚醒時間
  137.                 cmbSetParaWakeUpTime.Items.Add("000_250");//(默認)
  138.                 cmbSetParaWakeUpTime.Items.Add("001_500");
  139.                 cmbSetParaWakeUpTime.Items.Add("010_750");
  140.                 cmbSetParaWakeUpTime.Items.Add("011_1000");
  141.                 cmbSetParaWakeUpTime.Items.Add("100_1250");
  142.                 cmbSetParaWakeUpTime.Items.Add("101_1500");
  143.                 cmbSetParaWakeUpTime.Items.Add("110_1750");
  144.                 cmbSetParaWakeUpTime.Items.Add("111_2000");
  145.                 //cmbSetParaWakeUpTime.Text = "000_250";//(默認)
  146.                 cmbSetParaWakeUpTime.Text = cmbSetParaWakeUpTime.Items[0].ToString();
  147.             }
  148.             #endregion
  149.         }

  150.         private void comboBox1_DropDown_1(object sender, EventArgs e)//串口下拉框更新COM口
  151.         {
  152.             try
  153.             {
  154.                 comboBox1.Items.Clear();
  155.                 foreach (string com in System.IO.Ports.SerialPort.GetPortNames())//串口檢測
  156.                     comboBox1.Items.Add(com);
  157.             }
  158.             catch (Exception er)
  159.             {
  160.                 MessageBox.Show("端口加載失敗!" + er.Message, "提示");
  161.             }
  162.         }

  163.         #region 打開串口按鈕處理
  164.         public void RefrespictureBox1()//刷新打開串口按鍵顯示以及顏色
  165.         {
  166.             if (serialPort1.IsOpen)
  167.             {
  168.                 button1.BackColor = SystemColors.GradientActiveCaption;
  169.                 button1.Text = "關閉串口";
  170.             }
  171.             else
  172.             {
  173.                 button1.BackColor = SystemColors.Control;
  174.                 button1.Text = "打開串口";
  175.             }
  176.             myConfing.SetValue("COM", comboBox1.Text);
  177.             myConfing.SetValue("buadRate", comboBox2.Text);
  178.             myConfing.SetValue("Parity", comboBox3.Text);
  179.             myConfing.SetValue("dataBits", comboBox4.Text);
  180.             myConfing.SetValue("stopBits", comboBox5.Text);
  181.         }

  182.         private void button1_Click(object sender, EventArgs e)//打開串口
  183.         {
  184.             try
  185.             {
  186.                 if (serialPort1.IsOpen)//如果串口是開的則關閉
  187.                 {
  188.                     serialPort1.Close();
  189.                     comboBox1.Enabled = true;
  190.                     comboBox2.Enabled = true;
  191.                     comboBox3.Enabled = true;
  192.                     comboBox4.Enabled = true;
  193.                     comboBox5.Enabled = true;
  194.                     #region
  195.                     //button1.Text = "打開串口";
  196.                     /*//關閉串口后,串口設置選項便可以繼續使用
  197.                     comboBox1.Enabled = true;
  198.                     comboBox2.Enabled = true;
  199.                     comboBox3.Enabled = true;
  200.                     comboBox4.Enabled = true;
  201.                     comboBox5.Enabled = true;*/
  202.                     #endregion
  203.                 }
  204.                 else//否則打開串口
  205.                 {
  206.                     //button1.Text = "關閉串口";
  207.                     serialPort1.PortName = comboBox1.Text;
  208.                     serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
  209.                     serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox3.Text);
  210.                     serialPort1.DataBits = Int32.Parse(comboBox4.Text);
  211.                     serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), comboBox5.Text);
  212.                     serialPort1.Encoding = Encoding.GetEncoding("Gb2312");//返回與指定代碼頁名稱關聯的編碼Gb2312
  213.                     serialPort1.Open();
  214.                     comboBox1.Enabled = false;
  215.                     comboBox2.Enabled = false;
  216.                     comboBox3.Enabled = false;
  217.                     comboBox4.Enabled = false;
  218.                     comboBox5.Enabled = false;
  219.                 }
  220.                 RefrespictureBox1();//刷新打開串口按鍵顯示以及顏色
  221.             }
  222.             catch (Exception)
  223.             {
  224.                 //打開串口失敗后,相應標志位取消
  225.                 MessageBox.Show("串口無效或已被占用!", "錯誤提示");
  226.             }
  227.         }
  228.         #endregion

  229.         #region 發送區形式處理、串口按鍵發送、定時自動發送以及其他外部調用發送相關接口
  230.         private bool CheckSendData()//檢查串口發送區域
  231.         {
  232.             if (textBox2.Text.Trim() == "") return false;
  233.             return true;
  234.         }

  235.         private void checkBox4_CheckedChanged(object sender, EventArgs e)//發送區HEX處理
  236.         {
  237.             string s = "";
  238.             if (checkBox4.CheckState == CheckState.Checked)//發送HEX顯示
  239.             {
  240.                 byte[] by = Encoding.GetEncoding("Gb2312").GetBytes(textBox2.Text);
  241.                 textBox2.Text = "";
  242.                 foreach (byte btmp in by)
  243.                 {
  244.                     s = "00" + string.Format("{0:X}", btmp);
  245.                     textBox2.Text += s.Substring(s.Length - 2, 2);
  246.                     textBox2.Text += " ";
  247.                 }
  248.             }
  249.             else//發送ASCII顯示
  250.             {
  251.                 ArrayList al = myClass.Str16ToArrayList(textBox2.Text);
  252.                 byte[] by = new byte[al.Count];
  253.                 int i = 0;
  254.                 foreach (string stmp in al)
  255.                 {
  256.                     by[i] += Convert.ToByte(stmp, 16);
  257.                     i++;
  258.                 }
  259.                 textBox2.Text = Encoding.GetEncoding("Gb2312").GetString(by);
  260.             }
  261.         }

  262.         private void textBox2_KeyPress(object sender, KeyPressEventArgs e)//發送區有按鍵鍵入,
  263.         {
  264.             if (checkBox1.CheckState == CheckState.Checked)//HEX發送時
  265.             {
  266.                 if (!Uri.IsHexDigit(e.KeyChar) && e.KeyChar != ' ')//不符合HEX的鍵入清除
  267.                 {
  268.                     e.KeyChar = (char)0;
  269.                 }
  270.             }
  271.         }

  272.         private void button2_Click(object sender, EventArgs e)//按鍵發送
  273.         {
  274.             try
  275.             {
  276.                 if (serialPort1.IsOpen)
  277.                 {
  278.                     /*if (!CheckSendData())//檢測要發送的數據
  279.                     {
  280.                         MessageBox.Show("請輸入要發送的數據!", "錯誤提示");
  281.                         return;
  282.                     }*/
  283.                     string s = "";
  284.                     //MessageBox.Show(checkBox4.Checked.ToString());
  285.                     if (checkBox4.Checked)//十六進制發送
  286.                     {
  287.                         ArrayList al = myClass.Str16ToArrayList(textBox2.Text);
  288.                         byte[] by = new byte[al.Count];
  289.                         int i = 0;
  290.                         foreach (string stmp in al)
  291.                         {
  292.                             by[i] += Convert.ToByte(stmp, 16);//將指定基的數字的字符串表示形式轉換為等效的 8 位無符號整數。
  293.                             i++;
  294.                         }
  295.                         serialPort1.Write(by, 0, i);//發送字節
  296.                         //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節數組中的所有字節解碼為一個字符串。。
  297.                     }
  298.                     else//ASCII發送
  299.                     {
  300.                         s = textBox2.Text;
  301.                         serialPort1.Write(s);//串口發送字符串

  302.                     }
  303.                     //MessageBox.Show(s);                    
  304.                 }
  305.                 else
  306.                 {
  307.                     MessageBox.Show("串口未打開!", "錯誤提示");
  308.                 }

  309.             }
  310.             catch (Exception)
  311.             {
  312.                 MessageBox.Show("發送數據時發生錯誤!", "錯誤提示");
  313.             }
  314.         }

  315.         public void sendData(string dataIn)//調用的發送函數
  316.         {
  317.             try
  318.             {
  319.                 if (serialPort1.IsOpen)
  320.                 {
  321.                     /*if (!CheckSendData())//檢測要發送的數據
  322.                     {
  323.                         MessageBox.Show("請輸入要發送的數據!", "錯誤提示");
  324.                         return;
  325.                     }*/
  326.                     string s = "";
  327.                     textBox2.Text = dataIn;
  328.                     //MessageBox.Show(checkBox4.Checked.ToString());
  329.                     if (checkBox4.Checked)//十六進制發送
  330.                     {
  331.                         ArrayList al = myClass.Str16ToArrayList(textBox2.Text);
  332.                         byte[] by = new byte[al.Count];
  333.                         int i = 0;
  334.                         foreach (string stmp in al)
  335.                         {
  336.                             by[i] += Convert.ToByte(stmp, 16);//將指定基的數字的字符串表示形式轉換為等效的 8 位無符號整數。
  337.                             i++;
  338.                         }
  339.                         serialPort1.Write(by, 0, i);//發送字節
  340.                         //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節數組中的所有字節解碼為一個字符串。。
  341.                     }
  342.                     else//ASCII發送
  343.                     {

  344.                         s = textBox2.Text;

  345.                         serialPort1.Write(s);//串口發送字符串

  346.                     }
  347.                     //MessageBox.Show(s);                    
  348.                 }
  349.                 else
  350.                 {
  351.                     MessageBox.Show("串口未打開!", "錯誤提示");
  352.                 }

  353.             }
  354.             catch (Exception)
  355.             {
  356.                 MessageBox.Show("發送數據時發生錯誤!", "錯誤提示");
  357.             }
  358.         }

  359.         public void sendData_NoDispaly(string dataIn)//調用的發送函數并且不顯示在發送區域
  360.         {
  361.             try
  362.             {
  363.                 if (serialPort1.IsOpen)
  364.                 {
  365.                     /*if (!CheckSendData())//檢測要發送的數據
  366.                     {
  367.                         MessageBox.Show("請輸入要發送的數據!", "錯誤提示");
  368.                         return;
  369.                     }*/
  370.                     string s = "";
  371.                     //textBox2.Text = dataIn;//不顯示在發送區域
  372.                     //MessageBox.Show(checkBox4.Checked.ToString());
  373.                     if (checkBox4.Checked)//十六進制發送
  374.                     {
  375.                         ArrayList al = myClass.Str16ToArrayList(textBox2.Text);
  376.                         byte[] by = new byte[al.Count];
  377.                         int i = 0;
  378.                         foreach (string stmp in al)
  379.                         {
  380.                             by[i] += Convert.ToByte(stmp, 16);//將指定基的數字的字符串表示形式轉換為等效的 8 位無符號整數。
  381.                             i++;
  382.                         }
  383.                         serialPort1.Write(by, 0, i);//發送字節
  384.                         //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節數組中的所有字節解碼為一個字符串。。
  385.                     }
  386.                     else//ASCII發送
  387.                     {

  388.                         s = textBox2.Text;

  389.                         serialPort1.Write(s);//串口發送字符串

  390.                     }
  391.                     //MessageBox.Show(s);                    
  392.                 }
  393.                 else
  394.                 {
  395.                     MessageBox.Show("串口未打開!", "錯誤提示");
  396.                 }

  397.             }
  398.             catch (Exception)
  399.             {
  400.                 MessageBox.Show("發送數據時發生錯誤!", "錯誤提示");
  401.             }
  402.         }

  403.         private void timer1_Tick(object sender, EventArgs e)//定時自動發送
  404.         {
  405.             timer1.Interval = Convert.ToInt32(textBox1.Text);
  406.             try
  407.             {
  408.                 if ((serialPort1.IsOpen) && (checkBox5.Checked == true))
  409.                 {
  410.                     /*if (!CheckSendData())//檢測要發送的數據
  411.                     {
  412.                         MessageBox.Show("請輸入要發送的數據!", "錯誤提示");
  413.                         return;
  414.                     }*/

  415.                     string s = "";
  416.                     //textBox2.Text = dataIn;
  417.                     //MessageBox.Show(checkBox4.Checked.ToString());
  418.                     if (checkBox4.Checked)//十六進制發送
  419.                     {
  420.                         ArrayList al = myClass.Str16ToArrayList(textBox2.Text);
  421.                         byte[] by = new byte[al.Count];
  422.                         int i = 0;
  423.                         foreach (string stmp in al)
  424.                         {
  425.                             by[i] += Convert.ToByte(stmp, 16);//將指定基的數字的字符串表示形式轉換為等效的 8 位無符號整數。
  426.                             i++;
  427.                         }
  428.                         serialPort1.Write(by, 0, i);//發送字節
  429.                         //s = Encoding.GetEncoding("Gb2312").GetString(by);//在派生類中重寫時,將指定字節數組中的所有字節解碼為一個字符串。。
  430.                     }
  431.                     else//ASCII發送
  432.                     {

  433.                         s = textBox2.Text;

  434.                         serialPort1.Write(s);//串口發送字符串

  435.                     }
  436.                     send_count++;
  437.                     textBox5.Text = send_count.ToString();

  438.                 }
  439.                 else
  440.                 {
  441.                     //MessageBox.Show("串口未打開!", "錯誤提示");
  442.                 }

  443.             }
  444.             catch (Exception)
  445.             {
  446.                 //MessageBox.Show("發送數據時發生錯誤!", "錯誤提示");
  447.             }

  448.         }
  449.         #endregion

  450.         #region 接收方法一用到的線程處理,不用
  451.         delegate void SetTextCallback(string text);//委托,使用回調函數時考慮使用

  452.         private void SetText(string text)
  453.         {
  454.             try
  455.             {
  456.                 if (this.richTextBox1.InvokeRequired)//獲取一個值,該值指示調用方在對控件進行方法調用時是否必須調用 Invoke 方法,因為調用方位于創建控件所在的線程以外的線程中。
  457.                 {
  458.                     SetTextCallback d = new SetTextCallback(SetText);//回調函數
  459.                     this.Invoke(d, new object[] { text });//執行delegate里的搭載函數
  460.                 }
  461.                 else
  462.                 {
  463.                     this.richTextBox1.Text += text;
  464.                 }
  465.                 //this.richTextBox2.Focus();//獲取焦點
  466.                 //this.richTextBox2.Select(this.richTextBox2.TextLength, 0);//光標定位到文本最后
  467.                 /* //設定光標所在位置
  468.                  this.richTextBox1.SelectionStart = richTextBox1.TextLength;
  469.                  //滾動到當前光標處
  470.                  this.richTextBox1.ScrollToCaret();*/
  471.             }
  472.             catch (Exception)
  473.             {
  474.             }
  475.         }
  476.         #endregion

  477.         #region 串口接收處理
  478.         //int receive_count_test = 0;
  479.         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)//清除接收
  480.         {
  481.             richTextBox1.Text = "";
  482.             send_count = 0;
  483.             //receive_count_test = 0;
  484.             textBox5.Text = "";
  485.             //textBox5.Text = "";
  486.         }

  487.         private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//接收事件觸發
  488.         {
  489.             #region
  490.             /* char[] c;
  491.             //StringBuilder builder = new StringBuilder();//避免在事件處理方法中反復的創建,定義到外面。
  492.             try
  493.             {
  494.                 if (serialPort1.IsOpen)
  495.                 {
  496.                     c = new char[serialPort1.BytesToRead];
  497.                     serialPort1.Read(c, 0, c.Length);//串口讀取
  498.                     if (c.Length > 0)
  499.                     {
  500.                         if (checkBox1.Checked)//接收HEX顯示
  501.                         {
  502.                             if (checkBox3.Checked)//接收時間顯示
  503.                             {
  504.                                 SetText(DateTime.Now.ToString());
  505.                                 SetText(" ");
  506.                             }
  507.                             byte[] by = Encoding.GetEncoding("Gb2312").GetBytes(c);
  508.                             myBy = by;
  509.                             myByLenth = by.Length;
  510.                             /*if (by[0] == 0x7b)
  511.                             {
  512.                                 MessageBox.Show("正確");
  513.                             }
  514.                             else
  515.                             {
  516.                                 MessageBox.Show(by[0].ToString());
  517.                             }*
  518.                             foreach (byte btmp in by)
  519.                             {
  520.                                 string s = "00" + string.Format("{0:X}", btmp);//將指定字符串中的一個或多個格式項替換為指定對象的字符串表示形式
  521.                                 s = s.Substring(s.Length - 2, 2);
  522.                                 SetText(new string(s.ToCharArray()));
  523.                                 SetText(" ");
  524.                             }
  525.                             if (checkBox2.Checked)//接收換行顯示
  526.                             {
  527.                                 SetText("\n");
  528.                             }
  529.                         }
  530.                         else
  531.                         {
  532.                             if (checkBox3.Checked)//接收時間顯示
  533.                             {
  534.                                 SetText(DateTime.Now.ToString());
  535.                             }
  536.                             SetText(new string(c));
  537.                             if (checkBox3.Checked)//接收換行顯示
  538.                             {
  539.                                 SetText("\n");
  540.                             }
  541.                         }
  542.                         //this.richTextBox2.Text += "\n";
  543.                     }
  544.                 }
  545.             }
  546.             catch (Exception)
  547.             {

  548.             }
  549.             if (checkBox2.Checked)//接收HEX顯示
  550.             {
  551.                 Thread.Sleep(500);//延時500ms 等待接收完數據
  552.             }
  553.             else
  554.             {
  555.                 Thread.Sleep(10);//延時100ms 等待接收完數據
  556.             }*/
  557.             /* //設定光標所在位置
  558.              this.richTextBox1.SelectionStart = richTextBox1.TextLength;
  559.              //滾動到當前光標處
  560.              this.richTextBox1.ScrollToCaret();*/

  561.             //追加的形式添加到文本框末端,并滾動到最后。
  562.             //this.richTextBox1.AppendText(builder.ToString());
  563.             #endregion
  564.             #region
  565.             Thread.Sleep(Convert.ToInt32(textBox5.Text.Trim()));//延時100ms 等待接收完數據
  566.             //第二種接收方式
  567.             StringBuilder builder = new StringBuilder();//避免在事件處理方法中反復的創建,定義到外面。
  568.             long received_count = 0;//接收計數
  569.             int n = serialPort1.BytesToRead;//先記錄下來,避免某種原因,人為的原因,操作幾次之間時間長,緩存不一致
  570.             byte[] buf = new byte[n];//聲明一個臨時數組存儲當前來的串口數據
  571.             received_count += n;//增加接收計數
  572.             serialPort1.Read(buf, 0, n);//讀取緩沖數據
  573.             builder.Clear();//清除字符串構造器的內容

  574.             myBy = buf;
  575.             myByLenth = buf.Length;

  576.             //因為要訪問ui資源,所以需要使用invoke方式同步ui。
  577.             this.Invoke((EventHandler)(delegate
  578.             {

  579.                 if (checkBox3.Checked)//接收時間顯示
  580.                 {
  581.                     this.richTextBox1.AppendText(DateTime.Now.ToString(@"yyyy\:MM\:dd") + " ");
  582.                     this.richTextBox1.AppendText(DateTime.Now.ToString(@"HH\:mm\:ss\:fff") + "  ");
  583.                 }

  584.                 //判斷是否是顯示為16禁止
  585.                 if (checkBox1.Checked)
  586.                 {
  587.                     //依次的拼接出16進制字符串
  588.                     foreach (byte b in buf)
  589.                     {
  590.                         builder.Append(b.ToString("X2") + " ");//在此實例的結尾追加指定字符串的副本
  591.                     }
  592.                 }
  593.                 else
  594.                 {
  595.                     //直接按ASCII規則轉換成字符串
  596.                     builder.Append(Encoding.ASCII.GetString(buf));
  597.                 }
  598.                 //追加的形式添加到文本框末端,并滾動到最后。
  599.                 this.richTextBox1.AppendText(builder.ToString());
  600.                 myStr = builder.ToString();//字符串輸出

  601.                 if (checkBox2.Checked)//接收換行顯示
  602.                 {
  603.                     this.richTextBox1.AppendText("\n");
  604.                 }
  605.                 //修改接收計數
  606.                 //labelGetCount.Text = "Get:" + received_count.ToString();
  607.                 try
  608.                 {
  609.                     if (receiveDtatFlag == true)//保存數據
  610.                     {
  611.                         string fName = saveFileDialog1.FileName;
  612.                         FileStream fs = File.Open(fName, FileMode.Append);
  613.                         StreamWriter sw = new StreamWriter(fs);

  614.                         if (checkBox3.Checked)//接收時間顯示
  615.                         {
  616.                             //this.richTextBox1.AppendText(DateTime.Now.ToString() + " ");
  617.                             sw.Write(DateTime.Now.ToString(@"hh\:mm\:ss\:fff") + " ");
  618.                         }
  619.                         sw.Write(builder.ToString());
  620.                         if (checkBox2.Checked)//接收換行顯示
  621.                         {
  622.                             sw.WriteLine("\n");

  623.                         }

  624.                         //sw.WriteLine(richTextBox1.Text);
  625.                         //textBox3.Text = fName;
  626.                         sw.Close();
  627.                         fs.Close();
  628.                     }
  629.                 }
  630.                 catch
  631.                 {

  632.                 }

  633.                 myReceDataAnalysis(myStr);//數據解析處理

  634.                 //analysis myans = new analysis();
  635.                 //myans.analysisData(myStr);
  636.             }));//*/
  637.             #endregion

  638.         }

  639.         private void richTextBox1_TextChanged(object sender, EventArgs e)//接收窗處理
  640.         {
  641.             if (richTextBox1.Lines.Length > 8000)//大于8000行時清楚前面的
  642.             {
  643.                 int n = 500;
  644.                 int start = richTextBox1.GetFirstCharIndexFromLine(0);//第一行第一個字符索引
  645.                 int end = richTextBox1.GetFirstCharIndexFromLine(n);//第n行第一個字符索引
  646.                 richTextBox1.Select(start, end);//選中n行
  647.                 richTextBox1.SelectedText = "";//設置前n行為空

  648.             }
  649.             richTextBox1.Focus();
  650.             richTextBox1.Select(richTextBox1.TextLength, 0);

  651.         }
  652.         #endregion

  653.         #region 窗體處理
  654.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)//關閉提醒
  655.         {
  656.             Properties.Settings.Default.Save();
  657.             myConfing.SetValue("COM", comboBox1.Text);
  658.             myConfing.SetValue("buadRate", comboBox2.Text);
  659.             myConfing.SetValue("Parity", comboBox3.Text);
  660.             myConfing.SetValue("dataBits", comboBox4.Text);
  661.             myConfing.SetValue("stopBits", comboBox5.Text);
  662.             if (DialogResult.Yes == MessageBox.Show("程序正在使用中,確認退出?", "確認退出", MessageBoxButtons.YesNo))
  663.             {
  664.                 //MessageBox.Show("立即退出!");

  665.                 serialPort1.Close();
  666.                 this.Dispose();
  667.                 e.Cancel = false;
  668.             }
  669.             else
  670.             {
  671.                 e.Cancel = true;
  672.             }
  673.         }

  674.        /*private void Form1_FormClosed(object sender, FormClosedEventArgs e)//關閉整個窗口
  675.         {
  676.             Properties.Settings.Default.Save();
  677.             myConfing.SetValue("COM", comboBox1.Text);
  678.             myConfing.SetValue("buadRate", comboBox2.Text);
  679.             myConfing.SetValue("Parity", comboBox3.Text);
  680.             myConfing.SetValue("dataBits", comboBox4.Text);
  681.             myConfing.SetValue("stopBits", comboBox5.Text);

  682.         }*/

  683.         /*private void button3_Click(object sender, EventArgs e)//窗口隱藏
  684.         {
  685.             //this.Hide();//隱藏窗體
  686.         }*/
  687.         #endregion

  688.         #region  數據文件保存處理
  689.         private void button4_Click(object sender, EventArgs e)//保存路徑選擇
  690.         {
  691.             //saveFileDialog1.InitialDirectory = @"G:\自制軟件\C#練習\20.19 文件保存SaveFileDialog控件\51zxw";
  692.             saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
  693.             saveFileDialog1.FilterIndex = 1;
  694.             saveFileDialog1.FileName = "ReceiveData";
  695.             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  696.             {
  697.                 string fName = saveFileDialog1.FileName;
  698.                 FileStream fs = File.Open(fName, FileMode.Append);
  699.                 StreamWriter sw = new StreamWriter(fs);
  700.                 //sw.WriteLine(richTextBox1.Text);
  701.                 textBox3.Text = fName;
  702.                 sw.Close();
  703.                 fs.Close();

  704.             }
  705.         }

  706.         private void checkBox6_CheckedChanged(object sender, EventArgs e)//保存數據勾選處理
  707.         {
  708.             if (checkBox6.CheckState == CheckState.Checked)//選中
  709.             {
  710.                 receiveDtatFlag = true;
  711.             }
  712.             else
  713.             {
  714.                 receiveDtatFlag = false;
  715.             }
  716.         }
  717.         #endregion

  718.         #region 數據處理過程
  719.         private void btnSetPara_Click(object sender, EventArgs e)//設置參數
  720.         {
  721.             string mySendDataTemp = "";
  722.             //幀頭
  723.             string mySendHead_0 = "";
  724.             if (chbSetParaSave.Checked == true)//掉電保存
  725.             {
  726.                 mySendHead_0 = "C0" + " ";
  727.             }
  728.             else
  729.             {
  730.                 mySendHead_0 = "C2" + " ";
  731.             }
  732.             //地址            
  733.             if (txbSetParaAddr.Text.Trim().Length != 4)
  734.             {
  735.                 MessageBox.Show("地址長度不為4!", "錯誤提示");
  736.                 return;
  737.             }
  738.             string mySendAddr_1_2 = txbSetParaAddr.Text.Trim() + " ";
  739.             //字節3
  740.             string mySendChar_3 = "";
  741.             byte mySendByte_3 = 0;
  742.             //串口校驗位,mySendByte_3的7、6位
  743.             switch (cmbSetParaDataBit.Text.Trim().Substring(0, 2))
  744.             {
  745.                 case "00"://8N1(默認)
  746.                     mySendByte_3 &= 0x3F;
  747.                     break;
  748.                 case "01"://8O1
  749.                     mySendByte_3 |= (1<<6);
  750.                     break;
  751.                 case "10"://8E1
  752.                     mySendByte_3 |= (2 << 6);
  753.                     break;
  754.                 case "11"://8N1(默認)
  755.                     mySendByte_3 &= 0x3F;
  756.                     break;
  757.                 default:
  758.                     mySendByte_3 &= 0x3F;//8N1(默認)
  759.                     break;
  760.             }
  761.             //TTL 串口速率(bps),mySendByte_3的5、4、3位
  762.             switch (cmbSetParaBuadRate.Text.Trim().Substring(0, 3))
  763.             {
  764.                 case "000"://1200
  765.                     mySendByte_3 &= 0xC7;
  766.                     break;
  767.                 case "001"://2400
  768.                     mySendByte_3 |= (1 << 3);
  769.                     break;
  770.                 case "010"://4800
  771.                     mySendByte_3 |= (2 << 3);
  772.                     break;
  773.                 case "011"://9600(默認)
  774.                     mySendByte_3 |= (3 << 3);
  775.                     break;
  776.                 case "100"://19200
  777.                     mySendByte_3 |= (4 << 3);
  778.                     break;
  779.                 case "101"://38400
  780.                     mySendByte_3 |= (5 << 3);
  781.                     break;
  782.                 case "110"://57600
  783.                     mySendByte_3 |= (6 << 3);
  784.                     break;
  785.                 case "111"://115200
  786.                     mySendByte_3 |= (7 << 3);
  787.                     break;
  788.                 default:
  789.                     mySendByte_3 |= (3 << 3);//9600(默認)
  790.                     break;
  791.             }
  792.             //無線空中速率(bps)
  793.             switch (cmbSetParaLoRaDataRate.Text.Trim().Substring(0, 3))
  794.             {
  795.                 case "000"://0.3K
  796.                     mySendByte_3 &= 0xF8;
  797.                     break;
  798.                 case "001"://0.6K
  799.                     mySendByte_3 |= 1 ;
  800.                     break;
  801.                 case "010"://1.2K
  802.                     mySendByte_3 |= 2 ;
  803.                     break;
  804.                 case "011"://2.5K/2.4k(默認)
  805.                     mySendByte_3 |= 3 ;
  806.                     break;
  807.                 case "100"://4.5K/4.8k
  808.                     mySendByte_3 |= 4 ;
  809.                     break;
  810.                 case "101"://9.1K/9.6k
  811.                     mySendByte_3 |= 5 ;
  812.                     break;
  813.                 case "110"://18.2K/19.2k
  814.                     mySendByte_3 |= 6 ;
  815.                     break;
  816.                 case "111"://21.8K(默認)/19.2k
  817.                     mySendByte_3 |= 7 ;
  818.                     break;
  819.                 default:
  820.                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  821.                     {
  822.                         mySendByte_3 |= 7 ;//21.8K(默認)
  823.                     }
  824.                     else
  825.                     {
  826.                         mySendByte_3 |= 3;//2.4K(默認)
  827.                     }

  828.                     break;
  829.             }
  830.             mySendChar_3 = mySendByte_3.ToString("X2") + " ";
  831.             //信道
  832.             string mySendChannel_4 = "";//txbSetParaLoRaChannel.Text.Trim().Substring(0, 2) + " ";
  833.             Int16 mySendChannelTempInt = Convert.ToInt16(txbSetParaLoRaChannel.Text.Trim());
  834.             //byte mySendChannelTempByte = Convert.ToByte((mySendChannelTempInt - 398).ToString("X2"));
  835.             if (cmbSelectLoRaMode.Text == "杭州塔石")
  836.             {
  837.                 mySendChannel_4 = (mySendChannelTempInt - 398).ToString("X2");
  838.             }
  839.             else
  840.             {
  841.                 mySendChannel_4 = (mySendChannelTempInt - 410).ToString("X2");
  842.             }

  843.             //字節5
  844.             string mySendChar_5 = "";
  845.             byte mySendByte_5 = 0;
  846.             //發送模式,mySendByte_5的1位
  847.             if (cmbSetParaSendMode.Text.Trim().Substring(0, 1) == "1")
  848.             {               
  849.                 mySendByte_5 |= (1 << 7);
  850.             }
  851.             else
  852.             {
  853.                 mySendByte_5 &= 0x7F;//默認
  854.             }
  855.             //IO 驅動方式(默認1),mySendByte_5的6位
  856.             if (cmbSetParaIOMode.Text.Trim().Substring(0, 1) == "1")
  857.             {
  858.                 mySendByte_5 |= (1 << 6);
  859.             }
  860.             else
  861.             {
  862.                 mySendByte_5 &= 0xBF;//默認
  863.             }
  864.             //無線喚醒時間,mySendByte_5的5、4、3位
  865.             switch (cmbSetParaWakeUpTime.Text.Trim().Substring(0, 3))
  866.             {
  867.                 case "000"://500ms(默認)/250ms(默認)
  868.                     mySendByte_5 &= 0xC7;
  869.                     break;
  870.                 case "001"://1000ms/500ms
  871.                     mySendByte_5 |= (1 << 3);
  872.                     break;
  873.                 case "010"://1500ms/750ms
  874.                     mySendByte_5 |= (2 << 3);
  875.                     break;
  876.                 case "011"://2000ms/1000ms
  877.                     mySendByte_5 |= (3 << 3);
  878.                     break;
  879.                 case "100"://2500ms/1250ms
  880.                     mySendByte_5 |= (4 << 3);
  881.                     break;
  882.                 case "101"://3000ms/1500ms
  883.                     mySendByte_5 |= (5 << 3);
  884.                     break;
  885.                 case "110"://3500ms/1750ms
  886.                     mySendByte_5 |= (6 << 3);
  887.                     break;
  888.                 case "111"://4000ms/2000ms
  889.                     mySendByte_5 |= (7 << 3);
  890.                     break;
  891.                 default:
  892.                     mySendByte_5 &= 0xC7;//500ms(默認)/250ms(默認)
  893.                     break;
  894.             }
  895.             //FEC 開關,mySendByte_5的2位
  896.             if (chbSetParaOpenFec.Checked == true)//定點傳輸
  897.             {
  898.                 mySendByte_5 |= (1 << 2);
  899.             }
  900.             else//透明傳輸
  901.             {
  902.                 mySendByte_5 &= 0xFB;
  903.             }
  904.             //發射功率,mySendByte_5的1、0位
  905.             switch (cmbSetParaLoRaDataRate.Text.Trim().Substring(0, 3))
  906.             {
  907.                 case "00":////20dBm(默認)
  908.                     mySendByte_5 &= 0xFC;
  909.                     break;
  910.                 case "01"://17dBm
  911.                     mySendByte_5 |= 1;
  912.                     break;
  913.                 case "10"://14dBm
  914.                     mySendByte_5 |= 2;
  915.                     break;
  916.                 case "11"://10dBm
  917.                     mySendByte_5 |= 3;
  918.                     break;               
  919.                 default:
  920.                     mySendByte_5 &= 0xFC;//20dBm(默認)
  921.                     break;
  922.             }
  923.             mySendChar_5 = mySendByte_5.ToString("X2");

  924.             //綜合
  925.             mySendDataTemp = mySendHead_0 + mySendAddr_1_2 + mySendChar_3 + mySendChannel_4 + mySendChar_5;
  926.             sendData(myClass.strAddSpace(mySendDataTemp));

  927.             this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  928.             this.pictureBox2.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  929.             this.pictureBox3.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  930.             this.pictureBox4.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  931.         }

  932.         private void btnReadPara_Click(object sender, EventArgs e)//讀取參數
  933.         {
  934.             sendData("C1 C1 C1");
  935.             this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  936.             this.pictureBox2.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  937.             this.pictureBox3.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  938.             this.pictureBox4.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  939.         }

  940.         private void btnReadVersion_Click(object sender, EventArgs e)//讀取版本號
  941.         {
  942.             sendData("C3 C3 C3");
  943.             this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  944.             this.pictureBox2.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  945.             this.pictureBox3.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  946.             this.pictureBox4.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  947.         }

  948.         private void btnReset_Click(object sender, EventArgs e)//復位
  949.         {
  950.             sendData("C4 C4 C4");
  951.             this.pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  952.             this.pictureBox2.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  953.             this.pictureBox3.Image = Image.FromFile(Application.StartupPath + "\\red.png");//bin文件中
  954.             this.pictureBox4.Image = Image.FromFile(Application.StartupPath + "\\green.png");//bin文件中
  955.         }

  956.         //數據解析過程
  957.         public void myReceDataAnalysis(string str)
  958.         {
  959.             byte[] myReceByte = myClass.strAsciiToHexBy(str);
  960.             if (myReceByte.Length >= 4)
  961.             {
  962.                 try
  963.                 {
  964.                     switch (myReceByte[0])
  965.                     {
  966.                         case 0xC0:
  967.                         case 0xC2://讀取工作參數
  968.                             #region //工作參數顯示
  969.                             //字節0掉電是否保存
  970.                             if (myReceByte[0] == 0xC0)//要掉電保存的參數
  971.                             {
  972.                                 chbSetParaSave.Checked = true;
  973.                             }
  974.                             else
  975.                             {
  976.                                 chbSetParaSave.Checked = false;
  977.                             }
  978.                             //字節1、2 地址
  979.                             txbSetParaAddr.Text = myReceByte[1].ToString("X2") + myReceByte[2].ToString("X2");
  980.                             //字節3
  981.                             //串口校驗位,字節3的7、6位
  982.                             cmbSetParaDataBit.Text = cmbSetParaDataBit.Items[(myReceByte[3] >> 6) & 0x03].ToString();
  983.                             #region
  984.                             /*switch ((myReceByte[3] >> 6) & 0x03)
  985.                             {
  986.                                 case 0://8N1(默認)
  987.                                     cmbSetParaDataBit.Text = "00_8N1";
  988.                                     break;
  989.                                 case 1://8O1
  990.                                     cmbSetParaDataBit.Text = "01_8O1";
  991.                                     break;
  992.                                 case 2://8E1
  993.                                     cmbSetParaDataBit.Text = "01_8E1";
  994.                                     break;
  995.                                 case 3://8N1(默認)
  996.                                     cmbSetParaDataBit.Text = "00_8N1";
  997.                                     break;
  998.                                 default:
  999.                                     cmbSetParaDataBit.Text = "error";
  1000.                                     break;
  1001.                             }*/
  1002.                             #endregion
  1003.                             //TTL 串口速率(bps),字節3的5、4、3位
  1004.                             cmbSetParaBuadRate.Text = cmbSetParaBuadRate.Items[(myReceByte[3] >> 3) & 0x07].ToString();
  1005.                             #region
  1006.                             /*switch ((myReceByte[3] >> 3) & 0x07)
  1007.                             {
  1008.                                 case 0://1200
  1009.                                     cmbSetParaBuadRate.Text = "000_1200";
  1010.                                     break;
  1011.                                 case 1://2400
  1012.                                     cmbSetParaBuadRate.Text = "001_2400";
  1013.                                     break;
  1014.                                 case 2://4800
  1015.                                     cmbSetParaBuadRate.Text = "010_4800";
  1016.                                     break;
  1017.                                 case 3://9600(默認)
  1018.                                     cmbSetParaBuadRate.Text = "011_9600";
  1019.                                     break;
  1020.                                 case 4://19200
  1021.                                     cmbSetParaBuadRate.Text = "100_19200";
  1022.                                     break;
  1023.                                 case 5://38400
  1024.                                     cmbSetParaBuadRate.Text = "101_38400";
  1025.                                     break;
  1026.                                 case 6://57600
  1027.                                     cmbSetParaBuadRate.Text = "110_57600";
  1028.                                     break;
  1029.                                 case 7://115200
  1030.                                     cmbSetParaBuadRate.Text = "111_115200";
  1031.                                     break;
  1032.                                 default:
  1033.                                     cmbSetParaBuadRate.Text = "error";
  1034.                                     break;
  1035.                             }*/
  1036.                             #endregion
  1037.                             //無線空中速率(bps),字節3的2、1、0位
  1038.                             cmbSetParaLoRaDataRate.Text = cmbSetParaLoRaDataRate.Items[(myReceByte[3] >> 0) & 0x07].ToString();
  1039.                             #region
  1040.                             /*switch ((myReceByte[3] >> 0) & 0x07)
  1041.                             {
  1042.                                 case 0://0.3K
  1043.                                     cmbSetParaLoRaDataRate.Text = "000_0.3K";
  1044.                                     break;
  1045.                                 case 1://0.6K
  1046.                                     cmbSetParaLoRaDataRate.Text = "001_0.6K";
  1047.                                     break;
  1048.                                 case 2://1.2K
  1049.                                     cmbSetParaLoRaDataRate.Text = "010_1.2K";
  1050.                                     break;
  1051.                                 case 3://2.5K/2.4k
  1052.                                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  1053.                                     {
  1054.                                         cmbSetParaLoRaDataRate.Text = "011_2.5K";
  1055.                                     }
  1056.                                     else
  1057.                                     {
  1058.                                         cmbSetParaLoRaDataRate.Text = "011_2.4K";
  1059.                                     }
  1060.                                     break;
  1061.                                 case 4://4.5K/4.8k
  1062.                                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  1063.                                     {
  1064.                                         cmbSetParaLoRaDataRate.Text = "100_4.5K";
  1065.                                     }
  1066.                                     else
  1067.                                     {
  1068.                                         cmbSetParaLoRaDataRate.Text = "100_4.8K";
  1069.                                     }                                    
  1070.                                     break;
  1071.                                 case 5://9.1K/9.6K
  1072.                                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  1073.                                     {
  1074.                                         cmbSetParaLoRaDataRate.Text = "101_9.1K";
  1075.                                     }
  1076.                                     else
  1077.                                     {
  1078.                                         cmbSetParaLoRaDataRate.Text = "101_9.6K";
  1079.                                     }                                       
  1080.                                     break;
  1081.                                 case 6://18.2K/19.2K
  1082.                                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  1083.                                     {
  1084.                                         cmbSetParaLoRaDataRate.Text = "110_18.2K";
  1085.                                     }
  1086.                                     else
  1087.                                     {
  1088.                                         cmbSetParaLoRaDataRate.Text = "110_19.2K";
  1089.                                     }                                       
  1090.                                     break;
  1091.                                 case 7://21.8K(默認)
  1092.                                     if (cmbSelectLoRaMode.Text == "杭州塔石")
  1093.                                     {
  1094.                                         cmbSetParaLoRaDataRate.Text = "111_21.8K";
  1095.                                     }
  1096.                                     else
  1097.                                     {
  1098.                                         cmbSetParaLoRaDataRate.Text = "111_19.2K";
  1099.                                     }                                      
  1100.                                     break;
  1101.                                 default:
  1102.                                     cmbSetParaLoRaDataRate.Text = "error";
  1103.                                     break;
  1104.                             }*/
  1105.                             #endregion
  1106.                             //字節4信道號
  1107.                             txbSetParaLoRaChannel.Text = (myReceByte[4] + 398).ToString();
  1108.                             //字節5
  1109.                             //發送模式,字節5的第7位
  1110.                             cmbSetParaSendMode.Text = cmbSetParaSendMode.Items[(myReceByte[5] >> 7) & 0x01].ToString();
  1111.                             #region
  1112.                             /*if (((myReceByte[5] >> 7) & 0x01) == 1)//定點
  1113.                             {
  1114.                                 cmbSetParaSendMode.Text = "1_定點傳輸";
  1115.                             }
  1116.                             else//透明
  1117.                             {
  1118.                                 cmbSetParaSendMode.Text = "0_透明傳輸";
  1119.                             }*/
  1120.                             #endregion
  1121.                             //IO 驅動方式(默認1),字節5的第6位
  1122.                             cmbSetParaIOMode.Text = cmbSetParaIOMode.Items[(myReceByte[5] >> 6) & 0x01].ToString();
  1123.                             #region
  1124.                             /*if (((myReceByte[5] >> 6) & 0x01) == 1)//
  1125.                             {
  1126.                                 cmbSetParaIOMode.Text = "1_推挽上拉";
  1127.                             }
  1128.                             else//
  1129.                             {
  1130.                                 cmbSetParaIOMode.Text = "0_開漏浮空";
  1131.                             }*/
  1132.                             #endregion
  1133.                             //無線喚醒時間,字節5的第5、4、3位
  1134.                             cmbSetParaWakeUpTime.Text = cmbSetParaWakeUpTime.Items[(myReceByte[5] >> 3) & 0x07].ToString();
  1135.                             #region
  1136.                             /*switch ((myReceByte[5] >> 3) & 0x07)
  1137.                             {
  1138.                                 case 0://500ms(默認)
  1139.                                     cmbSetParaWakeUpTime.Text = "000_500";
  1140.                                     break;
  1141.                                 case 1://1000ms
  1142.                                     cmbSetParaWakeUpTime.Text = "001_1000";
  1143.                                     break;
  1144.                                 case 2://1500ms
  1145.                                     cmbSetParaWakeUpTime.Text = "010_1500";
  1146.                                     break;
  1147.                                 case 3://2000ms
  1148.                                     cmbSetParaWakeUpTime.Text = "011_2000";
  1149.                                     break;
  1150.                                 case 4://2500ms
  1151.                                     cmbSetParaWakeUpTime.Text = "100_2500";
  1152.                                     break;
  1153.                                 case 5://3000ms
  1154.                                     cmbSetParaWakeUpTime.Text = "101_3000";
  1155.                                     break;
  1156.                                 case 6://3500ms
  1157.                                     cmbSetParaWakeUpTime.Text = "110_3500";
  1158.                                     break;
  1159.                                 case 7://4000ms
  1160.                                     cmbSetParaWakeUpTime.Text = "111_4000";
  1161.                                     break;
  1162.                                 default:
  1163.                                     cmbSetParaWakeUpTime.Text = "error";
  1164.                                     break;
  1165.                             }*/
  1166.                             #endregion
  1167.                             //FEC 開關(默認1),字節5的第3位
  1168.                             if (((myReceByte[5] >> 2) & 0x01) == 1)//
  1169.                             {
  1170.                                 chbSetParaOpenFec.Checked = true;
  1171.                             }
  1172.                             else//
  1173.                             {
  1174.                                 chbSetParaOpenFec.Checked = false;
  1175.                             }
  1176.                             //發射功率,字節5的第1、0位
  1177.                             cmbSetParaSendPower.Text = cmbSetParaSendPower.Items[(myReceByte[5] >> 0) & 0x03].ToString();
  1178.                             #region
  1179.                             /*switch ((myReceByte[5] >> 0) & 0x03)
  1180.                             {
  1181.                                 case 0://20dBm(默認)
  1182.                                     cmbSetParaSendPower.Text = "00_20";
  1183.                                     break;
  1184.                                 case 1://17dBm
  1185.                                     cmbSetParaSendPower.Text = "01_17";
  1186.                                     break;
  1187.                                 case 2://14dBm
  1188.                                     cmbSetParaSendPower.Text = "10_14";
  1189.                                     break;
  1190.                                 case 3://10dBm
  1191.                                     cmbSetParaSendPower.Text = "11_10";
  1192.                                     break;
  1193.                                 default:
  1194.                                     cmbSetParaSendPower.Text = "error";
  1195.                                     break;
  1196.                             }*/
  1197.                             #endregion
  1198.                         #endregion
  1199.                             break;
  1200.                         case 0xC3://讀取版本號
  1201.                             txbReadVersionOut.Text = str;
  1202.                             if (myReceByte[1] == 0x28)//杭州塔石
  1203.                             {
  1204.                                 cmbSelectLoRaMode.Text = cmbSelectLoRaMode.Items[0].ToString();
  1205.                             }
  1206.                             else//成都億佰特
  1207.                             {
  1208.                                 cmbSelectLoRaMode.Text = cmbSelectLoRaMode.Items[1].ToString();
  1209.                             }
  1210.                             break;
  1211.                         default:
  1212.                             break;
  1213.                     }
  1214.                 }
  1215.                 catch (Exception)
  1216.                 {

  1217.                 }
  1218.             }
  1219.         }

  1220.         #endregion//*/

  1221.         #region 沒有使用
  1222.         public void portIDGet()//串口自動獲取
  1223.         {
  1224.             try
  1225.             {
  1226.                 comboBox1.Items.Clear();
  1227.                 foreach (string com in System.IO.Ports.SerialPort.GetPortNames())//串口檢測
  1228.                 {
  1229.                     comboBox1.Items.Add(com);
  1230.                 }

  1231.                 //comboBox1.Text = myConfing.ConfingGetValue("COM");//使用配置文件加載

  1232.             }
  1233.             catch (Exception er)
  1234.             {
  1235.                 MessageBox.Show("端口加載失敗!" + er.Message, "提示");
  1236.             }
  1237.         }
  1238.         private void comboBox1_DragDrop(object sender, DragEventArgs e)
  1239.         {
  1240.             portIDGet();
  1241.         }

  1242.         private void comboBox1_DropDown(object sender, EventArgs e)
  1243.         {
  1244.             portIDGet();
  1245.         }
  1246.         #endregion

  1247.         #region 模塊選擇
  1248.         private void cmbSelectLoRaMode_TextChanged(object sender, EventArgs e)//選擇模塊
  1249.         {
  1250.             cmbSetParaLoRaDataRate.Items.Clear();
  1251.             cmbSetParaWakeUpTime.Items.Clear();
  1252.             if (cmbSelectLoRaMode.Text == "杭州塔石")//
  1253.             {
  1254.                 //LoRa的空中速率
  1255.                 cmbSetParaLoRaDataRate.Items.Add("000_0.3K");
  1256.                 cmbSetParaLoRaDataRate.Items.Add("001_0.6K");
  1257.                 cmbSetParaLoRaDataRate.Items.Add("010_1.2K");
  1258.                 cmbSetParaLoRaDataRate.Items.Add("011_2.5K");
  1259.                 cmbSetParaLoRaDataRate.Items.Add("100_4.5K");
  1260.                 cmbSetParaLoRaDataRate.Items.Add("101_9.1K");
  1261.                 cmbSetParaLoRaDataRate.Items.Add("110_18.2K");
  1262.                 cmbSetParaLoRaDataRate.Items.Add("111_21.8K");//(默認)
  1263.                 //cmbSetParaLoRaDataRate.Text = "111_21.8K";//(默認)
  1264.                 cmbSetParaLoRaDataRate.Text = cmbSetParaLoRaDataRate.Items[7].ToString();
  1265.                 //喚醒時間
  1266.                 cmbSetParaWakeUpTime.Items.Add("000_500");//(默認)
  1267.                 cmbSetParaWakeUpTime.Items.Add("001_1000");
  1268.                 cmbSetParaWakeUpTime.Items.Add("010_1500");
  1269.                 cmbSetParaWakeUpTime.Items.Add("011_2000");
  1270.                 cmbSetParaWakeUpTime.Items.Add("100_2500");
  1271.                 cmbSetParaWakeUpTime.Items.Add("101_3000");
  1272.                 cmbSetParaWakeUpTime.Items.Add("110_3500");
  1273.                 cmbSetParaWakeUpTime.Items.Add("111_4000");
  1274.                 //cmbSetParaWakeUpTime.Text = "000_500";//(默認)
  1275.                 cmbSetParaWakeUpTime.Text = cmbSetParaWakeUpTime.Items[0].ToString();
  1276.             }
  1277.             else
  1278.             {
  1279.                 //LoRa的空中速率
  1280.                 cmbSetParaLoRaDataRate.Items.Add("000_0.3K");
  1281.                 cmbSetParaLoRaDataRate.Items.Add("001_0.6K");
  1282.                 cmbSetParaLoRaDataRate.Items.Add("010_1.2K");
  1283.                 cmbSetParaLoRaDataRate.Items.Add("011_2.4K");//(默認)
  1284.                 cmbSetParaLoRaDataRate.Items.Add("100_4.8K");
  1285.                 cmbSetParaLoRaDataRate.Items.Add("101_9.6K");
  1286.                 cmbSetParaLoRaDataRate.Items.Add("110_19.2K");
  1287.                 cmbSetParaLoRaDataRate.Items.Add("111_19.2K");
  1288.                 //cmbSetParaLoRaDataRate.Text = "011_2.4K";//(默認)
  1289.                 cmbSetParaLoRaDataRate.Text = cmbSetParaLoRaDataRate.Items[3].ToString();
  1290.                 //喚醒時間
  1291.                 cmbSetParaWakeUpTime.Items.Add("000_250");//(默認)
  1292.                 cmbSetParaWakeUpTime.Items.Add("001_500");
  1293.                 cmbSetParaWakeUpTime.Items.Add("010_750");
  1294.                 cmbSetParaWakeUpTime.Items.Add("011_1000");
  1295.                 cmbSetParaWakeUpTime.Items.Add("100_1250");
  1296.                 cmbSetParaWakeUpTime.Items.Add("101_1500");
  1297.                 cmbSetParaWakeUpTime.Items.Add("110_1750");
  1298.                 cmbSetParaWakeUpTime.Items.Add("111_2000");
  1299.                 //cmbSetParaWakeUpTime.Text = "000_250";//(默認)
  1300.                 cmbSetParaWakeUpTime.Text = cmbSetParaWakeUpTime.Items[0].ToString();
  1301.             }
  1302.         }
  1303.         #endregion

  1304.     }
  1305. }

復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:403192 發表于 2018-9-27 15:31 | 只看該作者
下載看看
回復

使用道具 舉報

板凳
ID:505211 發表于 2019-4-5 10:25 | 只看該作者
不錯的學些材料,謝謝
回復

使用道具 舉報

地板
ID:359173 發表于 2019-4-10 17:27 | 只看該作者
不錯,學習學習,點贊啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 性做久久久久久免费观看欧美 | 一级毛片免费视频观看 | 夜夜夜夜夜夜曰天天天 | 午夜精品一区 | 午夜视频免费在线 | 成人片免费看 | 国产精品久久久久久久久久久久 | 欧美成人精品一区二区三区 | 免费视频99 | 毛片一级黄色 | 狠狠的干 | 国产在线观看 | 一区二区在线免费观看 | 三级成人在线观看 | 狠狠操av | 91精品国产综合久久久久久 | www.中文字幕.com | 日韩精品在线观看视频 | 中文字幕在线电影观看 | 99精品久久 | 亚洲成人日韩 | 亚洲国产精品一区二区www | 日本特黄a级高清免费大片 国产精品久久性 | 亚洲欧美激情精品一区二区 | 狠狠色网 | 中文亚洲视频 | 精品综合网 | 欧美一级免费 | 色屁屁在线观看 | 亚洲国产精品一区二区三区 | 日韩一区二区三区在线观看 | 午夜大片 | 久久久久久国产 | 91久久网站 | 99热在线免费 | 欧美理论 | 精品粉嫩超白一线天av | 人人澡人人射 | 久久99精品久久久久子伦 | 午夜在线| 久热伊人 |