]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_IAR/STM32F10xFWLib/src/lcd.c
48d8625274c24699f68cb8ba0c0d68b94e55e876
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_IAR / STM32F10xFWLib / src / lcd.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : lcd.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : mm/dd/yyyy\r
5 * Description        : This file includes the LCD driver for AM-240320LTNQW00H\r
6 *                      liquid Crystal Display Module of STM32F10x-EVAL.\r
7 ********************************************************************************\r
8 * History:\r
9 * mm/dd/yyyy\r
10 ********************************************************************************\r
11 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
13 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
14 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
15 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
16 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17 *******************************************************************************/\r
18 \r
19 /* Includes ------------------------------------------------------------------*/\r
20 #include "stm32f10x_type.h"\r
21 #include "lcd.h"\r
22 #include "spi_flash.h"\r
23 \r
24 #include "FreeRTOS.h"\r
25 #include "task.h"\r
26 \r
27 /* Private typedef -----------------------------------------------------------*/\r
28 /* Private define ------------------------------------------------------------*/\r
29      /* ASCII Table: each character is 16 column (16dots large)\r
30         and 24 raw (24 dots high) */\r
31      const uc16 ASCII_Table[] =\r
32        {\r
33          /* Space ' ' */\r
34          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
35          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
36          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
37          /* '!' */\r
38          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
39          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,\r
40          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
41          /* '"' */\r
42          0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,\r
43          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
44          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
45          /* '#' */\r
46          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,\r
47          0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,\r
48          0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,\r
49          /* '$' */\r
50          0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,\r
51          0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,\r
52          0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,\r
53          /* '%' */\r
54          0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,\r
55          0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,\r
56          0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,\r
57          /* '&' */\r
58          0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,\r
59          0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,\r
60          0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
61          /* ''' */\r
62          0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,\r
63          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
64          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
65          /* '(' */\r
66          0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,\r
67          0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\r
68          0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,\r
69          /* ')' */\r
70          0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,\r
71          0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,\r
72          0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,\r
73          /* '*' */\r
74          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,\r
75          0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,\r
76          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
77          /* '+' */\r
78          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,\r
79          0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,\r
80          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
81          /* ',' */\r
82          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
83          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
84          0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,\r
85          /* '-' */\r
86          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
87          0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,\r
88          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
89          /* '.' */\r
90          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
91          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
92          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
93          /* '/' */\r
94          0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,\r
95          0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,\r
96          0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
97          /* '0' */\r
98          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,\r
99          0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,\r
100          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
101          /* '1' */\r
102          0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,\r
103          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
104          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
105          /* '2' */\r
106          0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,\r
107          0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,\r
108          0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
109          /* '3' */\r
110          0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,\r
111          0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,\r
112          0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
113          /* '4' */\r
114          0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,\r
115          0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,\r
116          0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
117          /* '5' */\r
118          0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,\r
119          0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,\r
120          0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
121          /* '6' */\r
122          0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,\r
123          0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,\r
124          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
125          /* '7' */\r
126          0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,\r
127          0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,\r
128          0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
129          /* '8' */\r
130          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,\r
131          0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,\r
132          0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
133          /* '9' */\r
134          0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,\r
135          0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,\r
136          0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
137          /* ':' */\r
138          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,\r
139          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
140          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
141          /* ';' */\r
142          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,\r
143          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
144          0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,\r
145          /* '<' */\r
146          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
147          0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,\r
148          0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
149          /* '=' */\r
150          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
151          0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,\r
152          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
153          /* '>' */\r
154          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
155          0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,\r
156          0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
157          /* '?' */\r
158          0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,\r
159          0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,\r
160          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
161          /* '@' */\r
162          0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,\r
163          0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,\r
164          0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
165          /* 'A' */\r
166          0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,\r
167          0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,\r
168          0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
169          /* 'B' */\r
170          0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,\r
171          0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,\r
172          0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
173          /* 'C' */\r
174          0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,\r
175          0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,\r
176          0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
177          /* 'D' */\r
178          0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,\r
179          0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,\r
180          0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
181          /* 'E' */\r
182          0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,\r
183          0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,\r
184          0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
185          /* 'F' */\r
186          0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,\r
187          0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,\r
188          0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
189          /* 'G' */\r
190          0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,\r
191          0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,\r
192          0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
193          /* 'H' */\r
194          0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,\r
195          0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,\r
196          0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
197          /* 'I' */\r
198          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
199          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
200          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
201          /* 'J' */\r
202          0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,\r
203          0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,\r
204          0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
205          /* 'K' */\r
206          0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,\r
207          0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,\r
208          0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
209          /* 'L' */\r
210          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,\r
211          0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,\r
212          0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
213          /* 'M' */\r
214          0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,\r
215          0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,\r
216          0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
217          /* 'N' */\r
218          0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,\r
219          0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,\r
220          0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
221          /* 'O' */\r
222          0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,\r
223          0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,\r
224          0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
225          /* 'P' */\r
226          0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,\r
227          0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,\r
228          0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
229          /* 'Q' */\r
230          0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,\r
231          0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,\r
232          0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
233          /* 'R' */\r
234          0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,\r
235          0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,\r
236          0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
237          /* 'S' */\r
238          0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,\r
239          0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,\r
240          0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
241          /* 'T' */\r
242          0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
243          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
244          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
245          /* 'U' */\r
246          0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,\r
247          0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,\r
248          0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
249          /* 'V' */\r
250          0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,\r
251          0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,\r
252          0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
253          /* 'W' */\r
254          0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,\r
255          0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,\r
256          0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
257          /* 'X' */\r
258          0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,\r
259          0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,\r
260          0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
261          /* 'Y' */\r
262          0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,\r
263          0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
264          0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
265          /* 'Z' */\r
266          0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,\r
267          0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,\r
268          0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
269          /* '[' */\r
270          0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,\r
271          0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,\r
272          0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,\r
273          /* '\' */\r
274          0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,\r
275          0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,\r
276          0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
277          /* ']' */\r
278          0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,\r
279          0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,\r
280          0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,\r
281          /* '^' */\r
282          0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,\r
283          0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
284          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
285          /* '_' */\r
286          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
287          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
288          0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
289          /* ''' */\r
290          0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,\r
291          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
292          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
293          /* 'a' */\r
294          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,\r
295          0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,\r
296          0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
297          /* 'b' */\r
298          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,\r
299          0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,\r
300          0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
301          /* 'c' */\r
302          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,\r
303          0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,\r
304          0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
305          /* 'd' */\r
306          0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,\r
307          0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,\r
308          0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
309          /* 'e' */\r
310          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,\r
311          0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,\r
312          0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
313          /* 'f' */\r
314          0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,\r
315          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
316          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
317          /* 'g' */\r
318          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,\r
319          0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,\r
320          0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,\r
321          /* 'h' */\r
322          0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,\r
323          0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,\r
324          0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
325          /* 'i' */\r
326          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,\r
327          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
328          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
329          /* 'j' */\r
330          0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,\r
331          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
332          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,\r
333          /* 'k' */\r
334          0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,\r
335          0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,\r
336          0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
337          /* 'l' */\r
338          0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
339          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
340          0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
341          /* 'm' */\r
342          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,\r
343          0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,\r
344          0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
345          /* 'n' */\r
346          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,\r
347          0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,\r
348          0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
349          /* 'o' */\r
350          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,\r
351          0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,\r
352          0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
353          /* 'p' */\r
354          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,\r
355          0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,\r
356          0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,\r
357          /* 'q' */\r
358          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,\r
359          0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,\r
360          0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,\r
361          /* 'r' */\r
362          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,\r
363          0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\r
364          0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
365          /* 's' */\r
366          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,\r
367          0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,\r
368          0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
369          /* 't' */\r
370          0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,\r
371          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
372          0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
373          /* 'u' */\r
374          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,\r
375          0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,\r
376          0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
377          /* 'v' */\r
378          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,\r
379          0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,\r
380          0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
381          /* 'w' */\r
382          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,\r
383          0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,\r
384          0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
385          /* 'x' */\r
386          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,\r
387          0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30,\r
388          0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
389          /* 'y' */\r
390          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,\r
391          0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,\r
392          0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,\r
393          /* 'z' */\r
394          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,\r
395          0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,\r
396          0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
397          /* '{' */\r
398          0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,\r
399          0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,\r
400          0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,\r
401          /* '|' */\r
402          0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
403          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,\r
404          0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,\r
405          /* '}' */\r
406          0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,\r
407          0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,\r
408          0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,\r
409          /* '~' */\r
410          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
411          0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
412          0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
413       };\r
414 /* Private macro -------------------------------------------------------------*/\r
415 /* Private variables ---------------------------------------------------------*/\r
416   /* Global variables to set the written text color */\r
417 static  vu16 TextColor = 0x0000, BackColor = 0xFFFF;\r
418 \r
419 /* Private function prototypes -----------------------------------------------*/\r
420 /* Private functions ---------------------------------------------------------*/\r
421 static u32 StrLength(u8 *Str);\r
422 \r
423 /*******************************************************************************\r
424 * Function Name  : LCD_Init\r
425 * Description    : Initializes LCD.\r
426 * Input          : None\r
427 * Output         : None\r
428 * Return         : None\r
429 *******************************************************************************/\r
430 void LCD_Init(void)\r
431 {\r
432 /* Configure the LCD Control pins --------------------------------------------*/\r
433   LCD_CtrlLinesConfig();\r
434 \r
435 /* Configure the SPI2 interface ----------------------------------------------*/\r
436   LCD_SPIConfig();\r
437 \r
438 /* Enable the LCD Oscillator -------------------------------------------------*/\r
439   LCD_WriteReg(R1, 0x10);\r
440   LCD_WriteReg(R0, 0xA0);\r
441   LCD_WriteReg(R3, 0x01);\r
442   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
443   LCD_WriteReg(R3, 0x00);\r
444   LCD_WriteReg(R43, 0x04);\r
445 \r
446   LCD_WriteReg(R40, 0x18);\r
447   LCD_WriteReg(R26, 0x05);\r
448   LCD_WriteReg(R37, 0x05);\r
449   LCD_WriteReg(R25, 0x00);\r
450 \r
451 /* LCD Power On --------------------------------------------------------------*/\r
452   LCD_WriteReg(R28, 0x73);\r
453   LCD_WriteReg(R36, 0x74);\r
454   LCD_WriteReg(R30, 0x01);\r
455   LCD_WriteReg(R24, 0xC1);\r
456   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
457   LCD_WriteReg(R24, 0xE1);\r
458   LCD_WriteReg(R24, 0xF1);\r
459   vTaskDelay( 60 / portTICK_RATE_MS ); /* Delay 60 ms */\r
460   LCD_WriteReg(R24, 0xF5);\r
461   vTaskDelay( 60 / portTICK_RATE_MS ); /* Delay 60 ms */\r
462   LCD_WriteReg(R27, 0x09);\r
463   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
464   LCD_WriteReg(R31, 0x11);\r
465   LCD_WriteReg(R32, 0x0E);\r
466   LCD_WriteReg(R30, 0x81);\r
467   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
468 \r
469 /* Chip Set ------------------------------------------------------------------*/\r
470   LCD_WriteReg(R157, 0x00);\r
471   LCD_WriteReg(R192, 0x00);\r
472 \r
473   LCD_WriteReg(R14, 0x00);\r
474   LCD_WriteReg(R15, 0x00);\r
475   LCD_WriteReg(R16, 0x00);\r
476   LCD_WriteReg(R17, 0x00);\r
477   LCD_WriteReg(R18, 0x00);\r
478   LCD_WriteReg(R19, 0x00);\r
479   LCD_WriteReg(R20, 0x00);\r
480   LCD_WriteReg(R21, 0x00);\r
481   LCD_WriteReg(R22, 0x00);\r
482   LCD_WriteReg(R23, 0x00);\r
483 \r
484   LCD_WriteReg(R52, 0x01);\r
485   LCD_WriteReg(R53, 0x00);\r
486 \r
487   LCD_WriteReg(R75, 0x00);\r
488   LCD_WriteReg(R76, 0x00);\r
489   LCD_WriteReg(R78, 0x00);\r
490   LCD_WriteReg(R79, 0x00);\r
491   LCD_WriteReg(R80, 0x00);\r
492 \r
493   LCD_WriteReg(R60, 0x00);\r
494   LCD_WriteReg(R61, 0x00);\r
495   LCD_WriteReg(R62, 0x01);\r
496   LCD_WriteReg(R63, 0x3F);\r
497   LCD_WriteReg(R64, 0x02);\r
498   LCD_WriteReg(R65, 0x02);\r
499   LCD_WriteReg(R66, 0x00);\r
500   LCD_WriteReg(R67, 0x00);\r
501   LCD_WriteReg(R68, 0x00);\r
502   LCD_WriteReg(R69, 0x00);\r
503   LCD_WriteReg(R70, 0xEF);\r
504   LCD_WriteReg(R71, 0x00);\r
505   LCD_WriteReg(R72, 0x00);\r
506   LCD_WriteReg(R73, 0x01);\r
507   LCD_WriteReg(R74, 0x3F);\r
508 \r
509   LCD_WriteReg(R29, 0x08);  /* R29:Gate scan direction setting */\r
510 \r
511   LCD_WriteReg(R134, 0x00);\r
512   LCD_WriteReg(R135, 0x30);\r
513   LCD_WriteReg(R136, 0x02);\r
514   LCD_WriteReg(R137, 0x05);\r
515 \r
516   LCD_WriteReg(R141, 0x01);  /* R141:Register set-up mode for one line clock */\r
517   LCD_WriteReg(R139, 0x20);  /* R139:One line SYSCLK number in one-line */\r
518   LCD_WriteReg(R51, 0x01);  /* R51:N line inversion setting */\r
519   LCD_WriteReg(R55, 0x01);  /* R55:Scanning method setting */\r
520   LCD_WriteReg(R118, 0x00);\r
521 \r
522 /* Gamma Set -----------------------------------------------------------------*/\r
523   LCD_WriteReg(R143, 0x10);\r
524   LCD_WriteReg(R144, 0x67);\r
525   LCD_WriteReg(R145, 0x07);\r
526   LCD_WriteReg(R146, 0x65);\r
527   LCD_WriteReg(R147, 0x07);\r
528   LCD_WriteReg(R148, 0x01);\r
529   LCD_WriteReg(R149, 0x76);\r
530   LCD_WriteReg(R150, 0x56);\r
531   LCD_WriteReg(R151, 0x00);\r
532   LCD_WriteReg(R152, 0x06);\r
533   LCD_WriteReg(R153, 0x03);\r
534   LCD_WriteReg(R154, 0x00);\r
535 \r
536 /* Display On ----------------------------------------------------------------*/\r
537   LCD_WriteReg(R1, 0x50);\r
538   LCD_WriteReg(R5, 0x04);\r
539 \r
540   LCD_WriteReg(R0, 0x80);\r
541   LCD_WriteReg(R59, 0x01);\r
542   vTaskDelay( 40 / portTICK_RATE_MS );  /* Delay 40 ms */\r
543   LCD_WriteReg(R0, 0x20);\r
544 }\r
545 \r
546 /*******************************************************************************\r
547 * Function Name  : LCD_SetTextColor\r
548 * Description    : Sets the Text color.\r
549 * Input          : - Color: specifies the Text color code RGB(5-6-5).\r
550 * Output         : - TextColor: Text color global variable used by LCD_DrawChar\r
551 *                  and LCD_DrawPicture functions.\r
552 * Return         : None\r
553 *******************************************************************************/\r
554 void LCD_SetTextColor(vu16 Color)\r
555 {\r
556   TextColor = Color;\r
557 }\r
558 \r
559 /*******************************************************************************\r
560 * Function Name  : LCD_SetBackColor\r
561 * Description    : Sets the Background color.\r
562 * Input          : - Color: specifies the Background color code RGB(5-6-5).\r
563 * Output         : - BackColor: Background color global variable used by\r
564 *                  LCD_DrawChar and LCD_DrawPicture functions.\r
565 * Return         : None\r
566 *******************************************************************************/\r
567 void LCD_SetBackColor(vu16 Color)\r
568 {\r
569   BackColor = Color;\r
570 }\r
571 \r
572 /*******************************************************************************\r
573 * Function Name  : LCD_ClearLine\r
574 * Description    : Clears the selected line.\r
575 * Input          : - Line: the Line to be cleared.\r
576 *                    This parameter can be one of the following values:\r
577 *                       - Linex: where x can be 0..9\r
578 * Output         : None\r
579 * Return         : None\r
580 *******************************************************************************/\r
581 void LCD_ClearLine(u8 Line)\r
582 {\r
583   LCD_DisplayStringLine(Line, "                    ");\r
584 }\r
585 \r
586 /*******************************************************************************\r
587 * Function Name  : LCD_Clear\r
588 * Description    : Clears the hole LCD.\r
589 * Input          : None\r
590 * Output         : None\r
591 * Return         : None\r
592 *******************************************************************************/\r
593 void LCD_Clear(void)\r
594 {\r
595   u32 index = 0;\r
596 \r
597   LCD_SetCursor(0x00, 0x013F);\r
598 \r
599   for(index = 0; index < 0x12C00; index++)\r
600   {\r
601     LCD_WriteRAM(White);\r
602   }\r
603 }\r
604 \r
605 /*******************************************************************************\r
606 * Function Name  : LCD_SetCursor\r
607 * Description    : Sets the cursor position.\r
608 * Input          : - Xpos: specifies the X position.\r
609 *                  - Ypos: specifies the Y position.\r
610 * Output         : None\r
611 * Return         : None\r
612 *******************************************************************************/\r
613 void LCD_SetCursor(u8 Xpos, u16 Ypos)\r
614 {\r
615   LCD_WriteReg(R66, Xpos);\r
616   LCD_WriteReg(R67, ((Ypos & 0x100)>> 8));\r
617   LCD_WriteReg(R68, (Ypos & 0xFF));\r
618 }\r
619 \r
620 /*******************************************************************************\r
621 * Function Name  : LCD_DrawChar\r
622 * Description    : Draws a character on LCD.\r
623 * Input          : - Xpos: the Line where to display the character shape.\r
624 *                    This parameter can be one of the following values:\r
625 *                       - Linex: where x can be 0..9\r
626 *                  - Ypos: start column address.\r
627 *                  - c: pointer to the character data.\r
628 * Output         : None\r
629 * Return         : None\r
630 *******************************************************************************/\r
631 void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c)\r
632 {\r
633   u32 index = 0, i = 0;\r
634   u8 Xaddress = 0;\r
635 \r
636   Xaddress = Xpos;\r
637 \r
638   LCD_SetCursor(Xaddress, Ypos);\r
639 \r
640   for(index = 0; index < 24; index++)\r
641   {\r
642     for(i = 0; i < 16; i++)\r
643     {\r
644       if((c[index] & (1 << i)) == 0x00)\r
645       {\r
646         LCD_WriteRAM(BackColor);\r
647       }\r
648       else\r
649       {\r
650         LCD_WriteRAM(TextColor);\r
651       }\r
652     }\r
653     Xaddress++;\r
654     LCD_SetCursor(Xaddress, Ypos);\r
655   }\r
656 }\r
657 \r
658 /*******************************************************************************\r
659 * Function Name  : LCD_DisplayChar\r
660 * Description    : Displays one character (16dots width, 24dots height).\r
661 * Input          : - Line: the Line where to display the character shape .\r
662 *                    This parameter can be one of the following values:\r
663 *                       - Linex: where x can be 0..9\r
664 *                  - Column: start column address.\r
665 *                  - Ascii: character ascii code, must be between 0x20 and 0x7E.\r
666 * Output         : None\r
667 * Return         : None\r
668 *******************************************************************************/\r
669 void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii)\r
670 {\r
671   Ascii -= 32;\r
672   LCD_DrawChar(Line, Column, &ASCII_Table[Ascii * 24]);\r
673 }\r
674 \r
675 /*******************************************************************************\r
676 * Function Name  : LCD_DisplayStringLine\r
677 * Description    : Displays a maximum of 20 char on the LCD.\r
678 * Input          : - Line: the Line where to display the character shape .\r
679 *                    This parameter can be one of the following values:\r
680 *                       - Linex: where x can be 0..9\r
681 *                  - *ptr: pointer to string to display on LCD.\r
682 * Output         : None\r
683 * Return         : None\r
684 *******************************************************************************/\r
685 void LCD_DisplayStringLine(u8 Line, u8 *ptr)\r
686 {\r
687   u32 i = 0;\r
688   u16 refcolumn = 319;\r
689 \r
690   /* Send the string character by character on lCD */\r
691   while ((*ptr != 0) & (i < 20))\r
692   {\r
693     /* Display one character on LCD */\r
694     LCD_DisplayChar(Line, refcolumn, *ptr);\r
695     /* Decrement the column position by 16 */\r
696     refcolumn -= 16;\r
697     /* Point on the next character */\r
698     ptr++;\r
699     /* Increment the character counter */\r
700     i++;\r
701   }\r
702 }\r
703 \r
704 /*******************************************************************************\r
705 * Function Name  : LCD_DisplayString\r
706 * Description    : Displays a maximum of 200 char on the LCD.\r
707 * Input          : - Line: the starting Line where to display the character shape.\r
708 *                    This parameter can be one of the following values:\r
709 *                       - Linex: where x can be 0..9\r
710 *                  - *ptr: pointer to string to display on LCD.\r
711 * Output         : None\r
712 * Return         : None\r
713 *******************************************************************************/\r
714 void LCD_DisplayString(u8 Line, u8 *ptr)\r
715 {\r
716   u32 i = 0, column = 0, index = 0, spaceindex = 0;\r
717   u16 refcolumn = 319;\r
718   u32 length = 0;\r
719 \r
720   /* Get the string length */\r
721   length = StrLength(ptr);\r
722   if(length > 200)\r
723   {\r
724     /* Set the Cursor position */\r
725     LCD_SetCursor(Line, 0x013F);\r
726     /* Clear the Selected Line */\r
727     LCD_ClearLine(Line);\r
728     LCD_DisplayStringLine(Line, "   String too long  ");\r
729   }\r
730   else\r
731   {\r
732     /* Set the Cursor position */\r
733     LCD_SetCursor(Line, 0x013F);\r
734     /* Clear the Selected Line */\r
735     LCD_ClearLine(Line);\r
736 \r
737     while(length--)\r
738     {\r
739       if(index == 20)\r
740       {\r
741         if(*ptr == 0x20)\r
742         {\r
743           ptr++;\r
744         }\r
745         else\r
746         {\r
747           for(i = 0; i < spaceindex; i++)\r
748           {\r
749             LCD_DisplayChar(Line, column, ' ');\r
750             column -= 16;\r
751           }\r
752           ptr -= (spaceindex - 1);\r
753           length += (spaceindex - 1);\r
754         }\r
755         Line += 24;\r
756         /* Clear the Selected Line */\r
757         LCD_ClearLine(Line);\r
758         refcolumn = 319;\r
759         index = 0;\r
760       }\r
761       /* Display one character on LCD */\r
762       LCD_DisplayChar(Line, refcolumn, *ptr);\r
763 \r
764       /* Increment character number in one line */\r
765       index++;\r
766 \r
767       /* Decrement the column position by 16 */\r
768       refcolumn -= 16;\r
769       /* Point on the next character */\r
770       ptr++;\r
771       /* Increment the number of character after the last space */\r
772       spaceindex++;\r
773       if(*ptr == 0x20)\r
774       {\r
775         spaceindex = 0;\r
776         column = refcolumn - 16;\r
777       }\r
778     }\r
779   }\r
780 }\r
781 \r
782 /*******************************************************************************\r
783 * Function Name  : LCD_ScrollText\r
784 * Description    :\r
785 * Input          :\r
786 * Output         : None\r
787 * Return         : None\r
788 *******************************************************************************/\r
789 void LCD_ScrollText(u8 Line, u8 *ptr)\r
790 {\r
791   u32 i = 0, length = 0, x = 0;\r
792   u16 refcolumn = 319;\r
793 \r
794   /* Get the string length */\r
795   length = StrLength(ptr);\r
796 \r
797   while(1)\r
798   {\r
799     /* Send the string character by character on lCD */\r
800     while ((*ptr != 0) & (i < 20))\r
801     {\r
802       /* Display one character on LCD */\r
803       LCD_DisplayChar(Line, refcolumn, *ptr);\r
804       /* Decrement the column position by 16 */\r
805       refcolumn -= 16;\r
806       /* Point on the next character */\r
807       ptr++;\r
808       /* Increment the character counter */\r
809       i++;\r
810     }\r
811     vTaskDelay( 100 / portTICK_RATE_MS );\r
812     i = 0;\r
813     //LCD_ClearLine(Line);\r
814     ptr -= length;\r
815     x++;\r
816     if(refcolumn < 16)\r
817     {\r
818       x = 0;\r
819     }\r
820     refcolumn = 319 - (x * 16);\r
821   }\r
822 }\r
823 \r
824 /*******************************************************************************\r
825 * Function Name  : LCD_SetDisplayWindow\r
826 * Description    : Sets a display window\r
827 * Input          : - Xpos: specifies the X position.\r
828 *                  - Ypos: specifies the Y position.\r
829 *                  - Height: display window height.\r
830 *                  - Width: display window width.\r
831 * Output         : None\r
832 * Return         : None\r
833 *******************************************************************************/\r
834 void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)\r
835 {\r
836   LCD_WriteReg(R1, 0xD0);\r
837   LCD_WriteReg(R5, 0x14);\r
838 \r
839   LCD_WriteReg(R69, Xpos);\r
840   LCD_WriteReg(R70, (Xpos + Height + 1));\r
841 \r
842   LCD_WriteReg(R71, ((Ypos & 0x100)>> 8));\r
843   LCD_WriteReg(R72, (Ypos & 0xFF));\r
844 \r
845   LCD_WriteReg(R73, (((Ypos + Width + 1) & 0x100)>> 8));\r
846   LCD_WriteReg(R74, ((Ypos + Width + 1) & 0xFF));\r
847 \r
848   LCD_SetCursor(Xpos, Ypos);\r
849 }\r
850 \r
851 /*******************************************************************************\r
852 * Function Name  : LCD_DrawLine\r
853 * Description    : Displays a line.\r
854 * Input          : - Xpos: specifies the X position.\r
855 *                  - Ypos: specifies the Y position.\r
856 *                  - Length: line length.\r
857 *                  - Direction: line direction.\r
858 *                    This parameter can be one of the following values: Vertical\r
859 *                    or Horizontal.\r
860 * Output         : None\r
861 * Return         : None\r
862 *******************************************************************************/\r
863 void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)\r
864 {\r
865   u32 i = 0;\r
866 \r
867   LCD_SetCursor(Xpos, Ypos);\r
868 \r
869   if(Direction == Horizontal)\r
870   {\r
871     for(i = 0; i < Length; i++)\r
872     {\r
873       LCD_WriteRAM(TextColor);\r
874     }\r
875   }\r
876   else\r
877   {\r
878    for(i = 0; i < Length; i++)\r
879     {\r
880 \r
881       LCD_WriteRAM(TextColor);\r
882       Xpos++;\r
883       LCD_SetCursor(Xpos, Ypos);\r
884     }\r
885   }\r
886 }\r
887 \r
888 /*******************************************************************************\r
889 * Function Name  : LCD_DrawRect\r
890 * Description    : Displays a rectangle.\r
891 * Input          : - Xpos: specifies the X position.\r
892 *                  - Ypos: specifies the Y position.\r
893 *                  - Height: display rectangle height.\r
894 *                  - Width: display rectangle width.\r
895 * Output         : None\r
896 * Return         : None\r
897 *******************************************************************************/\r
898 void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)\r
899 {\r
900   LCD_DrawLine(Xpos, Ypos, Width, Horizontal);\r
901   LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);\r
902 \r
903   LCD_DrawLine(Xpos, Ypos, Height, Vertical);\r
904   LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);\r
905 }\r
906 \r
907 /*******************************************************************************\r
908 * Function Name  : LCD_DrawCircle\r
909 * Description    : Displays a circle.\r
910 * Input          : - Xpos: specifies the X position.\r
911 *                  - Ypos: specifies the Y position.\r
912 *                  - Height: display rectangle height.\r
913 *                  - Width: display rectangle width.\r
914 * Output         : None\r
915 * Return         : None\r
916 *******************************************************************************/\r
917 void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)\r
918 {\r
919   s32   D;      /* Decision Variable */\r
920   u32   CurX;   /* Current X Value */\r
921   u32   CurY;   /* Current Y Value */\r
922 \r
923   D = 3 - (Radius << 1);\r
924   CurX = 0;\r
925   CurY = Radius;\r
926 \r
927   while (CurX <= CurY)\r
928   {\r
929     LCD_SetCursor(Xpos + CurX, Ypos + CurY);\r
930     LCD_WriteRAM(TextColor);\r
931     LCD_SetCursor(Xpos + CurX, Ypos - CurY);\r
932     LCD_WriteRAM(TextColor);\r
933     LCD_SetCursor(Xpos - CurX, Ypos + CurY);\r
934     LCD_WriteRAM(TextColor);\r
935     LCD_SetCursor(Xpos - CurX, Ypos - CurY);\r
936     LCD_WriteRAM(TextColor);\r
937     LCD_SetCursor(Xpos + CurY, Ypos + CurX);\r
938     LCD_WriteRAM(TextColor);\r
939     LCD_SetCursor(Xpos + CurY, Ypos - CurX);\r
940     LCD_WriteRAM(TextColor);\r
941     LCD_SetCursor(Xpos - CurY, Ypos + CurX);\r
942     LCD_WriteRAM(TextColor);\r
943     LCD_SetCursor(Xpos - CurY, Ypos - CurX);\r
944     LCD_WriteRAM(TextColor);\r
945 \r
946     if (D < 0)\r
947     {\r
948       D += (CurX << 2) + 6;\r
949     }\r
950     else\r
951     {\r
952       D += ((CurX - CurY) << 2) + 10;\r
953       CurY--;\r
954     }\r
955     CurX++;\r
956   }\r
957 }\r
958 \r
959 /*******************************************************************************\r
960 * Function Name  : LCD_DrawMonoPict\r
961 * Description    : Displays a monocolor picture.\r
962 * Input          : - Pict: pointer to the picture array.\r
963 * Output         : None\r
964 * Return         : None\r
965 *******************************************************************************/\r
966 void LCD_DrawMonoPict(uc32 *Pict)\r
967 {\r
968   u32 index = 0, i = 0;\r
969 \r
970   LCD_SetCursor(0, 319);\r
971 \r
972   for(index = 0; index < 2400; index++)\r
973   {\r
974     for(i = 0; i < 32; i++)\r
975     {\r
976       if((Pict[index] & (1 << i)) == 0x00)\r
977       {\r
978         LCD_WriteRAM(BackColor);\r
979       }\r
980       else\r
981       {\r
982         LCD_WriteRAM(TextColor);\r
983       }\r
984     }\r
985   }\r
986 }\r
987 \r
988 /*******************************************************************************\r
989 * Function Name  : LCD_DrawBMP\r
990 * Description    : Displays a bitmap picture loaded in the SPI Flash.\r
991 * Input          : - BmpAddress: Bmp picture address in the SPI Flash.\r
992 * Output         : None\r
993 * Return         : None\r
994 *******************************************************************************/\r
995 void LCD_DrawBMP(u32 BmpAddress)\r
996 {\r
997   u32 i = 0;\r
998 \r
999   LCD_WriteReg(R1, 0xD0);\r
1000   LCD_WriteReg(R5, 0x04);\r
1001 \r
1002   LCD_SetCursor(239, 0x013F);\r
1003 \r
1004   SPI_FLASH_StartReadSequence(BmpAddress);\r
1005 \r
1006   /* Disable SPI1  */\r
1007   SPI_Cmd(SPI1, DISABLE);\r
1008   /* SPI in 16-bit mode */\r
1009   SPI_DataSizeConfig(SPI1, SPI_DataSize_16b);\r
1010   /* Enable SPI1  */\r
1011   SPI_Cmd(SPI1, ENABLE);\r
1012 \r
1013   for(i = 0; i < 76800; i++)\r
1014   {\r
1015     LCD_WriteRAM(__REV_HalfWord(SPI_FLASH_SendHalfWord(0xA5A5)));\r
1016   }\r
1017 \r
1018   /* Deselect the FLASH: Chip Select high */\r
1019   SPI_FLASH_ChipSelect(1);\r
1020 \r
1021   /* Disable SPI1  */\r
1022   SPI_Cmd(SPI1, DISABLE);\r
1023   /* SPI in 8-bit mode */\r
1024   SPI_DataSizeConfig(SPI1, SPI_DataSize_8b);\r
1025   /* Enable SPI1  */\r
1026   SPI_Cmd(SPI1, ENABLE);\r
1027 }\r
1028 \r
1029 /*******************************************************************************\r
1030 * Function Name  : LCD_WriteReg\r
1031 * Description    : Writes to the selected LCD register.\r
1032 * Input          : - LCD_Reg: address of the selected register.\r
1033 *                  - LCD_RegValue: value to write to the selected register.\r
1034 * Output         : None\r
1035 * Return         : None\r
1036 *******************************************************************************/\r
1037 void LCD_WriteReg(u8 LCD_Reg, u8 LCD_RegValue)\r
1038 {\r
1039   u16 tmp = 0;\r
1040 \r
1041   LCD_CtrlLinesWrite(GPIOD, CtrlPin_NWR, Bit_RESET);\r
1042   LCD_CtrlLinesWrite(GPIOD, CtrlPin_RS, Bit_RESET);\r
1043   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_RESET);\r
1044 \r
1045   tmp = LCD_Reg << 8;\r
1046   tmp |= LCD_RegValue;\r
1047 \r
1048   SPI_SendData(SPI2, tmp);\r
1049   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)\r
1050   {\r
1051   }\r
1052 \r
1053   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET);\r
1054 }\r
1055 \r
1056 /*******************************************************************************\r
1057 * Function Name  : LCD_ReadReg\r
1058 * Description    : Reads the selected LCD Register.\r
1059 * Input          : None\r
1060 * Output         : None\r
1061 * Return         : LCD Register Value.\r
1062 *******************************************************************************/\r
1063 u8 LCD_ReadReg(u8 LCD_Reg)\r
1064 {\r
1065   u16 tmp = 0;\r
1066 \r
1067   LCD_CtrlLinesWrite(GPIOD, CtrlPin_NWR, Bit_RESET);\r
1068   LCD_CtrlLinesWrite(GPIOD, CtrlPin_RS, Bit_RESET);\r
1069   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_RESET);\r
1070 \r
1071   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)\r
1072   {\r
1073   }\r
1074   SPI_SendData(SPI2, LCD_Reg);\r
1075 \r
1076   LCD_CtrlLinesWrite(GPIOD, CtrlPin_NWR, Bit_SET);\r
1077 \r
1078   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)\r
1079   {\r
1080   }\r
1081   SPI_SendData(SPI2, 0xFF);\r
1082 \r
1083   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE)== RESET)\r
1084   {\r
1085   }\r
1086   tmp = SPI_ReceiveData(SPI2);\r
1087 \r
1088   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET);\r
1089   return tmp;\r
1090 }\r
1091 \r
1092 /*******************************************************************************\r
1093 * Function Name  : LCD_WriteRAM\r
1094 * Description    : Writes to the LCD RAM.\r
1095 * Input          : - RGB_Code: the pixel color in RGB mode (5-6-5).\r
1096 * Output         : None\r
1097 * Return         : None\r
1098 *******************************************************************************/\r
1099 void LCD_WriteRAM(u16 RGB_Code)\r
1100 {\r
1101   LCD_CtrlLinesWrite(GPIOD, CtrlPin_NWR, Bit_RESET);\r
1102   LCD_CtrlLinesWrite(GPIOD, CtrlPin_RS, Bit_SET);\r
1103   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_RESET);\r
1104 \r
1105   SPI_SendData(SPI2, RGB_Code);\r
1106   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)\r
1107   {\r
1108   }\r
1109 \r
1110   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET);\r
1111 }\r
1112 \r
1113 /*******************************************************************************\r
1114 * Function Name  : LCD_ReadRAM\r
1115 * Description    : Reads the LCD RAM.\r
1116 * Input          : None\r
1117 * Output         : None\r
1118 * Return         : LCD RAM Value.\r
1119 *******************************************************************************/\r
1120 u16  LCD_ReadRAM(void)\r
1121 {\r
1122   u16 tmp = 0;\r
1123 \r
1124   LCD_CtrlLinesWrite(GPIOD, CtrlPin_NWR, Bit_SET);\r
1125   LCD_CtrlLinesWrite(GPIOD, CtrlPin_RS, Bit_SET);\r
1126   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_RESET);\r
1127 \r
1128   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)\r
1129   {\r
1130   }\r
1131   SPI_SendData(SPI2, 0xFF);\r
1132   while(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE)==RESET)\r
1133   {\r
1134   }\r
1135   tmp = SPI_ReceiveData(SPI2);\r
1136 \r
1137   LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET);\r
1138 \r
1139   return tmp;\r
1140 }\r
1141 \r
1142 /*******************************************************************************\r
1143 * Function Name  : LCD_PowerOn\r
1144 * Description    :\r
1145 * Input          : None\r
1146 * Output         : None\r
1147 * Return         : None\r
1148 *******************************************************************************/\r
1149 void LCD_PowerOn(void)\r
1150 {\r
1151   /* Power On Set */\r
1152   LCD_WriteReg(R28, 0x73);\r
1153   LCD_WriteReg(R36, 0x74);\r
1154   LCD_WriteReg(R30, 0x01);\r
1155   LCD_WriteReg(R24, 0xC1);\r
1156   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
1157   LCD_WriteReg(R24, 0xE1);\r
1158   LCD_WriteReg(R24, 0xF1);\r
1159   vTaskDelay( 60 / portTICK_RATE_MS ); /* Delay 60 ms */\r
1160   LCD_WriteReg(R24, 0xF5);\r
1161   vTaskDelay( 60 / portTICK_RATE_MS ); /* Delay 60 ms */\r
1162   LCD_WriteReg(R27, 0x09);\r
1163   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
1164   LCD_WriteReg(R31, 0x11);\r
1165   LCD_WriteReg(R32, 0x0E);\r
1166   LCD_WriteReg(R30, 0x81);\r
1167   vTaskDelay( 10 / portTICK_RATE_MS ); /* Delay 10 ms */\r
1168 }\r
1169 \r
1170 /*******************************************************************************\r
1171 * Function Name  : LCD_DisplayOn\r
1172 * Description    : Enables the Display.\r
1173 * Input          : None\r
1174 * Output         : None\r
1175 * Return         : None\r
1176 *******************************************************************************/\r
1177 void LCD_DisplayOn(void)\r
1178 {\r
1179   LCD_WriteReg(R1, 0x50);\r
1180   LCD_WriteReg(R5, 0x04);\r
1181 \r
1182   /* Display On */\r
1183   LCD_WriteReg(R0, 0x80);\r
1184   LCD_WriteReg(R59, 0x01);\r
1185   vTaskDelay( 40 / portTICK_RATE_MS );                 /* Delay 40 ms */\r
1186   LCD_WriteReg(R0, 0x20);\r
1187 }\r
1188 \r
1189 /*******************************************************************************\r
1190 * Function Name  : LCD_DisplayOff\r
1191 * Description    : Disables the Display.\r
1192 * Input          : None\r
1193 * Output         : None\r
1194 * Return         : None\r
1195 *******************************************************************************/\r
1196 void LCD_DisplayOff(void)\r
1197 {\r
1198   /* Display Off */\r
1199   LCD_WriteReg(R0, 0xA0);\r
1200   vTaskDelay( 40 / portTICK_RATE_MS );                 /* Delay 40 ms */\r
1201   LCD_WriteReg(R59, 0x00);\r
1202 }\r
1203 \r
1204 /*******************************************************************************\r
1205 * Function Name  : LCD_CtrlLinesConfig\r
1206 * Description    : Configures LCD control lines in Output Push-Pull mode.\r
1207 * Input          : None\r
1208 * Output         : None\r
1209 * Return         : None\r
1210 *******************************************************************************/\r
1211 void LCD_CtrlLinesConfig(void)\r
1212 {\r
1213   GPIO_InitTypeDef GPIO_InitStructure;\r
1214 \r
1215   /* Configure NCS (PB.02) in Output Push-Pull mode */\r
1216   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;\r
1217   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
1218   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\r
1219   GPIO_Init(GPIOB, &GPIO_InitStructure);\r
1220 \r
1221   /* Configure NWR(RNW), RS (PD.15, PD.07) in Output Push-Pull mode */\r
1222   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_15;\r
1223   GPIO_Init(GPIOD, &GPIO_InitStructure);\r
1224 }\r
1225 \r
1226 /*******************************************************************************\r
1227 * Function Name  : LCD_CtrlLinesWrite\r
1228 * Description    : Sets or reset LCD control lines.\r
1229 * Input          : - GPIOx: where x can be B or D to select the GPIO peripheral.\r
1230 *                  - CtrlPins: the Control line. This parameter can be:\r
1231 *                       - CtrlPin_NCS: Chip Select pin (PB.02)\r
1232 *                       - CtrlPin_NWR: Read/Write Selection pin (PD.15)\r
1233 *                       - CtrlPin_RS: Register/RAM Selection pin (PD.07)\r
1234 *                  - BitVal: specifies the value to be written to the selected bit.\r
1235 *                    This parameter can be:\r
1236 *                       - Bit_RESET: to clear the port pin\r
1237 *                       - Bit_SET: to set the port pin\r
1238 * Output         : None\r
1239 * Return         : None\r
1240 *******************************************************************************/\r
1241 void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, u16 CtrlPins, BitAction BitVal)\r
1242 {\r
1243   /* Set or Reset the control line */\r
1244   GPIO_WriteBit(GPIOx, CtrlPins, BitVal);\r
1245 }\r
1246 \r
1247 /*******************************************************************************\r
1248 * Function Name  : LCD_SPIConfig\r
1249 * Description    : Configures the SPI2 interface.\r
1250 * Input          : None\r
1251 * Output         : None\r
1252 * Return         : None\r
1253 *******************************************************************************/\r
1254 void LCD_SPIConfig(void)\r
1255 {\r
1256   SPI_InitTypeDef    SPI_InitStructure;\r
1257   GPIO_InitTypeDef   GPIO_InitStructure;\r
1258 \r
1259   /* Enable GPIOA clock */\r
1260   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);\r
1261 \r
1262   /* Enable SPI2 clock  */\r
1263   RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);\r
1264 \r
1265   /* Configure SPI2 pins: NSS, SCK, MISO and MOSI */\r
1266   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;\r
1267   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
1268   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;\r
1269   GPIO_Init(GPIOB, &GPIO_InitStructure);\r
1270 \r
1271   /* SPI2 Config */\r
1272   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;\r
1273   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;\r
1274   SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;\r
1275   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;\r
1276   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;\r
1277   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;\r
1278   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;\r
1279   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;\r
1280   SPI_Init(SPI2, &SPI_InitStructure);\r
1281 \r
1282   /* SPI2 enable */\r
1283   SPI_Cmd(SPI2, ENABLE);\r
1284 }\r
1285 \r
1286 /*******************************************************************************\r
1287 * Function Name  : StrLength\r
1288 * Description    : Returns length of string.\r
1289 * Input          : - Str: Character Pointer.\r
1290 * Output         : None\r
1291 * Return         : String length.\r
1292 *******************************************************************************/\r
1293 static u32 StrLength(u8 *Str)\r
1294 {\r
1295   u32 Index = 0;\r
1296 \r
1297   /* Increment the Index unless the end of string */\r
1298   for(Index = 0; *Str != '\0'; Str++, Index++)\r
1299   {\r
1300   }\r
1301 \r
1302   return Index;\r
1303 }\r
1304 \r
1305 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r