Here is an Arduino version of the Chinese 8051 program.
I have omitted the Font tests. But added some nested rectangles.
Edit CS, DC, ... etc for your wiring.
Please let me know if you see the colours and rectangles properly.
#include <SPI.h>
#define CS 10
#define DC 9
#define RST 8
#define BL 7
#define uchar unsigned char
#define uint unsigned int
#define Xoffset 24
#define Yoffset 0
#define RED 0xf800
#define GREEN 0x07e0
#define BLUE 0x001f
#define WHITE 0xffff
#define BLACK 0x0000
#define YELLOW 0xFFE0
#define GRAY0 0xEF7D
#define GRAY1 0x8410
#define GRAY2 0x4208
void Contrast_Adjust();
//code uint typFNT_GBK16 hz16[];
void Output_Pixel(uint x, uint y);
void delay_ms(uint time)
{
delay(time);
}
void SPI_WriteData(uchar Data)
{
SPI.transfer(Data);
}
void Lcd_WriteIndex(uchar Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, LOW);
SPI_WriteData(Data);
digitalWrite(CS, HIGH);
}
//ÏòÒº¾§ÆÁдһ¸ö8λÊý¾Ý
void Lcd_WriteData(uchar Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, HIGH);
SPI_WriteData(Data);
digitalWrite(CS, HIGH);
}
//ÏòÒº¾§ÆÁдһ¸ö16λÊý¾Ý
void LCD_WriteData_16Bit(unsigned int Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, HIGH);
SPI_WriteData(Data >> 8); //дÈë¸ß8λÊý¾Ý
SPI_WriteData(Data); //дÈëµÍ8λÊý¾Ý
digitalWrite(CS, HIGH);
}
void Reset()
{
digitalWrite(RST, LOW);
delay_ms(100);
digitalWrite(RST, HIGH);
delay_ms(100);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//Òº¾§ÆÁ³õʼ»¯
void initial(void)
{
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xef);
Lcd_WriteIndex(0xb3);
Lcd_WriteData(0x03);
Lcd_WriteIndex(0x36);
Lcd_WriteData(0xd8);
Lcd_WriteIndex(0x3a);
Lcd_WriteData(0x05);
Lcd_WriteIndex(0xb6);
Lcd_WriteData(0x11);
Lcd_WriteIndex(0xac);
Lcd_WriteData(0x0b);
Lcd_WriteIndex(0xb4);
Lcd_WriteData(0x21);
Lcd_WriteIndex(0xb1);
Lcd_WriteData(0xc0);
Lcd_WriteIndex(0xe6);
Lcd_WriteData(0x50);
Lcd_WriteData(0x43);
Lcd_WriteIndex(0xe7);
Lcd_WriteData(0x56);
Lcd_WriteData(0x43);
Lcd_WriteIndex(0xF0);
Lcd_WriteData(0x1f);
Lcd_WriteData(0x41);
Lcd_WriteData(0x1B);
Lcd_WriteData(0x55);
Lcd_WriteData(0x36);
Lcd_WriteData(0x3d);
Lcd_WriteData(0x3e);
Lcd_WriteData(0x0);
Lcd_WriteData(0x16);
Lcd_WriteData(0x08);
Lcd_WriteData(0x09);
Lcd_WriteData(0x15);
Lcd_WriteData(0x14);
Lcd_WriteData(0xf);
Lcd_WriteIndex(0xF1);
Lcd_WriteData(0x1f);
Lcd_WriteData(0x41);
Lcd_WriteData(0x1B);
Lcd_WriteData(0x55);
Lcd_WriteData(0x36);
Lcd_WriteData(0x3d);
Lcd_WriteData(0x3e);
Lcd_WriteData(0x0);
Lcd_WriteData(0x16);
Lcd_WriteData(0x08);
Lcd_WriteData(0x09);
Lcd_WriteData(0x15);
Lcd_WriteData(0x14);
Lcd_WriteData(0xf);
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xff);
Lcd_WriteIndex(0x35);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0x44);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0x11);
delay_ms (120);
Lcd_WriteIndex(0x29);
//Lcd_WriteIndex(0x2c);
Lcd_WriteIndex(0x2A); //Set Column Address
Lcd_WriteData(0x00);
Lcd_WriteData(0x18);
Lcd_WriteData(0x00);
Lcd_WriteData(0x67);
Lcd_WriteIndex(0x2B); //Set Page Address
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x9f);
Lcd_WriteIndex(0x2c);
}
void Lcd_SetRegion(unsigned int x_start, unsigned int y_start, unsigned int x_end, unsigned int y_end)
{
Lcd_WriteIndex(0x2a);
Lcd_WriteData(0x00);
Lcd_WriteData(x_start + Xoffset);
Lcd_WriteData(0x00);
Lcd_WriteData(x_end + Xoffset);
Lcd_WriteIndex(0x2b);
Lcd_WriteData(0x00);
Lcd_WriteData(y_start + Yoffset);
Lcd_WriteData(0x00);
Lcd_WriteData(y_end + Yoffset);
Lcd_WriteIndex(0x2c);
}
void PutPixel(uint x_start, uint y_start, uint color)
{
Lcd_SetRegion(x_start, y_start, x_start + 1, y_start + 1);
LCD_WriteData_16Bit(color);
}
void fillRect(uint x, uint y, uint w, uint h, uint color)
{
Lcd_SetRegion(x, y, x + w - 1, y + h - 1);
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
LCD_WriteData_16Bit(color);
}
}
}
void drawRect(uint x, uint y, uint w, uint h, uint color)
{
fillRect(x, y, w, 1, color);
fillRect(x, y + h - 1, w, 1, color);
fillRect(x, y, 1, h, color);
fillRect(x + w - 1, y, 1, h, color);
}
void dsp_single_colour(int color)
{
fillRect(0, 0, 80, 160, color);
drawRect(0, 0, 80, 160, WHITE); //outer rectangle
drawRect(8, 8, 64, 144, BLACK); //inner rectangle
delay(1000);
}
void setup()
{
SPI.begin();
pinMode(CS, OUTPUT);
pinMode(DC, OUTPUT);
pinMode(RST, OUTPUT);
pinMode(BL, OUTPUT);
digitalWrite(BL, HIGH);
Reset();
initial();
}
void loop(void)
{
//Font_Test();
dsp_single_colour(0xf800);//RED
dsp_single_colour(0x07e0);//GREEN
dsp_single_colour(0x001f);//BLUE
delay_ms(5000);
}
#if 0
{
// my style of init table: (cmd), N, data...
(0xfe), 0,
(0xfe), 0,
(0xfe), 0,
(0xef), 0,
(0xb3), 1, 0x03,
(0x36), 1, 0xd8,
(0x3a), 1, 0x05,
(0xb6), 1, 0x11,
(0xac), 1, 0x0b,
(0xb4), 1, 0x21,
(0xb1), 1, 0xc0,
(0xe6), 2, 0x50, 0x43,
(0xe7), 2, 0x56, 0x43,
(0xF0), 12, 0x1f, 0x41, 0x1B, 0x55, 0x36, 0x3d, 0x3e, 0x0, 0x16, 0x08, 0x09, 0x15, 0x14, 0xf,
(0xF1), 12, 0x1f, 0x41, 0x1B, 0x55, 0x36, 0x3d, 0x3e, 0x0, 0x16, 0x08, 0x09, 0x15, 0x14, 0xf,
(0xfe), 0,
(0xff), 0,
(0x35), 1, 0x00,
(0x44), 1, 0x00,
(0x11), 0,
delay_ms (120);
(0x29), 0,
/*** (0x2c), 0,***/
(0x2A), 4, /***Set Column Address***/ 0x00, 0x18, 0x00, 0x67,
(0x2B), 4, /***Set Page Address***/ 0x00, 0x00, 0x00, 0x9f,
(0x2c), 0,
};
#endif