C#串口数据输出被覆盖

时间:2014-12-31 08:59:10

标签: c# animation buffer lcd

我是C#的新手,但我有一个问题,如果我没有添加延迟(代码中的消息框),似乎会覆盖串口输出的数据。

我试图通过串口将命令发送到特殊的LCD设备,首先是2d阵列中的硬编码动画,但是没有用,然后我尝试从日志文件中读取命令(参见代码)并将其从串口输出,也没有用,现在我只是简单地编写我自己的闪屏(1d阵列),而且我的数据有效地将端口发送到我的设备上。

我的代码被混淆了,因为我一直在尝试很多东西。在(消息框)中添加延迟时,数据输出完美(LCD显示图像很好)但没有它们,似乎某些字节被覆盖

请忽略我的评论代码(我已经尝试了很多想法)

' splashscreen'的内容,1024字节

byte [] splashscreen = {
 85,  85,  85,  85,  85,  85, ...Deleted stuff....... , 170, 170, 170, 170, 170, 170, 170, 
 85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 
 85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85, 
170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170
};

我的代码段



private void testButton_Click(object sender, EventArgs e)
            {
                int frame;
                
                byte[] data = {0x20, 0x0c, 0x30, 0x12, 0x03, 0x32, 0x02, 0x30, 0x03, 0x32, 0x02, 0x30, 0x02, 0x31} ;
                byte[] data2 = new byte[10];
    
                progressbarProgress.Enabled = true;
                progressbarProgress.Visible = true;
                labelProgressTitle.Enabled = true;
                labelProgressTitle.Visible = true;
                labelProgress.Enabled = true;
                labelProgress.Visible = true;
                picturebox1.Enabled = true;
                picturebox1.Visible = true;
                
                serialPort1.Close();            // its openned elsewhere
                serialPort1.PortName = "COM5";  // duplication of params
                serialPort1.DataBits = 8;
                serialPort1.StopBits = StopBits.One;
                serialPort1.Parity = Parity.None;
                serialPort1.BaudRate = 9600;
                serialPort1.Open();
                serialPort1.DiscardInBuffer();      // just in case
                serialPort1.DiscardOutBuffer();
    
                //MessageBox.Show("Interface Setop Complete");
                
                //assign Log file into file object
                System.IO.StreamReader file = new System.IO.StreamReader(@"c:\Kabir\PROJECTS\INCOMING\DEV\SimpleSerial\log.log");
                file.BaseStream.Position = 0;
                
                //trying another method
                char[] buffer = new char[71451];
                int x = file.ReadBlock(buffer, 0, 71451);
    
                // secondary commands - GFX fill mode
                data2[0] = 0x0e;
                data2[1] = 0x0;
                data2[2] = 0x0;
                data2[3] = 0x04;
                data2[4] = 0x00;
                data2[5] = 0x92;
    
                serialPort1.Write(data,0,14); // setup display
                //MessageBox.Show("Clear Screen ETC");
                while (serialPort1.BytesToWrite > 0) ;
                //serialPort1.DiscardOutBuffer();
    
                serialPort1.Write(data2, 0, 5);//enable gfx fill mode
                //MessageBox.Show("GFX fill mode");
                while (serialPort1.BytesToWrite > 0) ;
                //serialPort1.DiscardOutBuffer();
    
                serialPort1.Write(splashscreen, 0, 1024);
                while (serialPort1.BytesToWrite > 0) ;
                //MessageBox.Show("Fill Complete");
                //serialPort1.DiscardOutBuffer();
    
    
                //for (counter = 0; counter < splashscreen.Length; counter++)
                //{
                //    //serialPort1.Write("" + (char)file.Read());
                //    //data2[5] = Convert.ToByte(buffer[counter]);
                //    //textboxRecieve.Text = Convert.ToString(data2[5]);
                //    serialPort1.Write(splashscreen, counter, 1);
    
                //    //progressbarProgress.Increment(1);
                //    //                System.Threading.Thread.Sleep(200);
                //}
                serialPort1.DiscardOutBuffer();
                file.BaseStream.Position = 0;
                file.DiscardBufferedData();
                file.Close();
                MessageBox.Show("DONE");
                //serialPort1.Write(" ");
                //serialPort1.Write(data,0,14);
                
                
                //for (frame=0; frame < 35; frame++)
                //{
                //    serialPort1.Write("" + (char)14+ (char)0+ (char)0+ (char)4+ (char)0 );
                //    for (counter = 0; counter < 1024; counter++)
                //    {
                //        serialPort1.Write(""+(char)animation1[frame,counter] );
                //        progressbarProgress.Increment(1);
                //    }
                //        //serialPort1.Write(animation1[)
                //}
                //serialPort1.Write("" + (char)14 + (char)0 + (char)0 + (char)0 + (char)16 );
    
                //////////data2[0] = 0x0e;
                //////////data2[1] = 0x0;
                //////////data2[2] = 0x0;
                //////////data2[3] = 0x0;
                //////////data2[4] = 16*10;
                //////////data2[5] = 0x92;
                //////////serialPort1.Write(data2, 0, 5); 
                //////////for (counter = 1; counter < data2[4] + 1 ; counter++ )
                //////////{
                //////////    serialPort1.Write(data2, 5, 1); 
                //////////}
                
                //serialPort1.Write("" + (char)14 + (char)0 + (char)0 + (char)4 + (char)0);
    
                //for (counter = 0; counter < 1024; counter++)
                //{
                //    serialPort1.Write("" + (char)splashscreen[counter]);
                //    //progressbarProgress.Increment(1);
                //}
    
                //for (counter = 0; counter < 1024; counter++)
                //{
                //    serialPort1.Write("" + (char)splashscreen[counter]);
                //    progressbarProgress.Increment(1);
                //}
    
                //counter = 0;
                //string line;
                //byte value;
                //char characters;
                //int filecharacter;
    
                //filecharacter = file.Read();
    
                //while ((line = file.ReadLine()) != null)
                //{
                //    for (counter = 1; counter < 100; counter++)
                //    {
                //        filecharacter = file.Peek();
                //        textboxRecieve.Text = textboxRecieve.Text + " " + Convert.ToString(file.Read()); //); // (file.Peek);
                //    }
    
                //    file.BaseStream.Position = 0;
                //    file.DiscardBufferedData();
    
                //    counter++;
                //}
    
                //file.Close();
    
                progressbarProgress.Enabled = false;
                progressbarProgress.Visible = false;
                progressbarProgress.Value = 0;
                labelProgressTitle.Enabled = false;
                labelProgressTitle.Visible = false;
                labelProgress.Enabled = false;
                labelProgress.Visible = false;
                picturebox1.Enabled = false;
                picturebox1.Visible = false;
                //serialPort1.Write( Convert.ToString());
                // start test routines
    
           //     if (flag1 == 1) // checks for function 1st entrance
           //    {
           //         textboxRecieve.Text = textboxRecieve.Text + serialPort1.ReadExisting();
           //         //DEL:AY a bit
           //         flag1= 0;
           //     }
           //serialPort1.Write("This is the stuff sent to the buffer"+DateTime.Now);
           
                
            } // end Button click event for TEST-BUTTON
&#13;
&#13;
&#13;

0 个答案:

没有答案
相关问题