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

📄 form1.cs

📁 Universal Remote Control with PDA
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Collections;
using System.ComponentModel;
using System.IO.Ports;
using System.IO;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DeviceApplication4
{
    public partial class Form1 : Form
    {   
        //import the coredll.dll with the functions QueryPerformanceCounter
        //and QueryPerformanceFrequency
        [DllImport("coredll.dll")]
        extern static int QueryPerformanceCounter(ref long perfCounter);
        [DllImport("coredll.dll")]
        extern static int QueryPerformanceFrequency(ref long frequency);

        //initialize the parameters for the QueryPerformanceCounter
        long ctrStart = 0, ctrAkt = 0, ctrEnd = 0;
        
        //initialize the parameters for the SerialPort object
        public static String portName = "COM2";
        static int baudRate = 115200;
        public static Parity parity = Parity.None;
        static int dataBits = 7;
        public static StopBits stopBits = StopBits.One;
        SerialPort IR_COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);

        //initialize the char-array and variables for the function ManchesterCode and RohCodeToManchester
        char[] rohData = new char[14] { '1','1','0','0','0','0','0','0','0','0','0','1','0','0' };  
        public char[] manchesterData = new char[29];
        int index = 0, md = 0;
        
        //initialize the byte-array for the function BurstOut
        byte[] bufferBurst = new byte[22] { 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B };
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            GetName();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //set the ToggleBit
            ToggleBit();

            //manchester coding
            RohCodeToManchester();
 
            //open the port and send data
            try
            {
                if (IR_COM.IsOpen == false)
                {
                    IR_COM.Open();
                }

                //message   
                statusBar2.Text = "port status: open";
                    
                //send data
                BurstOut();  

                //reset the indices
                md = 0;
                index = 0;

                //message
                statusBar1.Text = "status: data has been sent";

                //close the port
                IR_COM.Close();
            }
            catch (ArgumentOutOfRangeException)
            {
                label1.Text = "Der 黚ergebene Parity-Wert oder Stopbit-Wert ist kein g黮tiger Wert in der Enumeration.";
            }
            catch (NullReferenceException nre)
            {
                label1.Text = nre.ToString();
            }
            catch (ArgumentNullException)
            {
                label1.Text = "Der 黚ergebene IsOpen-Wert ist NULL (Nothing in Visual Basic).";
            }
            catch (ArgumentException)
            {
                label1.Text = "Der 黚ergebene IsOpen-Wert ist eine leere Zeichenfolge!";
            }
            catch (IOException)	
            {
                label1.Text = "Der Port kann nicht ge鰂fnet werden!";
            }
        }

        public void GetName()
        {
            StringBuilder s = new StringBuilder();
            String s1;

            //get a list of port names
            string[] ports = SerialPort.GetPortNames();

            //display port names
            foreach (string port in ports)
            {
                s.Append(port+" ");
            }

            s1 = s.ToString();
            label1.Text = "Port Names: "+s1;
        }

        public void ManchesterCode(char c)
        {   
             if (c == '1')
             {  // 1 -> 10
                 manchesterData[index] = '1';
                 manchesterData[++index] = '0';
             }
             if (c == '0')
             {  // 0 -> 01
                 manchesterData[index] = '0';
                 manchesterData[++index] = '1';
             }
             index++;    
        }

        public void RohCodeToManchester()
        {   
            for (int i=0; i < rohData.Length; i++)
            {   //the array rohData is passed to the function ManchesterCode
                ManchesterCode(rohData[i]);
            }

            //mark the end
            manchesterData[28] = 'e';
        }

        public void ToggleBit()
        {
            if (rohData[2] == '1') rohData[2] = '0';
            else { rohData[2] = '1'; }
        }

        public void QPC(long data)
        {   //start the counter
            QueryPerformanceCounter(ref ctrStart);
            
            //specified the end time
            ctrEnd = ctrStart + data;

            while (ctrAkt < ctrEnd)
            {   //wait until the counter reaches the end time
                QueryPerformanceCounter(ref ctrAkt);
            }
        }

        public void BurstOut()
        {
            while (manchesterData[md] != 'e')
            {   
                //pause of 889祍
                if (manchesterData[md] == '1' && manchesterData[md + 1] == '0')
                {
                    QPC(319);
                }

                //pause of 1,778ms
                if (manchesterData[md] == '1' && manchesterData[md + 1] == '1')
                {
                    QPC(766);
                    md++;
                }

                //burst of 889祍
                if (manchesterData[md] == '0' && manchesterData[md + 1] == '1')
                {
                    IR_COM.Write(bufferBurst, 0, 10);
                }

                //pause of 1,778ms
                if (manchesterData[md] == '0' && manchesterData[md + 1] == '0')
                {
                    IR_COM.Write(bufferBurst, 0, 22);
                    md++;
                }

                //the end
                if (manchesterData[md] == '0' && manchesterData[md + 1] == 'e')
                {
                    IR_COM.Write(bufferBurst, 0, 10);
                }

                md++;
            }
        }      
    }
}

⌨️ 快捷键说明

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