我是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;