//------------------------------------------------- // Shenzhen TOPWAY Technology Co.,Ltd. // LCD Module: LMT028ENHFWA // Display Size: 240RGBx320 // Driver/Controller: ST7789VI // Interface: 80 mode // by: likeke // Date: 2020-01-15 // note: W78E052D 6T@20MHZ // rev: new //---------------------------------------------------- #include #include #include #define uchar unsigned char // 8bit, 0 ~ 255 #define uint unsigned int // 16bit, 0 ~ 65,535 #define ulong unsigned long // 32bit, 0 ~ 4,294,967,295 #define RED 0xf800 #define GREEN 0x07e0 #define BLUE 0x001f #define YELLOW 0xffe0 #define CYAN 0x07ff #define MAGENTA 0xf81f #define BLACK 0x0000 #define WHITE 0xffff #define GRAY 0x8410 #define hi_re 0xf800 #define hi_or 0xfc00 #define hi_ye 0xffb0 #define hi_yg 0x87e0 #define hi_gr 0x07e0 #define hi_gc 0x07f0 #define hi_cy 0x07ff #define hi_cb 0x041f #define hi_bl 0x001f #define hi_bm 0x801f #define hi_ma 0xf8f1 #define hi_mr 0xf810 #define mid_re 0x8000 #define mid_or 0x8200 #define mid_ye 0x8400 #define mid_yg 0x4400 #define mid_gr 0x0400 #define mid_gc 0x0408 #define mid_cy 0x0410 #define mid_cb 0x0210 #define mid_bl 0x0010 #define mid_bm 0x4010 #define mid_ma 0x8010 #define mid_mr 0x8008 #define GRAY00 0x0000 #define GRAY01 0x1082 #define GRAY02 0x2104 #define GRAY03 0x3186 #define GRAY04 0x4208 #define GRAY05 0x528a #define GRAY06 0x630c #define GRAY07 0x738e #define GRAY08 0x8410 #define GRAY09 0x9492 #define GRAY10 0xa514 #define GRAY11 0xb596 #define GRAY12 0xc618 #define GRAY13 0xd69a #define GRAY14 0xe71c #define GRAY15 0xffff uchar bdata btemp; // create a bit accessable byte sbit btemp_b0 = btemp^0; sbit btemp_b1 = btemp^1; sbit btemp_b2 = btemp^2; sbit btemp_b3 = btemp^3; sbit btemp_b4 = btemp^4; sbit btemp_b5 = btemp^5; sbit btemp_b6 = btemp^6; sbit btemp_b7 = btemp^7; #define LCDBUS P1 sbit _CS = P3^4; sbit _RES = P3^5; sbit RS = P3^6; sbit _WR = P3^7; sbit _RD = P3^1; /*sbit BLEN = P2^4;*/ uint code GRAY_64[]={ 0x0000,0x0020,0x0841,0x0861, 0x1082,0x10A2,0x18C3,0x18E3, 0x2104,0x2124,0x2945,0x2965, 0x3186,0x31A6,0x39C7,0x39E7, 0x4208,0x4228,0x4A49,0x4A69, 0x528A,0x52AA,0x5ACB,0x5AEB, 0x630C,0x632C,0x6B4D,0x6B6D, 0x738E,0x73AE,0x7BCF,0x7BEF, 0x8410,0x8430,0x8C51,0x8C71, 0x9492,0x94B2,0x9CD3,0x9CF3, 0xA514,0xA534,0xAD55,0xAD75, 0xB596,0xB5B6,0xBDD7,0xBDF7, 0xC618,0xC638,0xCE59,0xCE79, 0xD69A,0xD6BA,0xDEDB,0xDEFB, 0xE71C,0xE73C,0xEF5D,0xEF7D, 0xF79E,0xF7BE,0xFFDF,0xFFFF }; uint code GRAY_16[]={ 0x0000,0x0000,0x0000,0x0000, 0x1082,0x1082,0x1082,0x1082, 0x2104,0x2104,0x2104,0x2104, 0x3186,0x3186,0x3186,0x3186, 0x4208,0x4208,0x4208,0x4208, 0x528a,0x528a,0x528a,0x528a, 0x630c,0x630c,0x630c,0x630c, 0x738e,0x738e,0x738e,0x738e, 0x8410,0x8410,0x8410,0x8410, 0x9492,0x9492,0x9492,0x9492, 0xa514,0xa514,0xa514,0xa514, 0xb596,0xb596,0xb596,0xb596, 0xc618,0xc618,0xc618,0xc618, 0xd69a,0xd69a,0xd69a,0xd69a, 0xe71c,0xe71c,0xe71c,0xe71c, 0xffff,0xffff,0xffff,0xffff }; uint code RED_64[]={ 0x0000,0x0000,0x0800,0x0800, 0x1000,0x1000,0x1800,0x1800, 0x2000,0x2000,0x2800,0x2800, 0x3000,0x3000,0x3800,0x3800, 0x4000,0x4000,0x4800,0x4800, 0x5000,0x5000,0x5800,0x5800, 0x6000,0x6000,0x6800,0x6800, 0x7000,0x7000,0x7800,0x7800, 0x8000,0x8000,0x8800,0x8800, 0x9000,0x9000,0x9800,0x9800, 0xA000,0xA000,0xA800,0xA800, 0xB000,0xB000,0xB800,0xB800, 0xC000,0xC000,0xC800,0xC800, 0xD000,0xD000,0xD800,0xD800, 0xE000,0xE000,0xE800,0xE800, 0xF000,0xF000,0xF800,0xF800 }; uint code GREEN_64[]={ 0x0000,0x0020,0x0040,0x0060, 0x0080,0x00A0,0x00C0,0x00E0, 0x0100,0x0120,0x0140,0x0160, 0x0180,0x01A0,0x01C0,0x01E0, 0x0200,0x0220,0x0240,0x0260, 0x0280,0x02A0,0x02C0,0x02E0, 0x0300,0x0320,0x0340,0x0360, 0x0380,0x03A0,0x03C0,0x03E0, 0x0400,0x0420,0x0440,0x0460, 0x0480,0x04A0,0x04C0,0x04E0, 0x0500,0x0520,0x0540,0x0560, 0x0580,0x05A0,0x05C0,0x05E0, 0x0600,0x0620,0x0640,0x0660, 0x0680,0x06A0,0x06C0,0x06E0, 0x0700,0x0720,0x0740,0x0760, 0x0780,0x07A0,0x07C0,0x07E0 }; uint code BLUE_64[]={ 0x0000,0x0000,0x0001,0x0001, 0x0002,0x0002,0x0003,0x0003, 0x0004,0x0004,0x0005,0x0005, 0x0006,0x0006,0x0007,0x0007, 0x0008,0x0008,0x0009,0x0009, 0x000A,0x000A,0x000B,0x000B, 0x000C,0x000C,0x000D,0x000D, 0x000E,0x000E,0x000F,0x000F, 0x0010,0x0010,0x0011,0x0011, 0x0012,0x0012,0x0013,0x0013, 0x0014,0x0014,0x0015,0x0015, 0x0016,0x0016,0x0017,0x0017, 0x0018,0x0018,0x0019,0x0019, 0x001A,0x001A,0x001B,0x001B, 0x001C,0x001C,0x001D,0x001D, 0x001E,0x001E,0x001F,0x001F }; uchar code monoLOGO[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F, 0xFF,0x80,0x7F,0x00,0x7F,0xF8,0x78,0x1F,0x03,0xC0,0x7C,0x07,0x80,0x1E,0x7F,0xFF, 0x81,0xFF,0xC0,0x7F,0xFC,0x78,0x1F,0x03,0xC0,0xFE,0x07,0xC0,0x3E,0x7F,0xFF,0x83, 0xFF,0xE0,0x7F,0xFE,0x38,0x1F,0x03,0x80,0xFE,0x03,0xE0,0x7C,0x7F,0xFF,0x87,0xFF, 0xF0,0x7F,0xFF,0x3C,0x3F,0x87,0x80,0xFE,0x01,0xE0,0x78,0x01,0xE0,0x0F,0xC1,0xF8, 0x78,0x1F,0x3C,0x3B,0x87,0x81,0xEF,0x01,0xF0,0xF8,0x01,0xE0,0x0F,0x00,0xF8,0x78, 0x0F,0x3C,0x3B,0x87,0x81,0xEF,0x00,0xF0,0xF0,0x01,0xE0,0x1F,0x00,0x7C,0x78,0x0F, 0x3C,0x3B,0x87,0x81,0xEF,0x00,0x79,0xE0,0x01,0xE0,0x1E,0x00,0x3C,0x78,0x1F,0x1C, 0x7B,0xC7,0x03,0xC7,0x80,0x7F,0xE0,0x01,0xE0,0x1E,0x00,0x3C,0x7F,0xFF,0x1C,0x71, 0xC7,0x03,0xC7,0x80,0x3F,0xC0,0x01,0xE0,0x1E,0x00,0x3C,0x7F,0xFE,0x1E,0x71,0xCF, 0x03,0xC7,0x80,0x1F,0x80,0x01,0xE0,0x1E,0x00,0x3C,0x7F,0xFC,0x1E,0x71,0xCF,0x07, 0x83,0xC0,0x1F,0x80,0x01,0xE0,0x1E,0x00,0x3C,0x7F,0xF0,0x1E,0x71,0xCF,0x07,0x83, 0xC0,0x0F,0x00,0x01,0xE0,0x1E,0x00,0x3C,0x78,0x00,0x0E,0xE0,0xEE,0x07,0xFF,0xC0, 0x0F,0x00,0x01,0xE0,0x1F,0x00,0x7C,0x78,0x00,0x0E,0xE0,0xEE,0x0F,0xFF,0xE0,0x0F, 0x00,0x01,0xE0,0x0F,0x80,0xF8,0x78,0x00,0x0E,0xE0,0xEE,0x0F,0xFF,0xE0,0x0F,0x00, 0x01,0xE0,0x0F,0xC1,0xF8,0x78,0x00,0x0E,0xE0,0xEE,0x0F,0x01,0xE0,0x0F,0x00,0x01, 0xE0,0x07,0xFF,0xF0,0x78,0x00,0x0F,0xC0,0x7E,0x1E,0x00,0xF0,0x0F,0x00,0x01,0xE0, 0x03,0xFF,0xE0,0x78,0x00,0x07,0xC0,0x7C,0x1E,0x00,0xF0,0x0F,0x00,0x01,0xE0,0x01, 0xFF,0xC0,0x78,0x00,0x07,0xC0,0x7C,0x1E,0x00,0xF0,0x0F,0x00,0x01,0xE0,0x00,0x7F, 0x00,0x78,0x00,0x07,0xC0,0x7C,0x3C,0x00,0x78,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}; uchar code monoTITLE[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x70,0x77,0xF8,0xE1,0xE1,0xF3,0xF7, 0x0C,0xC1,0x9F,0xE1,0x86,0x18,0x00,0x30,0x78,0x77,0xF9,0xF3,0xF3,0x1B,0xF7,0x0C, 0xC1,0x9F,0xF1,0xC6,0x3C,0x00,0x30,0x78,0xF0,0xC3,0xBA,0x33,0x1B,0x07,0x8C,0xC1, 0x98,0x33,0xCE,0x3C,0x00,0x30,0x7C,0xF0,0xC3,0x18,0x33,0x1B,0x07,0xCC,0xC1,0x98, 0x33,0xCC,0x3C,0x00,0x30,0x6C,0xB0,0xC3,0x18,0x71,0xF3,0xF6,0xCC,0xFF,0x9F,0xB3, 0xCC,0x66,0x00,0x30,0x6C,0xB0,0xC3,0x18,0xE1,0xF3,0xF6,0x6C,0xFF,0x9F,0xBA,0x4C, 0x66,0x00,0x30,0x67,0xB0,0xC3,0x19,0xC3,0x1B,0x06,0x7C,0xC1,0x98,0x1E,0x78,0xFF, 0x00,0x30,0x67,0xB0,0xC3,0xBB,0x83,0x1B,0x06,0x3C,0xC1,0x98,0x1E,0x78,0xFF,0x00, 0x3F,0x67,0x30,0xC1,0xF3,0xF3,0x1B,0xF6,0x1C,0xC1,0x98,0x1C,0x38,0xC3,0x00,0x3F, 0x63,0x30,0xC0,0xE3,0xF1,0xF3,0xF6,0x1C,0xC1,0x98,0x0C,0x39,0xC3,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //----------------------------------- // delayms routine //----------------------------------- void delayms(uint m) // 12MHz Xtal, close to ms value { uint j; uint i; for(i=0; i>8; temp2=Ddata; _CS = 0; RS = 1; for (i=0;i<19200;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; } void ColorBOX1() { uchar i; SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x04); SdCmd(0x2b);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x00); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x01);SdData(0x3b);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x00); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x00); SdCmd(0x2b);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x04); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x01);SdData(0x3f);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x04); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x04); SdCmd(0x2b);SdData(0x00);SdData(0xef);SdData(0x00);SdData(0xef); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x01);SdData(0x3b);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0xef);SdData(0x00);SdData(0xef); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x00); SdCmd(0x2b);SdData(0x00);SdData(0xeb);SdData(0x00);SdData(0xef); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } SdCmd(0x2a);SdData(0x01);SdData(0x3f);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0xeb);SdData(0x00);SdData(0xef); SdCmd(0x2c); for (i=0;i<5;i++) { SdData(WHITE>>8); SdData(WHITE); } } //=========填充块2,半色块===================== void ColorBOX2() { uint i; uchar temp1,temp2; SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x37); SdCmd(0x2b);SdData(0x00);SdData(0x12);SdData(0x00);SdData(0x49); SdCmd(0x2c); temp1=mid_re>>8;temp2=mid_re; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0x41);SdData(0x00);SdData(0x7c); SdCmd(0x2b);SdData(0x00);SdData(0x12);SdData(0x00);SdData(0x49); SdCmd(0x2c); temp1=mid_or>>8;temp2=mid_or; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0x82);SdData(0x00);SdData(0xbd); SdCmd(0x2b);SdData(0x00);SdData(0x12);SdData(0x00);SdData(0x49); SdCmd(0x2c); temp1=mid_ye>>8;temp2=mid_ye; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0xc3);SdData(0x00);SdData(0xfe); SdCmd(0x2b);SdData(0x00);SdData(0x12);SdData(0x00);SdData(0x49); SdCmd(0x2c); temp1=mid_yg>>8;temp2=mid_yg; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x01);SdData(0x04);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0x12);SdData(0x01);SdData(0x49); SdCmd(0x2c); temp1=mid_gr>>8;temp2=mid_gr; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; //------------------------------------------------------------------ SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x37); SdCmd(0x2b);SdData(0x00);SdData(0x5c);SdData(0x00);SdData(0x93); SdCmd(0x2c); temp1=mid_gc>>8;temp2=mid_gc; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x01);SdData(0x04);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0x5c);SdData(0x00);SdData(0x93); SdCmd(0x2c); temp1=mid_cy>>8;temp2=mid_cy; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; //----------------------------------------------------------------- SdCmd(0x2a);SdData(0x00);SdData(0x00);SdData(0x00);SdData(0x37); SdCmd(0x2b);SdData(0x00);SdData(0xa6);SdData(0x00);SdData(0xdd); SdCmd(0x2c); temp1=mid_cb>>8;temp2=mid_cb; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0x41);SdData(0x00);SdData(0x7c); SdCmd(0x2b);SdData(0x00);SdData(0xa6);SdData(0x00);SdData(0xdd); SdCmd(0x2c); temp1=mid_bl>>8;temp2=mid_bl; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0x82);SdData(0x00);SdData(0xbd); SdCmd(0x2b);SdData(0x00);SdData(0xa6);SdData(0x00);SdData(0xdd); SdCmd(0x2c); temp1=mid_bm>>8;temp2=mid_bm; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x00);SdData(0xc3);SdData(0x00);SdData(0xfe); SdCmd(0x2b);SdData(0x00);SdData(0xa6);SdData(0x00);SdData(0xdd); SdCmd(0x2c); temp1=mid_ma>>8;temp2=mid_ma; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; SdCmd(0x2a);SdData(0x01);SdData(0x04);SdData(0x01);SdData(0x3f); SdCmd(0x2b);SdData(0x00);SdData(0xa6);SdData(0x00);SdData(0xdd); SdCmd(0x2c); temp1=mid_mr>>8;temp2=mid_mr; _CS = 0; RS = 1; for (i=0;i<3360;i++) { LCDBUS = temp1; _WR = 0;_WR = 1; LCDBUS = temp2; _WR = 0;_WR = 1; } _CS = 1; } // show mono data on display with 1=fg_color & 0=bg_color // X = Start Column address; // Y = Start ROW address; // W = Picture width; // H = Picture height; // fg_color = foreground color; // bg_color = background color; void monoFill(uint X,Y,W,H,uint fg_color, bg_color, uchar *Data ) { uchar SCH,SCL,ECH,ECL;//SCH= Start Column high 8bit address; uchar SRH,SRL,ERH,ERL;//SRH= Start Row High 8bit address; uchar fg_hi, fg_lo; uchar bg_hi, bg_lo; uint i; SCH=X>>8;SCL=X&0xff; ECH=(X+W-1)>>8;ECL=(X+W-1)&0xff; SRH=Y>>8;SRL=Y&0xff; ERH=(Y+H-1)>>8;ERL=(Y+H-1)&0xff; SdCmd(0x2a);SdData(SCH);SdData(SCL);SdData(ECH);SdData(ECL); SdCmd(0x2b);SdData(SRH);SdData(SRL);SdData(ERH);SdData(ERL); fg_hi=fg_color>>8; fg_lo=fg_color; bg_hi=bg_color>>8; bg_lo=bg_color; SdCmd(0x2c);// write_memory_start _CS=0; for (i=0; i<(W*H/8); i++) { btemp=*(Data+i); if (btemp_b7) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b6) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b5) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b4) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b3) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b2) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b1) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} if (btemp_b0) {SdData(fg_hi); SdData(fg_lo);} else {SdData(bg_hi); SdData(bg_lo);} } _CS=1; } //----------------------------------- // init routine //----------------------------------- void initLCDM(void) { _RES=0; delayms(20); _RES=1; delayms(800); SdCmd(0x11); //Wake up delayms(120); SdCmd(0x36);SdData(0xa0);//TE ON 60Hz SdCmd(0x3a);SdData(0x05);//Seting RAM data access SdCmd(0xb7); //vcom setting SdData(0x24); SdCmd(0xc0); //LCM Control SdData(0x2c); SdCmd(0xc2); //VDV and VRH Command Enable SdData(0x01); SdCmd(0xc3); //VRH Set, VAP(GVDD) & VAN(GVCL) SdData(0x13); SdCmd(0xc4); //VDV Set, SdData(0x20); //VDV=0V SdCmd(0xc6);//Frame rate control in normal mode SdData(0x0f);//dot inversion & 60Hz SdCmd(0xd0); //Power control 1 SdData(0xa4); SdData(0xb1); //AVDD=6.8V; AVCL=-4.8V; VDDS=2.3V SdCmd(0xe0); SdData(0xd0); SdData(0x0a); SdData(0x12); SdData(0x0a); SdData(0x09); SdData(0x07); SdData(0x3a); SdData(0x44); SdData(0x50); SdData(0x3a); SdData(0x13); SdData(0x12); SdData(0x2e); SdData(0x30); SdCmd(0xe1); SdData(0xd0); SdData(0x0e); SdData(0x13); SdData(0x0b); SdData(0x0b); SdData(0x25); SdData(0x3a); SdData(0x43); SdData(0x4f); SdData(0x38); SdData(0x15); SdData(0x14); SdData(0x2c); SdData(0x32); SdCmd(0x3a);SdData(0x05); //65k colors*/ SdCmd(0x21); SdCmd(0x29); //Display on delayms(10); } //----------------------------------- // Main Program //----------------------------------- void main() { SP=0x60; EA=0; LCDBUS=0xff; // init all the port _CS = 1; _RES = 1; RS = 0; _WR = 1; initLCDM(); TestColor(BLACK); ColorBOX2(); monoFill(100,100,120,24,GRAY04, BLACK, monoLOGO); monoFill(100,130,120,24,GRAY04, BLACK, monoTITLE); while(1); }