using System; using System.Net; using System.Net.Sockets; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; using System.IO;
namespace NetduinoApplication2 { public class Program { static OutputPort _dcPort; static OutputPort _resetPort; static SPI _spi;
public static void Main() { _dcPort = new OutputPort(Pins.GPIO_PIN_D9, true); _resetPort = new OutputPort(Pins.GPIO_PIN_D8, false);
_spi = new SPI(new SPI.Configuration(Pins.GPIO_PIN_D10, false, 0, 0, true, true, 8000, SPI_Devices.SPI1));
_resetPort.Write(false); Thread.Sleep(100); _resetPort.Write(true); Thread.Sleep(100);
InitializeLcd();
if (false) { SetAddress(0, 0, 239, 319);
var path = @"SD\nanikabitmapdata.bin"; var buffer = new byte[16 * 1024]; using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { int readLen = 0;
while (true) { readLen = stream.Read(buffer, 0, buffer.Length);
if (readLen == 0) break;
if (readLen != buffer.Length) { var tmp = new byte[readLen]; Array.Copy(buffer, tmp, readLen);
WriteData(tmp); } else { WriteData(buffer); } } } } else { ushort x = 100; ushort y = 100; ushort width = 40; ushort height = 40; ushort color = 0x07E0;
SetAddress(x, y, (ushort)(x + width - 1), (ushort)(y + height - 1)); for (var i = 0; i < width * height; i++) { WriteData(color); } } }
static void InitializeLcd() { Debug.Print("Display Power Mode: 0x" + ReadCommand(0x0A).ToString("x")); Debug.Print("MADCTL Mode: 0x" + ReadCommand(0x0B).ToString("x")); Debug.Print("Pixel Format: 0x" + ReadCommand(0x0C).ToString("x")); Debug.Print("Image Format: 0x" + ReadCommand(0x0A).ToString("x")); Debug.Print("Self Diagnostic: 0x" + ReadCommand(0x0F).ToString("x"));
WriteCommandAndData(0xEF, new byte[] { 0x03, 0x80, 0x02 }); WriteCommandAndData(0xCF, new byte[] { 0x00, 0xC1, 0x30 }); WriteCommandAndData(0xED, new byte[] { 0x64, 0x03, 0x12, 0x81 }); WriteCommandAndData(0xE8, new byte[] { 0x85, 0x00, 0x78 }); WriteCommandAndData(0xCB, new byte[] { 0x39, 0x2C, 0x00, 0x34, 0x02 }); WriteCommandAndData(0xF7, new byte[] { 0x20 }); WriteCommandAndData(0xEA, new byte[] { 0x00, 0x00 }); WriteCommandAndData(0xC0, new byte[] { 0x23 }); WriteCommandAndData(0xC1, new byte[] { 0x10 }); WriteCommandAndData(0xC5, new byte[] { 0x3e, 0x28 }); WriteCommandAndData(0xC7, new byte[] { 0x86 }); WriteCommandAndData(0x36, new byte[] { 0x48 }); WriteCommandAndData(0x3A, new byte[] { 0x55 }); WriteCommandAndData(0xB1, new byte[] { 0x00, 0x18 }); WriteCommandAndData(0xB6, new byte[] { 0x08, 0x82, 0x27 }); WriteCommandAndData(0xF2, new byte[] { 0x00 }); WriteCommandAndData(0x26, new byte[] { 0x01 }); WriteCommandAndData(0xE0, new byte[] { 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00 }); WriteCommandAndData(0XE1, new byte[] { 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F }); WriteCommand(0x11);
Thread.Sleep(120);
WriteCommand(0x29); }
static void SetAddress(ushort x, ushort y, ushort x2, ushort y2) { WriteCommand(0x2A); WriteData(x); WriteData(x2); WriteCommand(0x2B); WriteData(y); WriteData(y2); WriteCommand(0x2C); }
static byte ReadCommand(byte command) { var buffer = new byte[1]; buffer[0] = command;
_dcPort.Write(false); _spi.WriteRead(buffer, buffer);
_dcPort.Write(true); buffer[0] = 0x0; _spi.WriteRead(buffer, buffer);
return buffer[0]; }
static void WriteCommand(byte command) { var buffer = new byte[1]; buffer[0] = command;
_dcPort.Write(false); _spi.WriteRead(buffer, buffer); }
static void WriteData(ushort data) { var hi = (byte)(data >> 8); var lo = (byte)(data & 0xFF);
WriteData(new[] { hi, lo }); }
static void WriteData(byte data) { WriteData(new[] { data }); }
static void WriteData(byte[] data) { _dcPort.Write(true); _spi.Write(data); }
static void WriteCommandAndData(byte command, byte[] data) { WriteCommand(command); WriteData(data); } } }
|