/*========================================================================== The LCD connection is the same as Nokia LCD5110 and is a“8 Bit Pant Demo“ Just for ElecFreaks TFT01-2.2SP, which use SPI serial port and 240x320 pixel. The driver is ILI9341. by Elecfreaks ==========================================================================*/ #include "pins_arduino.h" // Arduino ProMini pinout // MISO - D12 not connected // LCD - VCC // SCLK - D8 // MOSI - D9 // DC - D10 // RST - D11 // CS - D12 // GND - GND // VCC - 3.3V #define LCD_SCK 8 #define LCD_MOSI 9 #define LCD_DC 10 #define LCD_REST 11 #define LCD_CS 12 volatile uint8_t *P_SCK, *P_MOSI, *P_DC, *P_RST, *P_CS; volatile uint8_t B_SCK, B_MOSI, B_DC, B_RST, B_CS; void LCD_Writ_Bus(char data) { *P_CS &= ~B_CS; for (unsigned char c=0; c<8; c++) { if (data & 0x80) *P_MOSI |= B_MOSI; else *P_MOSI &= ~B_MOSI; data = data<<1; *P_SCK &= ~B_SCK; asm ("nop"); *P_SCK |= B_SCK; } *P_CS |= B_CS; } void LCD_Write_COM(char VL) { digitalWrite(LCD_DC,LOW); LCD_Writ_Bus(VL); } void LCD_Write_DATA(char VL) { digitalWrite(LCD_DC,HIGH); LCD_Writ_Bus(VL); } 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) { P_SCK = portOutputRegister(digitalPinToPort(LCD_SCK)); B_SCK = digitalPinToBitMask(LCD_SCK); P_MOSI = portOutputRegister(digitalPinToPort(LCD_MOSI)); B_MOSI = digitalPinToBitMask(LCD_MOSI); P_DC = portOutputRegister(digitalPinToPort(LCD_DC)); B_DC = digitalPinToBitMask(LCD_DC); P_RST = portOutputRegister(digitalPinToPort(LCD_REST)); B_RST = digitalPinToBitMask(LCD_REST); P_CS = portOutputRegister(digitalPinToPort(LCD_CS)); B_CS = digitalPinToBitMask(LCD_CS); *P_RST &= ~B_RST; delay(10); *P_RST |= B_RST; LCD_Write_COM(0xCB); LCD_Write_DATA(0x39); LCD_Write_DATA(0x2C); LCD_Write_DATA(0x00); LCD_Write_DATA(0x34); LCD_Write_DATA(0x02); LCD_Write_COM(0xCF); LCD_Write_DATA(0x00); LCD_Write_DATA(0XC1); LCD_Write_DATA(0X30); LCD_Write_COM(0xE8); LCD_Write_DATA(0x85); LCD_Write_DATA(0x00); LCD_Write_DATA(0x78); LCD_Write_COM(0xEA); LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_COM(0xED); LCD_Write_DATA(0x64); LCD_Write_DATA(0x03); LCD_Write_DATA(0X12); LCD_Write_DATA(0X81); LCD_Write_COM(0xF7); LCD_Write_DATA(0x20); LCD_Write_COM(0xC0); //Power control LCD_Write_DATA(0x23); //VRH[5:0] LCD_Write_COM(0xC1); //Power control LCD_Write_DATA(0x10); //SAP[2:0];BT[3:0] LCD_Write_COM(0xC5); //VCM control LCD_Write_DATA(0x3e); //Contrast LCD_Write_DATA(0x28); LCD_Write_COM(0xC7); //VCM control2 LCD_Write_DATA(0x86); //-- LCD_Write_COM(0x36); // Memory Access Control LCD_Write_DATA(0x48); //C8 //48 68竖屏//28 E8 横屏 LCD_Write_COM(0x3A); LCD_Write_DATA(0x55); LCD_Write_COM(0xB1); LCD_Write_DATA(0x00); LCD_Write_DATA(0x18); LCD_Write_COM(0xB6); // Display Function Control LCD_Write_DATA(0x08); LCD_Write_DATA(0x82); LCD_Write_DATA(0x27); /* LCD_Write_COM(0xF2); // 3Gamma Function Disable LCD_Write_DATA(0x00); LCD_Write_COM(0x26); //Gamma curve selected LCD_Write_DATA(0x01); LCD_Write_COM(0xE0); //Set Gamma LCD_Write_DATA(0x0F); LCD_Write_DATA(0x31); LCD_Write_DATA(0x2B); LCD_Write_DATA(0x0C); LCD_Write_DATA(0x0E); LCD_Write_DATA(0x08); LCD_Write_DATA(0x4E); LCD_Write_DATA(0xF1); LCD_Write_DATA(0x37); LCD_Write_DATA(0x07); LCD_Write_DATA(0x10); LCD_Write_DATA(0x03); LCD_Write_DATA(0x0E); LCD_Write_DATA(0x09); LCD_Write_DATA(0x00); LCD_Write_COM(0XE1); //Set Gamma LCD_Write_DATA(0x00); LCD_Write_DATA(0x0E); LCD_Write_DATA(0x14); LCD_Write_DATA(0x03); LCD_Write_DATA(0x11); LCD_Write_DATA(0x07); LCD_Write_DATA(0x31); LCD_Write_DATA(0xC1); LCD_Write_DATA(0x48); LCD_Write_DATA(0x08); LCD_Write_DATA(0x0F); LCD_Write_DATA(0x0C); LCD_Write_DATA(0x31); LCD_Write_DATA(0x36); LCD_Write_DATA(0x0F); */ LCD_Write_COM(0x11); //Exit Sleep delay(120); LCD_Write_COM(0x29); //Display on LCD_Write_COM(0x2c); } void Pant(char VL) { int i,j; Address_set(0,0,240,320); for(i=0;i<320;i++) { for (j=0;j<480;j++) { LCD_Write_DATA(VL); } } } void setup() { unsigned char p; for(p=8;p<14;p++) pinMode(p,OUTPUT); LCD_Init(); } void loop() { Pant(0xFF); Pant(0xF0); Pant(0xE0); Pant(0x05); Pant(0x1F); Pant(0x00); }