dinge
This commit is contained in:
parent
d751d44a00
commit
c94c6dc878
216
Testconsole/DispDriver.cs
Normal file
216
Testconsole/DispDriver.cs
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO.Ports;
|
||||||
|
|
||||||
|
namespace Testconsole {
|
||||||
|
class DispDriver {
|
||||||
|
private readonly SerialPort serial;
|
||||||
|
private readonly UInt32[,] zbuffer = new UInt32[8, 16];
|
||||||
|
|
||||||
|
private struct Digets {
|
||||||
|
public static readonly Boolean[][] Null = {
|
||||||
|
new Boolean[]{ false, true, false },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[]{ false, true, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] One = {
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, true, true },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, false, true }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Two = {
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, true, true }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Three = {
|
||||||
|
new Boolean[] { true, true, false },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { true, true, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Four = {
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, true, true },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { true, true, true },
|
||||||
|
new Boolean[] { false, false, true }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Five = {
|
||||||
|
new Boolean[] { true, true, true },
|
||||||
|
new Boolean[] { true, false, false },
|
||||||
|
new Boolean[] { true, true, false },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { true, true, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Six = {
|
||||||
|
new Boolean[] { false, true, true },
|
||||||
|
new Boolean[] { true, false, false },
|
||||||
|
new Boolean[] { true, true, true },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { false, true, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Seven = {
|
||||||
|
new Boolean[] { true, true, true },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, false, false },
|
||||||
|
new Boolean[] { true, false, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Eight = {
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { false, true, false }
|
||||||
|
};
|
||||||
|
public static readonly Boolean[][] Nine = {
|
||||||
|
new Boolean[] { false, true, false },
|
||||||
|
new Boolean[] { true, false, true },
|
||||||
|
new Boolean[] { true, true, true },
|
||||||
|
new Boolean[] { false, false, true },
|
||||||
|
new Boolean[] { true, true, false }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public DispDriver(String com) {
|
||||||
|
this.serial = new SerialPort(com, 19200);
|
||||||
|
this.serial.Open();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawDigets(String number, UInt32 color) {
|
||||||
|
Int32 sub = number.Length;
|
||||||
|
if(number.Length > 4 && number.Substring(0, 5).Contains(".")) {
|
||||||
|
sub = 5;
|
||||||
|
} else if(number.Length >= 4) {
|
||||||
|
sub = 4;
|
||||||
|
}
|
||||||
|
String a = number.Substring(0, sub);
|
||||||
|
Int32 y = 0;
|
||||||
|
foreach(Char item in a) {
|
||||||
|
if(item != '.') {
|
||||||
|
this.CopyDigetToZbuffer(this.GetDiget(item), 3, y, color);
|
||||||
|
y += 4;
|
||||||
|
} else {
|
||||||
|
this.DrawDot(y-1, 7, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawDot(Int32 x, Int32 y, UInt32 color) {
|
||||||
|
try {
|
||||||
|
this.zbuffer[y, x] = color;
|
||||||
|
} catch {
|
||||||
|
Console.WriteLine("out of bound");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawLineX(Int32 x, Int32 y, Int32 l, UInt32 color) {
|
||||||
|
for(Int32 i = x; i < x+l; i++) {
|
||||||
|
this.DrawDot(i, y, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawLineY(Int32 x, Int32 y, Int32 l, UInt32 color) {
|
||||||
|
for(Int32 i = y; i < y + l; i++) {
|
||||||
|
this.DrawDot(x, i, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Write() {
|
||||||
|
this.Clear();
|
||||||
|
List<UInt32> colors = this.GetAllColors();
|
||||||
|
foreach(UInt32 item in colors) {
|
||||||
|
this.serial.Write(String.Join(" ", this.GetZbufferPage(0, item)) + " " + String.Join(" ", this.GetZbufferPage(1, item)) + " " + String.Join(" ", this.GetAllColors(item)) + "\n");
|
||||||
|
}
|
||||||
|
this.ClearZbuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear() => this.serial.Write("clear\n");
|
||||||
|
|
||||||
|
private void ClearZbuffer() {
|
||||||
|
for(Int32 i = 0; i < 8; i++) {
|
||||||
|
for(Int32 j = 0; j < 16; j++) {
|
||||||
|
this.zbuffer[i, j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] GetAllColors(UInt32 color) {
|
||||||
|
String[] ret = new String[3];
|
||||||
|
ret[0] = ((Byte)((color & 0x00FF0000) >> 16)).ToString().PadLeft(3, '0');
|
||||||
|
ret[1] = ((Byte)((color & 0x0000FF00) >> 8)).ToString().PadLeft(3, '0');
|
||||||
|
ret[2] = ((Byte)((color & 0x000000FF) >> 0)).ToString().PadLeft(3, '0');
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] GetZbufferPage(Int32 page, UInt32 color) {
|
||||||
|
String[] ret = new String[8];
|
||||||
|
for(Int32 i = 0; i < 8; i++) {
|
||||||
|
Byte p = 0;
|
||||||
|
for(Int32 j = 0; j < 8; j++) {
|
||||||
|
if(this.zbuffer[i,j+(page*8)] == color) {
|
||||||
|
p |= (Byte)(1 << (7 - j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret[i] = p.ToString().PadLeft(3,'0');
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<UInt32> GetAllColors() {
|
||||||
|
List<UInt32> colors = new List<UInt32>();
|
||||||
|
foreach(UInt32 item in this.zbuffer) {
|
||||||
|
if(!colors.Contains(item) && item != 0) {
|
||||||
|
colors.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return colors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Boolean[][] GetDiget(Char item) {
|
||||||
|
switch(item) {
|
||||||
|
case '1':
|
||||||
|
return Digets.One;
|
||||||
|
case '2':
|
||||||
|
return Digets.Two;
|
||||||
|
case '3':
|
||||||
|
return Digets.Three;
|
||||||
|
case '4':
|
||||||
|
return Digets.Four;
|
||||||
|
case '5':
|
||||||
|
return Digets.Five;
|
||||||
|
case '6':
|
||||||
|
return Digets.Six;
|
||||||
|
case '7':
|
||||||
|
return Digets.Seven;
|
||||||
|
case '8':
|
||||||
|
return Digets.Eight;
|
||||||
|
case '9':
|
||||||
|
return Digets.Nine;
|
||||||
|
default:
|
||||||
|
return Digets.Null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CopyDigetToZbuffer(Boolean[][] diget, Int32 x, Int32 y, UInt32 color) {
|
||||||
|
try {
|
||||||
|
for(Int32 i = 0; i < diget.Length; i++) {
|
||||||
|
for(Int32 j = 0; j < diget[i].Length; j++) {
|
||||||
|
this.zbuffer[i + x, j + y] = diget[i][j] ? color : this.zbuffer[i + x, j + y];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Console.WriteLine("out of bound");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -9,9 +9,19 @@ namespace Testconsole {
|
|||||||
|
|
||||||
Program() {
|
Program() {
|
||||||
Console.WriteLine("Start");
|
Console.WriteLine("Start");
|
||||||
|
|
||||||
|
DispDriver a = new DispDriver("COM3");
|
||||||
|
for(Double i = 0; i < 1000; i = i + 0.5) {
|
||||||
|
a.DrawDigets(i.ToString().Replace(",", "."), 0x110000);
|
||||||
|
a.Write();
|
||||||
|
System.Threading.Thread.Sleep(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
//a.DrawLineX(0, 0, 16, 0xFF0000);
|
||||||
|
//a.DrawLineY(0, 1, 2, 0x00FF00);
|
||||||
|
|
||||||
this.WaitForShutdown();
|
this.WaitForShutdown();
|
||||||
Console.WriteLine("Shutdown");
|
Console.WriteLine("Shutdown");
|
||||||
Console.ReadLine();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WaitForShutdown() {
|
private void WaitForShutdown() {
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="DispDriver.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
Loading…
Reference in New Issue
Block a user