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