2.2" TFT display
[Arduino] / TFT01-2.2SP / TFT01-2.2SP.ino
1 /*==========================================================================
2 The LCD connection is the same as Nokia LCD5110 and  is a“8 Bit Pant Demo“
3
4 Just for ElecFreaks TFT01-2.2SP, which use SPI serial port and 240x320 pixel.
5 The driver is ILI9341.
6  
7 by Elecfreaks
8 ==========================================================================*/ 
9 #include "pins_arduino.h"
10
11 #define LCD_WR    9   //SCL
12 #define LCD_RS   10   //SDA
13 #define LCD_DC   11   //A0
14 #define LCD_REST 12   //RESET
15 #define LCD_CS   13   //CSE    
16
17 volatile uint8_t *P_SCK, *P_MOSI, *P_DC, *P_RST, *P_CS;
18 volatile uint8_t B_SCK, B_MOSI, B_DC, B_RST, B_CS;
19   
20 void LCD_Writ_Bus(char data)
21 {
22   *P_CS &= ~B_CS;
23   for (unsigned char c=0; c<8; c++)
24   {
25   if (data & 0x80)
26     *P_MOSI |= B_MOSI;
27   else
28     *P_MOSI &= ~B_MOSI;
29   data = data<<1;
30   *P_SCK &= ~B_SCK;
31   asm ("nop");
32   *P_SCK |= B_SCK;
33   }
34   *P_CS |= B_CS;
35 }
36  
37 void LCD_Write_COM(char VL)  
38 {   
39   digitalWrite(LCD_DC,LOW);
40   LCD_Writ_Bus(VL);
41 }
42  
43 void LCD_Write_DATA(char VL)    
44 {
45   digitalWrite(LCD_DC,HIGH);
46   LCD_Writ_Bus(VL);
47 }
48  
49 void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
50 {
51    LCD_Write_COM(0x2a);
52    LCD_Write_DATA(x1>>8);
53    LCD_Write_DATA(x1);
54    LCD_Write_DATA(x2>>8);
55    LCD_Write_DATA(x2);
56   
57    LCD_Write_COM(0x2b);
58    LCD_Write_DATA(y1>>8);
59    LCD_Write_DATA(y1);
60    LCD_Write_DATA(y2>>8);
61    LCD_Write_DATA(y2);
62
63    LCD_Write_COM(0x2C);                  
64 }
65  
66 void LCD_Init(void)
67 {
68         P_SCK = portOutputRegister(digitalPinToPort(LCD_WR));
69         B_SCK = digitalPinToBitMask(LCD_WR);
70   P_MOSI  = portOutputRegister(digitalPinToPort(LCD_RS));
71   B_MOSI  = digitalPinToBitMask(LCD_RS);
72   P_DC  = portOutputRegister(digitalPinToPort(LCD_DC));
73   B_DC  = digitalPinToBitMask(LCD_DC);
74   P_RST = portOutputRegister(digitalPinToPort(LCD_REST));
75   B_RST = digitalPinToBitMask(LCD_REST);
76   P_CS  = portOutputRegister(digitalPinToPort(LCD_CS));
77   B_CS  = digitalPinToBitMask(LCD_CS);
78  
79         *P_RST &= ~B_RST;
80   delay(10);
81   *P_RST |= B_RST;
82   
83         LCD_Write_COM(0xCB);  
84         LCD_Write_DATA(0x39); 
85         LCD_Write_DATA(0x2C); 
86         LCD_Write_DATA(0x00); 
87         LCD_Write_DATA(0x34); 
88         LCD_Write_DATA(0x02); 
89
90         LCD_Write_COM(0xCF);  
91         LCD_Write_DATA(0x00); 
92         LCD_Write_DATA(0XC1); 
93         LCD_Write_DATA(0X30); 
94
95         LCD_Write_COM(0xE8);  
96         LCD_Write_DATA(0x85); 
97         LCD_Write_DATA(0x00); 
98         LCD_Write_DATA(0x78); 
99
100         LCD_Write_COM(0xEA);  
101         LCD_Write_DATA(0x00); 
102         LCD_Write_DATA(0x00); 
103  
104         LCD_Write_COM(0xED);  
105         LCD_Write_DATA(0x64); 
106         LCD_Write_DATA(0x03); 
107         LCD_Write_DATA(0X12); 
108         LCD_Write_DATA(0X81); 
109
110         LCD_Write_COM(0xF7);  
111         LCD_Write_DATA(0x20); 
112   
113         LCD_Write_COM(0xC0);    //Power control 
114         LCD_Write_DATA(0x23);   //VRH[5:0] 
115  
116         LCD_Write_COM(0xC1);    //Power control 
117         LCD_Write_DATA(0x10);   //SAP[2:0];BT[3:0] 
118
119         LCD_Write_COM(0xC5);    //VCM control 
120         LCD_Write_DATA(0x3e);   //Contrast
121         LCD_Write_DATA(0x28); 
122  
123         LCD_Write_COM(0xC7);    //VCM control2 
124         LCD_Write_DATA(0x86);   //--
125  
126         LCD_Write_COM(0x36);    // Memory Access Control 
127         LCD_Write_DATA(0x48);   //C8     //48 68竖屏//28 E8 横屏
128
129         LCD_Write_COM(0x3A);    
130         LCD_Write_DATA(0x55); 
131
132         LCD_Write_COM(0xB1);    
133         LCD_Write_DATA(0x00);  
134         LCD_Write_DATA(0x18); 
135  
136         LCD_Write_COM(0xB6);    // Display Function Control 
137         LCD_Write_DATA(0x08); 
138         LCD_Write_DATA(0x82);
139         LCD_Write_DATA(0x27);  
140 /* 
141         LCD_Write_COM(0xF2);    // 3Gamma Function Disable 
142         LCD_Write_DATA(0x00); 
143  
144         LCD_Write_COM(0x26);    //Gamma curve selected 
145         LCD_Write_DATA(0x01); 
146
147         LCD_Write_COM(0xE0);    //Set Gamma 
148         LCD_Write_DATA(0x0F); 
149         LCD_Write_DATA(0x31); 
150         LCD_Write_DATA(0x2B); 
151         LCD_Write_DATA(0x0C); 
152         LCD_Write_DATA(0x0E); 
153         LCD_Write_DATA(0x08); 
154         LCD_Write_DATA(0x4E); 
155         LCD_Write_DATA(0xF1); 
156         LCD_Write_DATA(0x37); 
157         LCD_Write_DATA(0x07); 
158         LCD_Write_DATA(0x10); 
159         LCD_Write_DATA(0x03); 
160         LCD_Write_DATA(0x0E); 
161         LCD_Write_DATA(0x09); 
162         LCD_Write_DATA(0x00); 
163
164         LCD_Write_COM(0XE1);    //Set Gamma 
165         LCD_Write_DATA(0x00); 
166         LCD_Write_DATA(0x0E); 
167         LCD_Write_DATA(0x14); 
168         LCD_Write_DATA(0x03); 
169         LCD_Write_DATA(0x11); 
170         LCD_Write_DATA(0x07); 
171         LCD_Write_DATA(0x31); 
172         LCD_Write_DATA(0xC1); 
173         LCD_Write_DATA(0x48); 
174         LCD_Write_DATA(0x08); 
175         LCD_Write_DATA(0x0F); 
176         LCD_Write_DATA(0x0C); 
177         LCD_Write_DATA(0x31); 
178         LCD_Write_DATA(0x36); 
179         LCD_Write_DATA(0x0F); 
180 */
181         LCD_Write_COM(0x11);    //Exit Sleep 
182         delay(120); 
183         
184         LCD_Write_COM(0x29);    //Display on 
185         LCD_Write_COM(0x2c);   
186 }
187  
188 void Pant(char VL)
189 {
190   int i,j;
191   Address_set(0,0,240,320);
192   for(i=0;i<320;i++)
193   {
194     for (j=0;j<480;j++)
195     {
196       LCD_Write_DATA(VL);
197     }
198   }
199 }
200  
201 void setup()
202 {
203   unsigned char p;
204   for(p=8;p<14;p++)
205     pinMode(p,OUTPUT);
206   LCD_Init();  
207 }
208  
209 void loop()
210 {  
211   Pant(0xFF);   
212   Pant(0xF0);   
213   Pant(0xE0);  
214   Pant(0x05);  
215   Pant(0x1F);    
216   Pant(0x00);   
217 }
218
219