#define PIXELX 129 #define PIXELY 129 #define CACHE_SIZE ((PIXELX * PIXELY) / 8) #define X_START 0 #define Y_START 0 #define X_END PIXELY-1 #define Y_END PIXELY-1 #define SOFT_RESET 0x01 #define BOOSTER_ON 0x03 #define SLEEP_OUT 0x11 #define DISPLAY_ON 0x29 #define MEM_CONTROL 0x36 #define COLMOD 0x3A #define COLOR_SET 0x02 #define RGBSET 0x2D #define SETCON 0x25 #define MX 6 #define MY 7 #define VERTICAL 5 #define RGB 3 #define LAO 4 #define ADDRX 0x2A #define ADDRY 0x2B #define MEMWRITE 0x2C #define BLACK 0x00 #define WHITE 0xFF #define RED 0x03 #define CS PIN_A5 #define RST PIN_C0 #define SCK PIN_C3 #define SDO PIN_C5 #byte SSPSTAT = 0xFC7 #bit BF = SSPSTAT.0 #bit CKE = SSPSTAT.6 #bit SMP = SSPSTAT.7 #byte SSPCON1 = 0xFC6 #bit SSPM0 = SSPCON1.0 #bit SSPM1 = SSPCON1.1 #bit SSPM2 = SSPCON1.2 #bit SSPM3 = SSPCON1.3 #bit CKP = SSPCON1.4 #bit SSPEN = SSPCON1.5 #byte SSPBUF = 0xFC9 /* #byte PORTA = 0xF80 #byte PORTC = 0xF82 #byte TRISA = 0xF92 #bit SET_CS = TRISA.5 #byte TRISC = 0xF94 #bit SET_RST = TRISC.0 #bit SET_SCK = TRISC.3 #bit SET_SDO = TRISC.5 */ void gclcd_cmd(int8 cmd); void gclcd_data(int8 data); void gClcd_cls(void); void gclcd_setarea(int8 x1, int8 x2, int8 y1, int8 y2); void gclcd_contrast(int8 contrast); unsigned int16 i; unsigned int8 gclcd_memctrl; unsigned int8 memAccessCtrl = 0; void gclcd_init(void) { set_tris_a(0x00); set_tris_c(0x00); delay_ms(100); output_bit(CS,FALSE); // LCD ENABLED output_bit(RST,FALSE); delay_ms(50); output_bit(RST,TRUE); output_bit(SCK,TRUE); output_bit(SDO,TRUE); output_bit(CS,TRUE); gclcd_cmd(SOFT_RESET); // Software Reset gclcd_cmd(SLEEP_OUT); // Sleep Out gclcd_cmd(DISPLAY_ON); // Display ON gclcd_cmd(BOOSTER_ON); // Booster ON // gclcd_cmd(0x13); //Normal Display // gclcd_cmd(0x20); // Inv Off // gclcd_cmd(0x23); //All pixel on delay_ms(100); gclcd_cmd(COLMOD); gclcd_data(COLOR_SET); gclcd_cmd(RGBSET); gclcd_data(0x00); gclcd_data(0x02); gclcd_data(0x03); gclcd_data(0x04); gclcd_data(0x05); gclcd_data(0x06); gclcd_data(0x08); gclcd_data(0x0F); gclcd_data(0x00); gclcd_data(0x02); gclcd_data(0x03); gclcd_data(0x04); gclcd_data(0x05); gclcd_data(0x06); gclcd_data(0x08); gclcd_data(0x0F); gclcd_data(0x00); gclcd_data(0x03); gclcd_data(0x06); gclcd_data(0x0F); gclcd_cmd(MEM_CONTROL); memAccessCtrl = (0x01 << MX) | (0x01 << RGB); gclcd_data(memAccessCtrl); gclcd_contrast(50); gclcd_cls(); } void gclcd_cmd(int8 cmd) { SSPEN = 0; SMP=0; CKE=0; SSPM3=0; SSPM2=0; SSPM1=0; SSPM0=0; CKP=1; output_bit(CS,FALSE); output_bit(SCK,FALSE); output_bit(SDO,FALSE); output_bit(SCK,TRUE); SSPEN=1; SSPBUF = cmd; while (BF==1); output_bit(CS,TRUE); SSPEN = 0; } void gclcd_data(int8 data) { SSPEN = 0; SMP=0; CKE=0; SSPM3=0; SSPM2=0; SSPM1=0; SSPM0=0; CKP=1; output_bit(CS,FALSE); output_bit(SCK,FALSE); output_bit(SDO,TRUE); output_bit(SCK,TRUE); SSPEN=1; SSPBUF = data; while (BF==1); output_bit(CS,TRUE); SSPEN = 0; } void gclcd_cls(void) { gclcd_setarea(X_START, X_END, Y_START, Y_END); gclcd_cmd(MEMWRITE); for(i=0; i<(PIXELX*PIXELY); i++) { gclcd_data(WHITE); } } void gclcd_setarea(int8 startx, int8 endx, int8 starty, int8 endy) { gclcd_cmd(ADDRX); gclcd_data(startx+1); gclcd_data(endx+1); gclcd_cmd(ADDRY); gclcd_data(starty+1); gclcd_data(endy+1); } void gclcd_contrast(int8 contrast) { output_bit(CS,FALSE); gclcd_cmd(SETCON); gclcd_data(contrast); output_bit(CS,TRUE); }