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() {
|
||||
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();
|
||||
Console.WriteLine("Shutdown");
|
||||
Console.ReadLine();
|
||||
Console.WriteLine("Shutdown");
|
||||
}
|
||||
|
||||
private void WaitForShutdown() {
|
||||
|
@ -44,6 +44,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DispDriver.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
|
Loading…
Reference in New Issue
Block a user