/*********************************************************************************** *This program is a demo of clearing screen to display red,green,blue. *This demo was made for LCD modules with 8bit or 16bit data port. *This program don't need to rely on any libraries and Can run directly. * File : simple_test_ILI9488.ino * Hardware Environment: Arduino Mega2560 * Build Environment : Arduino *Set the pins to the correct ones for your development shield or breakout board. *This demo use the BREAKOUT BOARD only and use these 16 data lines to the LCD, //pin usage as follow: // CS CD WR RD RST D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 //Arduino Mega 40 38 39 43 41 37 36 35 34 33 32 31 30 22 23 24 25 26 27 28 29 // TP_IRQ MOSI MISO TP_CS EX_CLK //Arduino Mega 44 51 50 53 52 //when using the BREAKOUT BOARD only and using these 8 data lines to the LCD, //pin usage as follow: // CS CD WR RD RST D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 //Arduino Mega 40 38 39 43 41 37 36 35 34 33 32 31 30 / / / / / / / / // TP_IRQ MOSI MISO TP_CS EX_CLK //Arduino Mega 44 51 50 53 52 *Remember to set the pins to suit your display module! * * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. **********************************************************************************/ #define LCD_MODE 1 //1-8bit,0-16bit #define LCD_RD 43 #define LCD_WR 39 #define LCD_RS 38 #define LCD_CS 40 #define LCD_REST 41 void Lcd_Writ_Bus(unsigned int d) { #if LCD_MODE //PORTC = d >> 8; PORTC = d; #else PORTA = d >> 8; PORTC = d; #endif *(portOutputRegister(digitalPinToPort(LCD_WR))) &= ~digitalPinToBitMask(LCD_WR); *(portOutputRegister(digitalPinToPort(LCD_WR)))|= digitalPinToBitMask(LCD_WR); } void Lcd_Write_Com(unsigned int VH) { *(portOutputRegister(digitalPinToPort(LCD_RS))) &= ~digitalPinToBitMask(LCD_RS);//LCD_RS=0; Lcd_Writ_Bus(VH); } void Lcd_Write_Data(unsigned int VH) { *(portOutputRegister(digitalPinToPort(LCD_RS)))|= digitalPinToBitMask(LCD_RS);//LCD_RS=1; Lcd_Writ_Bus(VH); } void Lcd_Write_Com_Data(unsigned int com,unsigned int dat) { Lcd_Write_Com(com); Lcd_Write_Data(dat); } void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) { Lcd_Write_Com(0x2a); Lcd_Write_Data(x1>>8); Lcd_Write_Data(x1); Lcd_Write_Data(x2>>8); Lcd_Write_Data(x2); Lcd_Write_Com(0x2b); Lcd_Write_Data(y1>>8); Lcd_Write_Data(y1); Lcd_Write_Data(y2>>8); Lcd_Write_Data(y2); Lcd_Write_Com(0x2c); } void Lcd_Init(void) { digitalWrite(LCD_REST,HIGH); delay(5); digitalWrite(LCD_REST,LOW); delay(15); digitalWrite(LCD_REST,HIGH); delay(15); digitalWrite(LCD_CS,HIGH); digitalWrite(LCD_WR,HIGH); digitalWrite(LCD_CS,LOW); //CS Lcd_Write_Com(0XF7); Lcd_Write_Data(0xA9); Lcd_Write_Data(0x51); Lcd_Write_Data(0x2C); Lcd_Write_Data(0x82); Lcd_Write_Com(0xC0); Lcd_Write_Data(0x11); Lcd_Write_Data(0x09); Lcd_Write_Com(0xC1); Lcd_Write_Data(0x41); Lcd_Write_Com(0XC5); Lcd_Write_Data(0x00); Lcd_Write_Data(0x0A); Lcd_Write_Data(0x80); Lcd_Write_Com(0xB1); Lcd_Write_Data(0xB0); Lcd_Write_Data(0x11); Lcd_Write_Com(0xB4); Lcd_Write_Data(0x02); Lcd_Write_Com(0xB6); Lcd_Write_Data(0x02); Lcd_Write_Data(0x22); Lcd_Write_Com(0xB7); Lcd_Write_Data(0xc6); Lcd_Write_Com(0xBE); Lcd_Write_Data(0x00); Lcd_Write_Data(0x04); Lcd_Write_Com(0xE9); Lcd_Write_Data(0x00); Lcd_Write_Com(0x36); Lcd_Write_Data(0x08); Lcd_Write_Com(0x3A); Lcd_Write_Data(0x55); Lcd_Write_Com(0xE0); Lcd_Write_Data(0x00); Lcd_Write_Data(0x07); Lcd_Write_Data(0x10); Lcd_Write_Data(0x09); Lcd_Write_Data(0x17); Lcd_Write_Data(0x0B); Lcd_Write_Data(0x41); Lcd_Write_Data(0x89); Lcd_Write_Data(0x4B); Lcd_Write_Data(0x0A); Lcd_Write_Data(0x0C); Lcd_Write_Data(0x0E); Lcd_Write_Data(0x18); Lcd_Write_Data(0x1B); Lcd_Write_Data(0x0F); Lcd_Write_Com(0XE1); Lcd_Write_Data(0x00); Lcd_Write_Data(0x17); Lcd_Write_Data(0x1A); Lcd_Write_Data(0x04); Lcd_Write_Data(0x0E); Lcd_Write_Data(0x06); Lcd_Write_Data(0x2F); Lcd_Write_Data(0x45); Lcd_Write_Data(0x43); Lcd_Write_Data(0x02); Lcd_Write_Data(0x0A); Lcd_Write_Data(0x09); Lcd_Write_Data(0x32); Lcd_Write_Data(0x36); Lcd_Write_Data(0x0F); Lcd_Write_Com(0x11); delay(120); Lcd_Write_Com(0x29); } void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i,j; Lcd_Write_Com(0x02c); //write_memory_start digitalWrite(LCD_RS,HIGH); digitalWrite(LCD_CS,LOW); l=l+x; Address_set(x,y,l,y); j=l*2; for(i=1;i<=j;i++) { Lcd_Write_Data(c); } digitalWrite(LCD_CS,HIGH); } void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i,j; Lcd_Write_Com(0x02c); //write_memory_start digitalWrite(LCD_RS,HIGH); digitalWrite(LCD_CS,LOW); l=l+y; Address_set(x,y,x,l); j=l*2; for(i=1;i<=j;i++) { Lcd_Write_Data(c); } digitalWrite(LCD_CS,HIGH); } void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c) { H_line(x , y , w, c); H_line(x , y+h, w, c); V_line(x , y , h, c); V_line(x+w, y , h, c); } void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c) { unsigned int i; for(i=0;i>8); #if LCD_MODE Lcd_Write_Data(j>>8); #endif Lcd_Write_Data(j); } digitalWrite(LCD_CS,HIGH); } void setup() {/* for(int p=0;p<10;p++) { pinMode(p,OUTPUT); }*/ DDRA |= 0xFF; DDRC |= 0xFF; pinMode(38,OUTPUT); pinMode(39,OUTPUT); pinMode(40,OUTPUT); pinMode(41,OUTPUT); pinMode(43,OUTPUT); digitalWrite(38, HIGH); digitalWrite(39, HIGH); digitalWrite(40, HIGH); digitalWrite(41, HIGH); digitalWrite(43, HIGH); Lcd_Init(); //LCD_Clear(0xf800); } void loop() { LCD_Clear(0xf800); LCD_Clear(0x07E0); LCD_Clear(0x001F); /* for(int i=0;i<1000;i++) { Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color }*/ // LCD_Clear(0xf800); }