From 21950a8f99f9e29805f503ab2ad70a364f9824db Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 12 Jul 2015 14:21:58 +0200 Subject: [PATCH] 2.2" TFT display http://www.elecfreaks.com/wiki/index.php?title=2.2S%22_TFT_LCD:_TFT01-2.2S --- TFT01-2.2SP/TFT01-2.2SP.ino | 219 ++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 TFT01-2.2SP/TFT01-2.2SP.ino diff --git a/TFT01-2.2SP/TFT01-2.2SP.ino b/TFT01-2.2SP/TFT01-2.2SP.ino new file mode 100644 index 0000000..610daca --- /dev/null +++ b/TFT01-2.2SP/TFT01-2.2SP.ino @@ -0,0 +1,219 @@ +/*========================================================================== +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" + +#define LCD_WR 9 //SCL +#define LCD_RS 10 //SDA +#define LCD_DC 11 //A0 +#define LCD_REST 12 //RESET +#define LCD_CS 13 //CSE + +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_WR)); + B_SCK = digitalPinToBitMask(LCD_WR); + P_MOSI = portOutputRegister(digitalPinToPort(LCD_RS)); + B_MOSI = digitalPinToBitMask(LCD_RS); + 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); +} + + -- 2.20.1