GLCD Library

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers GLCD.c Source File

GLCD.c

00001 /****************************************Copyright (c)**************************************************                         
00002 **
00003 **                                 http://www.powermcu.com
00004 **
00005 **--------------File Info-------------------------------------------------------------------------------
00006 ** File name:           GLCD.c
00007 ** Descriptions:        Has been tested SSD1289��ILI9320��R61505U��SSD1298��ST7781��SPFD5408B��ILI9325��ILI9328��
00008 **                      HX8346A��HX8347A
00009 **------------------------------------------------------------------------------------------------------
00010 ** Created by:          AVRman
00011 ** Created date:        2012-3-10
00012 ** Version:             1.3
00013 ** Descriptions:        The original version
00014 **
00015 **------------------------------------------------------------------------------------------------------
00016 ** Modified by:         
00017 ** Modified date:   
00018 ** Version:
00019 ** Descriptions:        
00020 ********************************************************************************************************/
00021 
00022 /* Includes ------------------------------------------------------------------*/
00023 #include "GLCD.h" 
00024 #include "HzLib.h"
00025 #include "AsciiLib.h"
00026 
00027 /* Private variables ---------------------------------------------------------*/
00028 static uint8_t LCD_Code;
00029 
00030 /* Private define ------------------------------------------------------------*/
00031 #define  ILI9320    0  /* 0x9320 */
00032 #define  ILI9325    1  /* 0x9325 */
00033 #define  ILI9328    2  /* 0x9328 */
00034 #define  ILI9331    3  /* 0x9331 */
00035 #define  SSD1298    4  /* 0x8999 */
00036 #define  SSD1289    5  /* 0x8989 */
00037 #define  ST7781     6  /* 0x7783 */
00038 #define  LGDP4531   7  /* 0x4531 */
00039 #define  SPFD5408B  8  /* 0x5408 */
00040 #define  R61505U    9  /* 0x1505 0x0505 */
00041 #define  HX8346A    10 /* 0x0046 */  
00042 #define  HX8347D    11 /* 0x0047 */
00043 #define  HX8347A    12 /* 0x0047 */ 
00044 #define  LGDP4535   13 /* 0x4535 */  
00045 #define  SSD2119    14 /* 3.5 LCD 0x9919 */
00046 
00047 /*******************************************************************************
00048 * Function Name  : Lcd_Configuration
00049 * Description    : Configures LCD Control lines
00050 * Input          : None
00051 * Output         : None
00052 * Return         : None
00053 * Attention      : None
00054 *******************************************************************************/
00055 static void LCD_Configuration(void)
00056 {
00057     /* Configure the LCD Control pins */
00058     
00059     /* EN = P0.19 , LE = P0.20 , DIR = P0.21 , CS = P0.22 , RS = P0.23 , RS = P0.23 */
00060     /* RS = P0.23 , WR = P0.24 , RD = P0.25 , DB[0.7] = P2.0...P2.7 , DB[8.15]= P2.0...P2.7 */  
00061     LPC_GPIO0->FIODIR   |= 0x03f80000;
00062     LPC_GPIO0->FIOSET    = 0x03f80000;
00063 }
00064 
00065 /*******************************************************************************
00066 * Function Name  : LCD_Send
00067 * Description    : LCD���
00068 * Input          : - byte: byte to be sent
00069 * Output         : None
00070 * Return         : None
00071 * Attention      : None
00072 *******************************************************************************/
00073  void LCD_Send (uint16_t byte) 
00074 {
00075     LPC_GPIO2->FIODIR |= 0xFF;          /* P2.0...P2.7 Output */
00076     LCD_DIR(1)                          /* Interface A->B */
00077     LCD_EN(0)                           /* Enable 2A->2B */
00078     LPC_GPIO2->FIOPIN =  byte;          /* Write D0..D7 */
00079     LCD_LE(1)                         
00080     LCD_LE(0)                           /* latch D0..D7 */
00081     LPC_GPIO2->FIOPIN =  byte >> 8;     /* Write D8..D15 */
00082 }
00083 
00084 /*******************************************************************************
00085 * Function Name  : wait_delay
00086 * Description    : Delay Time
00087 * Input          : - nCount: Delay Time
00088 * Output         : None
00089 * Return         : None
00090 * Return         : None
00091 * Attention      : None
00092 *******************************************************************************/
00093 static void wait_delay(int count)
00094 {
00095     while(count--);
00096 }
00097 
00098 /*******************************************************************************
00099 * Function Name  : LCD_Read
00100 * Description    : LCD������
00101 * Input          : - byte: byte to be read
00102 * Output         : None
00103 * Return         : ���ض�ȡ��������
00104 * Attention      : None
00105 *******************************************************************************/
00106  uint16_t LCD_Read (void) 
00107 {
00108     uint16_t value;
00109     
00110     LPC_GPIO2->FIODIR &= ~(0xFF);              /* P2.0...P2.7 Input */
00111     LCD_DIR(0);                                /* Interface B->A */
00112     LCD_EN(0);                                 /* Enable 2B->2A */
00113     wait_delay(30);                            /* delay some times */
00114     value = LPC_GPIO2->FIOPIN0;                /* Read D8..D15 */
00115     LCD_EN(1);                                 /* Enable 1B->1A */
00116     wait_delay(30);                            /* delay some times */
00117     value = (value << 8) | LPC_GPIO2->FIOPIN0; /* Read D0..D7 */
00118     LCD_DIR(1);
00119     return  value;
00120 }
00121 
00122 /*******************************************************************************
00123 * Function Name  : LCD_WriteIndex
00124 * Description    : LCDд�Ĵ�����ַ
00125 * Input          : - index: �Ĵ�����ַ
00126 * Output         : None
00127 * Return         : None
00128 * Attention      : None
00129 *******************************************************************************/
00130  void LCD_WriteIndex(uint16_t index)
00131 {
00132     LCD_CS(0);
00133     LCD_RS(0);
00134     LCD_RD(1);
00135     LCD_Send( index ); 
00136     wait_delay(22); 
00137     LCD_WR(0);  
00138     wait_delay(1);
00139     LCD_WR(1);
00140     LCD_CS(1);
00141 }
00142 
00143 /*******************************************************************************
00144 * Function Name  : LCD_WriteData
00145 * Description    : LCDд�Ĵ�������
00146 * Input          : - index: �Ĵ�������
00147 * Output         : None
00148 * Return         : None
00149 * Attention      : None
00150 *******************************************************************************/
00151  void LCD_WriteData(uint16_t data)
00152 {               
00153     LCD_CS(0);
00154     LCD_RS(1);   
00155     LCD_Send( data );
00156     LCD_WR(0);     
00157     wait_delay(1);
00158     LCD_WR(1);
00159     LCD_CS(1);
00160 }
00161 
00162 /*******************************************************************************
00163 * Function Name  : LCD_ReadData
00164 * Description    : ��ȡ����������
00165 * Input          : None
00166 * Output         : None
00167 * Return         : ���ض�ȡ��������
00168 * Attention      : None
00169 *******************************************************************************/
00170  uint16_t LCD_ReadData(void)
00171 { 
00172     uint16_t value;
00173     
00174     LCD_CS(0);
00175     LCD_RS(1);
00176     LCD_WR(1);
00177     LCD_RD(0);
00178     value = LCD_Read();
00179     
00180     LCD_RD(1);
00181     LCD_CS(1);
00182     
00183     return value;
00184 }
00185 
00186 /*******************************************************************************
00187 * Function Name  : LCD_WriteReg
00188 * Description    : Writes to the selected LCD register.
00189 * Input          : - LCD_Reg: address of the selected register.
00190 *                  - LCD_RegValue: value to write to the selected register.
00191 * Output         : None
00192 * Return         : None
00193 * Attention      : None
00194 *******************************************************************************/
00195  void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_RegValue)
00196 { 
00197     /* Write 16-bit Index, then Write Reg */  
00198     LCD_WriteIndex(LCD_Reg);         
00199     /* Write 16-bit Reg */
00200     LCD_WriteData(LCD_RegValue);  
00201 }
00202 
00203 /*******************************************************************************
00204 * Function Name  : LCD_WriteReg
00205 * Description    : Reads the selected LCD Register.
00206 * Input          : None
00207 * Output         : None
00208 * Return         : LCD Register Value.
00209 * Attention      : None
00210 *******************************************************************************/
00211  uint16_t LCD_ReadReg(uint16_t LCD_Reg)
00212 {
00213     uint16_t LCD_RAM;
00214     
00215     /* Write 16-bit Index (then Read Reg) */
00216     LCD_WriteIndex(LCD_Reg);
00217     /* Read 16-bit Reg */
00218     LCD_RAM = LCD_ReadData();       
00219     return LCD_RAM;
00220 }
00221 
00222 /*******************************************************************************
00223 * Function Name  : LCD_SetCursor
00224 * Description    : Sets the cursor position.
00225 * Input          : - Xpos: specifies the X position.
00226 *                  - Ypos: specifies the Y position. 
00227 * Output         : None
00228 * Return         : None
00229 * Attention      : None
00230 *******************************************************************************/
00231 static void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos)
00232 {
00233     #if  ( DISP_ORIENTATION == 90 ) || ( DISP_ORIENTATION == 270 )
00234     
00235     uint16_t temp = Xpos;
00236 
00237              Xpos = Ypos;
00238              Ypos = ( MAX_X - 1 ) - temp;  
00239 
00240     #elif  ( DISP_ORIENTATION == 0 ) || ( DISP_ORIENTATION == 180 )
00241         
00242     #endif
00243 
00244   switch( LCD_Code )
00245   {
00246      default:        /* 0x9320 0x9325 0x9328 0x9331 0x5408 0x1505 0x0505 0x7783 0x4531 0x4535 */
00247           LCD_WriteReg(0x0020, Xpos );     
00248           LCD_WriteReg(0x0021, Ypos );     
00249           break; 
00250 
00251      case SSD1298:   /* 0x8999 */
00252      case SSD1289:   /* 0x8989 */
00253           LCD_WriteReg(0x004e, Xpos );      
00254           LCD_WriteReg(0x004f, Ypos );          
00255           break;  
00256 
00257      case HX8346A:   /* 0x0046 */
00258      case HX8347A:   /* 0x0047 */
00259      case HX8347D:   /* 0x0047 */
00260           LCD_WriteReg(0x02, Xpos>>8 );                                                  
00261           LCD_WriteReg(0x03, Xpos );  
00262 
00263           LCD_WriteReg(0x06, Ypos>>8 );                           
00264           LCD_WriteReg(0x07, Ypos );    
00265     
00266           break;     
00267      case SSD2119:   /* 3.5 LCD 0x9919 */
00268           break; 
00269   }
00270 }
00271 
00272 /*******************************************************************************
00273 * Function Name  : LCD_Delay
00274 * Description    : Delay Time
00275 * Input          : - nCount: Delay Time
00276 * Output         : None
00277 * Return         : None
00278 * Return         : None
00279 * Attention      : None
00280 *******************************************************************************/
00281 static void delay_ms(uint16_t ms)    
00282 { 
00283     uint16_t i,j; 
00284     for( i = 0; i < ms; i++ )
00285     { 
00286         for( j = 0; j < 1141; j++ );
00287     }
00288 } 
00289 
00290 
00291 /*******************************************************************************
00292 * Function Name  : LCD_Initializtion
00293 * Description    : Initialize TFT Controller.
00294 * Input          : None
00295 * Output         : None
00296 * Return         : None
00297 * Attention      : None
00298 *******************************************************************************/
00299 void LCD_Initialization(void)
00300 {
00301     uint16_t DeviceCode;
00302     
00303     LCD_Configuration();
00304     delay_ms(100);
00305     DeviceCode = LCD_ReadReg(0x0000);       /* ��ȡ��ID */  
00306     /* ��ͬ������IC ��ʼ����ͬ */
00307     if( DeviceCode == 0x9325 || DeviceCode == 0x9328 )  
00308     {
00309         LCD_Code = ILI9325;
00310         LCD_WriteReg(0x00e7,0x0010);      
00311         LCD_WriteReg(0x0000,0x0001);    /* start internal osc */
00312         LCD_WriteReg(0x0001,0x0100);     
00313         LCD_WriteReg(0x0002,0x0700);    /* power on sequence */
00314         LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4)|(0<<3) );     /* importance */
00315         LCD_WriteReg(0x0004,0x0000);                                   
00316         LCD_WriteReg(0x0008,0x0207);               
00317         LCD_WriteReg(0x0009,0x0000);         
00318         LCD_WriteReg(0x000a,0x0000);    /* display setting */        
00319         LCD_WriteReg(0x000c,0x0001);    /* display setting */        
00320         LCD_WriteReg(0x000d,0x0000);                    
00321         LCD_WriteReg(0x000f,0x0000);
00322         /* Power On sequence */
00323         LCD_WriteReg(0x0010,0x0000);   
00324         LCD_WriteReg(0x0011,0x0007);
00325         LCD_WriteReg(0x0012,0x0000);                                                                 
00326         LCD_WriteReg(0x0013,0x0000);                 
00327         delay_ms(50);  /* delay 50 ms */        
00328         LCD_WriteReg(0x0010,0x1590);   
00329         LCD_WriteReg(0x0011,0x0227);
00330         delay_ms(50);  /* delay 50 ms */        
00331         LCD_WriteReg(0x0012,0x009c);                  
00332         delay_ms(50);  /* delay 50 ms */        
00333         LCD_WriteReg(0x0013,0x1900);   
00334         LCD_WriteReg(0x0029,0x0023);
00335         LCD_WriteReg(0x002b,0x000e);
00336         delay_ms(50);  /* delay 50 ms */        
00337         LCD_WriteReg(0x0020,0x0000);                                                            
00338         LCD_WriteReg(0x0021,0x0000);           
00339         delay_ms(50);  /* delay 50 ms */        
00340         LCD_WriteReg(0x0030,0x0007); 
00341         LCD_WriteReg(0x0031,0x0707);   
00342         LCD_WriteReg(0x0032,0x0006);
00343         LCD_WriteReg(0x0035,0x0704);
00344         LCD_WriteReg(0x0036,0x1f04); 
00345         LCD_WriteReg(0x0037,0x0004);
00346         LCD_WriteReg(0x0038,0x0000);        
00347         LCD_WriteReg(0x0039,0x0706);     
00348         LCD_WriteReg(0x003c,0x0701);
00349         LCD_WriteReg(0x003d,0x000f);
00350         delay_ms(50);  /* delay 50 ms */        
00351         LCD_WriteReg(0x0050,0x0000);        
00352         LCD_WriteReg(0x0051,0x00ef);   
00353         LCD_WriteReg(0x0052,0x0000);     
00354         LCD_WriteReg(0x0053,0x013f);
00355         LCD_WriteReg(0x0060,0xa700);   
00356         LCD_WriteReg(0x0061,0x0001); 
00357         LCD_WriteReg(0x006a,0x0000);
00358         LCD_WriteReg(0x0080,0x0000);
00359         LCD_WriteReg(0x0081,0x0000);
00360         LCD_WriteReg(0x0082,0x0000);
00361         LCD_WriteReg(0x0083,0x0000);
00362         LCD_WriteReg(0x0084,0x0000);
00363         LCD_WriteReg(0x0085,0x0000);
00364           
00365         LCD_WriteReg(0x0090,0x0010);     
00366         LCD_WriteReg(0x0092,0x0000);  
00367         LCD_WriteReg(0x0093,0x0003);
00368         LCD_WriteReg(0x0095,0x0110);
00369         LCD_WriteReg(0x0097,0x0000);        
00370         LCD_WriteReg(0x0098,0x0000);  
00371         /* display on sequence */    
00372         LCD_WriteReg(0x0007,0x0133);
00373         
00374         LCD_WriteReg(0x0020,0x0000);  /* ����ַ0 */                                                          
00375         LCD_WriteReg(0x0021,0x0000);  /* ����ַ0 */     
00376     }
00377 //  else if( DeviceCode == 0x9320 || DeviceCode == 0x9300 )
00378 //  {
00379 //      LCD_Code = ILI9320;
00380 //      LCD_WriteReg(0x00,0x0000);
00381 //      LCD_WriteReg(0x01,0x0100);  /* Driver Output Contral */
00382 //      LCD_WriteReg(0x02,0x0700);  /* LCD Driver Waveform Contral */
00383 //      LCD_WriteReg(0x03,0x1018);  /* Entry Mode Set */
00384 //      
00385 //      LCD_WriteReg(0x04,0x0000);  /* Scalling Contral */
00386 //      LCD_WriteReg(0x08,0x0202);  /* Display Contral */
00387 //      LCD_WriteReg(0x09,0x0000);  /* Display Contral 3.(0x0000) */
00388 //      LCD_WriteReg(0x0a,0x0000);  /* Frame Cycle Contal.(0x0000) */
00389 //      LCD_WriteReg(0x0c,(1<<0));  /* Extern Display Interface Contral */
00390 //      LCD_WriteReg(0x0d,0x0000);  /* Frame Maker Position */
00391 //      LCD_WriteReg(0x0f,0x0000);  /* Extern Display Interface Contral 2. */
00392 //      
00393 //      delay_ms(100);  /* delay 100 ms */      
00394 //      LCD_WriteReg(0x07,0x0101);  /* Display Contral */
00395 //      delay_ms(100);  /* delay 100 ms */      
00396 //  
00397 //      LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4)); /* Power Control 1.(0x16b0) */
00398 //      LCD_WriteReg(0x11,0x0007);                              /* Power Control 2 */
00399 //      LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0));                /* Power Control 3.(0x0138) */
00400 //      LCD_WriteReg(0x13,0x0b00);                              /* Power Control 4 */
00401 //      LCD_WriteReg(0x29,0x0000);                              /* Power Control 7 */
00402 //      
00403 //      LCD_WriteReg(0x2b,(1<<14)|(1<<4));
00404 //          
00405 //      LCD_WriteReg(0x50,0);       /* Set X Start */
00406 //      LCD_WriteReg(0x51,239);     /* Set X End */
00407 //      LCD_WriteReg(0x52,0);       /* Set Y Start */
00408 //      LCD_WriteReg(0x53,319);     /* Set Y End */
00409 //      
00410 //      LCD_WriteReg(0x60,0x2700);  /* Driver Output Control */
00411 //      LCD_WriteReg(0x61,0x0001);  /* Driver Output Control */
00412 //      LCD_WriteReg(0x6a,0x0000);  /* Vertical Srcoll Control */
00413 //      
00414 //      LCD_WriteReg(0x80,0x0000);  /* Display Position? Partial Display 1 */
00415 //      LCD_WriteReg(0x81,0x0000);  /* RAM Address Start? Partial Display 1 */
00416 //      LCD_WriteReg(0x82,0x0000);  /* RAM Address End-Partial Display 1 */
00417 //      LCD_WriteReg(0x83,0x0000);  /* Displsy Position? Partial Display 2 */
00418 //      LCD_WriteReg(0x84,0x0000);  /* RAM Address Start? Partial Display 2 */
00419 //      LCD_WriteReg(0x85,0x0000);  /* RAM Address End? Partial Display 2 */
00420 //      
00421 //      LCD_WriteReg(0x90,(0<<7)|(16<<0));  /* Frame Cycle Contral.(0x0013) */
00422 //      LCD_WriteReg(0x92,0x0000);  /* Panel Interface Contral 2.(0x0000) */
00423 //      LCD_WriteReg(0x93,0x0001);  /* Panel Interface Contral 3. */
00424 //      LCD_WriteReg(0x95,0x0110);  /* Frame Cycle Contral.(0x0110) */
00425 //      LCD_WriteReg(0x97,(0<<8));  
00426 //      LCD_WriteReg(0x98,0x0000);  /* Frame Cycle Contral */
00427 //  
00428 //      LCD_WriteReg(0x07,0x0173);
00429 //  }
00430 //  else if( DeviceCode == 0x9331 )
00431 //  {
00432 //      LCD_Code = ILI9331;
00433 //      LCD_WriteReg(0x00E7, 0x1014);
00434 //      LCD_WriteReg(0x0001, 0x0100);   /* set SS and SM bit */
00435 //      LCD_WriteReg(0x0002, 0x0200);   /* set 1 line inversion */
00436 //      LCD_WriteReg(0x0003, 0x1030);   /* set GRAM write direction and BGR=1 */
00437 //      LCD_WriteReg(0x0008, 0x0202);   /* set the back porch and front porch */
00438 //      LCD_WriteReg(0x0009, 0x0000);   /* set non-display area refresh cycle ISC[3:0] */
00439 //      LCD_WriteReg(0x000A, 0x0000);   /* FMARK function */
00440 //      LCD_WriteReg(0x000C, 0x0000);   /* RGB interface setting */
00441 //      LCD_WriteReg(0x000D, 0x0000);   /* Frame marker Position */
00442 //      LCD_WriteReg(0x000F, 0x0000);   /* RGB interface polarity */
00443 //      /* Power On sequence */
00444 //      LCD_WriteReg(0x0010, 0x0000);   /* SAP, BT[3:0], AP, DSTB, SLP, STB */
00445 //      LCD_WriteReg(0x0011, 0x0007);   /* DC1[2:0], DC0[2:0], VC[2:0] */
00446 //      LCD_WriteReg(0x0012, 0x0000);   /* VREG1OUT voltage */
00447 //      LCD_WriteReg(0x0013, 0x0000);   /* VDV[4:0] for VCOM amplitude */
00448 //      delay_ms(200);  /* delay 200 ms */      
00449 //      LCD_WriteReg(0x0010, 0x1690);   /* SAP, BT[3:0], AP, DSTB, SLP, STB */
00450 //      LCD_WriteReg(0x0011, 0x0227);   /* DC1[2:0], DC0[2:0], VC[2:0] */
00451 //      delay_ms(50);  /* delay 50 ms */        
00452 //      LCD_WriteReg(0x0012, 0x000C);   /* Internal reference voltage= Vci  */
00453 //      delay_ms(50);  /* delay 50 ms */        
00454 //      LCD_WriteReg(0x0013, 0x0800);   /* Set VDV[4:0] for VCOM amplitude */
00455 //      LCD_WriteReg(0x0029, 0x0011);   /* Set VCM[5:0] for VCOMH */
00456 //      LCD_WriteReg(0x002B, 0x000B);   /* Set Frame Rate */
00457 //      delay_ms(50);  /* delay 50 ms */        
00458 //      LCD_WriteReg(0x0020, 0x0000);   /* GRAM horizontal Address */
00459 //      LCD_WriteReg(0x0021, 0x0000);   /* GRAM Vertical Address */
00460 //      /* Adjust the Gamma Curve */
00461 //      LCD_WriteReg(0x0030, 0x0000);
00462 //      LCD_WriteReg(0x0031, 0x0106);
00463 //      LCD_WriteReg(0x0032, 0x0000);
00464 //      LCD_WriteReg(0x0035, 0x0204);
00465 //      LCD_WriteReg(0x0036, 0x160A);
00466 //      LCD_WriteReg(0x0037, 0x0707);
00467 //      LCD_WriteReg(0x0038, 0x0106);
00468 //      LCD_WriteReg(0x0039, 0x0707);
00469 //      LCD_WriteReg(0x003C, 0x0402);
00470 //      LCD_WriteReg(0x003D, 0x0C0F);
00471 //      /* Set GRAM area */
00472 //      LCD_WriteReg(0x0050, 0x0000);   /* Horizontal GRAM Start Address */
00473 //      LCD_WriteReg(0x0051, 0x00EF);   /* Horizontal GRAM End Address */
00474 //      LCD_WriteReg(0x0052, 0x0000);   /* Vertical GRAM Start Address */
00475 //      LCD_WriteReg(0x0053, 0x013F);   /* Vertical GRAM Start Address */
00476 //      LCD_WriteReg(0x0060, 0x2700);   /* Gate Scan Line */
00477 //      LCD_WriteReg(0x0061, 0x0001);   /*  NDL,VLE, REV */
00478 //      LCD_WriteReg(0x006A, 0x0000);   /* set scrolling line */
00479 //      /* Partial Display Control */
00480 //      LCD_WriteReg(0x0080, 0x0000);
00481 //      LCD_WriteReg(0x0081, 0x0000);
00482 //      LCD_WriteReg(0x0082, 0x0000);
00483 //      LCD_WriteReg(0x0083, 0x0000);
00484 //      LCD_WriteReg(0x0084, 0x0000);
00485 //      LCD_WriteReg(0x0085, 0x0000);
00486 //      /* Panel Control */
00487 //      LCD_WriteReg(0x0090, 0x0010);
00488 //      LCD_WriteReg(0x0092, 0x0600);
00489 //      LCD_WriteReg(0x0007,0x0021);        
00490 //      delay_ms(50);  /* delay 50 ms */        
00491 //      LCD_WriteReg(0x0007,0x0061);
00492 //      delay_ms(50);  /* delay 50 ms */        
00493 //      LCD_WriteReg(0x0007,0x0133);    /* 262K color and display ON */
00494 //  }
00495 //  else if( DeviceCode == 0x9919 )
00496 //  {
00497 //      LCD_Code = SSD2119;
00498 //      /* POWER ON &RESET DISPLAY OFF */
00499 //      LCD_WriteReg(0x28,0x0006);
00500 //      LCD_WriteReg(0x00,0x0001);      
00501 //      LCD_WriteReg(0x10,0x0000);      
00502 //      LCD_WriteReg(0x01,0x72ef);
00503 //      LCD_WriteReg(0x02,0x0600);
00504 //      LCD_WriteReg(0x03,0x6a38);  
00505 //      LCD_WriteReg(0x11,0x6874);
00506 //      LCD_WriteReg(0x0f,0x0000);    /* RAM WRITE DATA MASK */
00507 //      LCD_WriteReg(0x0b,0x5308);    /* RAM WRITE DATA MASK */
00508 //      LCD_WriteReg(0x0c,0x0003);
00509 //      LCD_WriteReg(0x0d,0x000a);
00510 //      LCD_WriteReg(0x0e,0x2e00);  
00511 //      LCD_WriteReg(0x1e,0x00be);
00512 //      LCD_WriteReg(0x25,0x8000);
00513 //      LCD_WriteReg(0x26,0x7800);
00514 //      LCD_WriteReg(0x27,0x0078);
00515 //      LCD_WriteReg(0x4e,0x0000);
00516 //      LCD_WriteReg(0x4f,0x0000);
00517 //      LCD_WriteReg(0x12,0x08d9);
00518 //      /* Adjust the Gamma Curve */
00519 //      LCD_WriteReg(0x30,0x0000);
00520 //      LCD_WriteReg(0x31,0x0104);   
00521 //      LCD_WriteReg(0x32,0x0100);  
00522 //      LCD_WriteReg(0x33,0x0305);  
00523 //      LCD_WriteReg(0x34,0x0505);   
00524 //      LCD_WriteReg(0x35,0x0305);  
00525 //      LCD_WriteReg(0x36,0x0707);  
00526 //      LCD_WriteReg(0x37,0x0300);  
00527 //      LCD_WriteReg(0x3a,0x1200);  
00528 //      LCD_WriteReg(0x3b,0x0800);       
00529 //      LCD_WriteReg(0x07,0x0033);
00530 //  }
00531 //  else if( DeviceCode == 0x1505 || DeviceCode == 0x0505 )
00532 //  {
00533 //      LCD_Code = R61505U;
00534 //      /* initializing funciton */   
00535 //      LCD_WriteReg(0xe5,0x8000);  /* Set the internal vcore voltage */   
00536 //      LCD_WriteReg(0x00,0x0001);  /* start OSC */   
00537 //      LCD_WriteReg(0x2b,0x0010);  /* Set the frame rate as 80 when the internal resistor is used for oscillator circuit */   
00538 //      LCD_WriteReg(0x01,0x0100);  /* s720  to  s1 ; G1 to G320 */   
00539 //      LCD_WriteReg(0x02,0x0700);  /* set the line inversion */   
00540 //      LCD_WriteReg(0x03,0x1018);  /* 65536 colors */    
00541 //      LCD_WriteReg(0x04,0x0000);   
00542 //      LCD_WriteReg(0x08,0x0202);  /* specify the line number of front and back porch periods respectively */   
00543 //      LCD_WriteReg(0x09,0x0000);   
00544 //      LCD_WriteReg(0x0a,0x0000);   
00545 //      LCD_WriteReg(0x0c,0x0000);  /* select  internal system clock */  
00546 //      LCD_WriteReg(0x0d,0x0000);   
00547 //      LCD_WriteReg(0x0f,0x0000);    
00548 //      LCD_WriteReg(0x50,0x0000);  /* set windows adress */   
00549 //      LCD_WriteReg(0x51,0x00ef);   
00550 //      LCD_WriteReg(0x52,0x0000);   
00551 //      LCD_WriteReg(0x53,0x013f);   
00552 //      LCD_WriteReg(0x60,0x2700);   
00553 //      LCD_WriteReg(0x61,0x0001);   
00554 //      LCD_WriteReg(0x6a,0x0000);   
00555 //      LCD_WriteReg(0x80,0x0000);   
00556 //      LCD_WriteReg(0x81,0x0000);   
00557 //      LCD_WriteReg(0x82,0x0000);   
00558 //      LCD_WriteReg(0x83,0x0000);   
00559 //      LCD_WriteReg(0x84,0x0000);   
00560 //      LCD_WriteReg(0x85,0x0000);   
00561 //      LCD_WriteReg(0x90,0x0010);   
00562 //      LCD_WriteReg(0x92,0x0000);   
00563 //      LCD_WriteReg(0x93,0x0003);   
00564 //      LCD_WriteReg(0x95,0x0110);   
00565 //      LCD_WriteReg(0x97,0x0000);   
00566 //      LCD_WriteReg(0x98,0x0000);    
00567 //      /* power setting function */   
00568 //      LCD_WriteReg(0x10,0x0000);   
00569 //      LCD_WriteReg(0x11,0x0000);   
00570 //      LCD_WriteReg(0x12,0x0000);   
00571 //      LCD_WriteReg(0x13,0x0000);   
00572 //      delay_ms(100);   
00573 //      LCD_WriteReg(0x10,0x17b0);   
00574 //      LCD_WriteReg(0x11,0x0004);   
00575 //      delay_ms(50);   
00576 //      LCD_WriteReg(0x12,0x013e);   
00577 //      delay_ms(50);   
00578 //      LCD_WriteReg(0x13,0x1f00);   
00579 //      LCD_WriteReg(0x29,0x000f);   
00580 //      delay_ms(50);   
00581 //      LCD_WriteReg(0x20,0x0000);   
00582 //      LCD_WriteReg(0x21,0x0000);   
00583 //      
00584 //      /* initializing function */     
00585 //      LCD_WriteReg(0x30,0x0204);   
00586 //      LCD_WriteReg(0x31,0x0001);   
00587 //      LCD_WriteReg(0x32,0x0000);   
00588 //      LCD_WriteReg(0x35,0x0206);   
00589 //      LCD_WriteReg(0x36,0x0600);   
00590 //      LCD_WriteReg(0x37,0x0500);   
00591 //      LCD_WriteReg(0x38,0x0505);   
00592 //      LCD_WriteReg(0x39,0x0407);   
00593 //      LCD_WriteReg(0x3c,0x0500);   
00594 //      LCD_WriteReg(0x3d,0x0503);   
00595 //      
00596 //      /* display on */  
00597 //      LCD_WriteReg(0x07,0x0173);  
00598 //  }   
00599 //  else if( DeviceCode == 0x8989 )
00600 //  {
00601 //      LCD_Code = SSD1289;
00602 //      LCD_WriteReg(0x0000,0x0001);    delay_ms(50);   /* �򿪾��� */
00603 //      LCD_WriteReg(0x0003,0xA8A4);    delay_ms(50);   
00604 //      LCD_WriteReg(0x000C,0x0000);    delay_ms(50);   
00605 //      LCD_WriteReg(0x000D,0x080C);    delay_ms(50);   
00606 //      LCD_WriteReg(0x000E,0x2B00);    delay_ms(50);   
00607 //      LCD_WriteReg(0x001E,0x00B0);    delay_ms(50);   
00608 //      LCD_WriteReg(0x0001,0x2B3F);    delay_ms(50);   /* �����������320*240 0x2B3F */
00609 //      LCD_WriteReg(0x0002,0x0600);    delay_ms(50);
00610 //      LCD_WriteReg(0x0010,0x0000);    delay_ms(50);
00611 //      LCD_WriteReg(0x0011,0x6070);    delay_ms(50);   /* �������ݸ�ʽ 16λɫ ���� 0x6070 */
00612 //      LCD_WriteReg(0x0005,0x0000);    delay_ms(50);
00613 //      LCD_WriteReg(0x0006,0x0000);    delay_ms(50);
00614 //      LCD_WriteReg(0x0016,0xEF1C);    delay_ms(50);
00615 //      LCD_WriteReg(0x0017,0x0003);    delay_ms(50);
00616 //      LCD_WriteReg(0x0007,0x0133);    delay_ms(50);         
00617 //      LCD_WriteReg(0x000B,0x0000);    delay_ms(50);
00618 //      LCD_WriteReg(0x000F,0x0000);    delay_ms(50);   /* ɨ�迪ʼ��ַ */
00619 //      LCD_WriteReg(0x0041,0x0000);    delay_ms(50);
00620 //      LCD_WriteReg(0x0042,0x0000);    delay_ms(50);
00621 //      LCD_WriteReg(0x0048,0x0000);    delay_ms(50);
00622 //      LCD_WriteReg(0x0049,0x013F);    delay_ms(50);
00623 //      LCD_WriteReg(0x004A,0x0000);    delay_ms(50);
00624 //      LCD_WriteReg(0x004B,0x0000);    delay_ms(50);
00625 //      LCD_WriteReg(0x0044,0xEF00);    delay_ms(50);
00626 //      LCD_WriteReg(0x0045,0x0000);    delay_ms(50);
00627 //      LCD_WriteReg(0x0046,0x013F);    delay_ms(50);
00628 //      LCD_WriteReg(0x0030,0x0707);    delay_ms(50);
00629 //      LCD_WriteReg(0x0031,0x0204);    delay_ms(50);
00630 //      LCD_WriteReg(0x0032,0x0204);    delay_ms(50);
00631 //      LCD_WriteReg(0x0033,0x0502);    delay_ms(50);
00632 //      LCD_WriteReg(0x0034,0x0507);    delay_ms(50);
00633 //      LCD_WriteReg(0x0035,0x0204);    delay_ms(50);
00634 //      LCD_WriteReg(0x0036,0x0204);    delay_ms(50);
00635 //      LCD_WriteReg(0x0037,0x0502);    delay_ms(50);
00636 //      LCD_WriteReg(0x003A,0x0302);    delay_ms(50);
00637 //      LCD_WriteReg(0x003B,0x0302);    delay_ms(50);
00638 //      LCD_WriteReg(0x0023,0x0000);    delay_ms(50);
00639 //      LCD_WriteReg(0x0024,0x0000);    delay_ms(50);
00640 //      LCD_WriteReg(0x0025,0x8000);    delay_ms(50);
00641 //      LCD_WriteReg(0x004f,0);        /* ����ַ0 */
00642 //      LCD_WriteReg(0x004e,0);        /* ����ַ0 */
00643 //  }
00644 //  else if( DeviceCode == 0x8999 )
00645 //  {
00646 //      LCD_Code = SSD1298;     
00647 //      LCD_WriteReg(0x0028,0x0006);
00648 //      LCD_WriteReg(0x0000,0x0001);
00649 //      LCD_WriteReg(0x0003,0xaea4);    /* power control 1---line frequency and VHG,VGL voltage */
00650 //      LCD_WriteReg(0x000c,0x0004);    /* power control 2---VCIX2 output voltage */
00651 //      LCD_WriteReg(0x000d,0x000c);    /* power control 3---Vlcd63 voltage */
00652 //      LCD_WriteReg(0x000e,0x2800);    /* power control 4---VCOMA voltage VCOML=VCOMH*0.9475-VCOMA */
00653 //      LCD_WriteReg(0x001e,0x00b5);    /* POWER CONTROL 5---VCOMH voltage */   
00654 //      LCD_WriteReg(0x0001,0x3b3f);     
00655 //      LCD_WriteReg(0x0002,0x0600);
00656 //      LCD_WriteReg(0x0010,0x0000);
00657 //      LCD_WriteReg(0x0011,0x6830);
00658 //      LCD_WriteReg(0x0005,0x0000);
00659 //      LCD_WriteReg(0x0006,0x0000);
00660 //      LCD_WriteReg(0x0016,0xef1c);  
00661 //      LCD_WriteReg(0x0007,0x0033);    /* Display control 1 */
00662 //      /* when GON=1 and DTE=0,all gate outputs become VGL */
00663 //      /* when GON=1 and DTE=0,all gate outputs become VGH */
00664 //      /* non-selected gate wires become VGL */     
00665 //      LCD_WriteReg(0x000b,0x0000);
00666 //      LCD_WriteReg(0x000f,0x0000);
00667 //      LCD_WriteReg(0x0041,0x0000);
00668 //      LCD_WriteReg(0x0042,0x0000);
00669 //      LCD_WriteReg(0x0048,0x0000);
00670 //      LCD_WriteReg(0x0049,0x013f);
00671 //      LCD_WriteReg(0x004a,0x0000);
00672 //      LCD_WriteReg(0x004b,0x0000); 
00673 //      LCD_WriteReg(0x0044,0xef00);    /* Horizontal RAM start and end address */
00674 //      LCD_WriteReg(0x0045,0x0000);    /* Vretical RAM start address */
00675 //      LCD_WriteReg(0x0046,0x013f);    /* Vretical RAM end address */ 
00676 //      LCD_WriteReg(0x004e,0x0000);    /* set GDDRAM x address counter */
00677 //      LCD_WriteReg(0x004f,0x0000);    /* set GDDRAM y address counter */   
00678 //      /* y control */
00679 //      LCD_WriteReg(0x0030,0x0707);
00680 //      LCD_WriteReg(0x0031,0x0202);
00681 //      LCD_WriteReg(0x0032,0x0204);
00682 //      LCD_WriteReg(0x0033,0x0502);
00683 //      LCD_WriteReg(0x0034,0x0507);
00684 //      LCD_WriteReg(0x0035,0x0204);
00685 //      LCD_WriteReg(0x0036,0x0204);
00686 //      LCD_WriteReg(0x0037,0x0502);
00687 //      LCD_WriteReg(0x003a,0x0302);
00688 //      LCD_WriteReg(0x003b,0x0302); 
00689 //      LCD_WriteReg(0x0023,0x0000);
00690 //      LCD_WriteReg(0x0024,0x0000);
00691 //      LCD_WriteReg(0x0025,0x8000);
00692 //      LCD_WriteReg(0x0026,0x7000);
00693 //      LCD_WriteReg(0x0020,0xb0eb);
00694 //      LCD_WriteReg(0x0027,0x007c);
00695 //  }
00696 //  else if( DeviceCode == 0x5408 )
00697 //  {
00698 //      LCD_Code = SPFD5408B;
00699 //      
00700 //      LCD_WriteReg(0x0001,0x0100);      /* Driver Output Contral Register */ 
00701 //      LCD_WriteReg(0x0002,0x0700);      /* LCD Driving Waveform Contral */
00702 //      LCD_WriteReg(0x0003,0x1030);      /* Entry Mode���� */
00703 //      
00704 //      LCD_WriteReg(0x0004,0x0000);      /* Scalling Control register */
00705 //      LCD_WriteReg(0x0008,0x0207);      /* Display Control 2 */
00706 //      LCD_WriteReg(0x0009,0x0000);      /* Display Control 3 */
00707 //      LCD_WriteReg(0x000A,0x0000);      /* Frame Cycle Control */
00708 //      LCD_WriteReg(0x000C,0x0000);      /* External Display Interface Control 1 */
00709 //      LCD_WriteReg(0x000D,0x0000);      /* Frame Maker Position */
00710 //      LCD_WriteReg(0x000F,0x0000);      /* External Display Interface Control 2 */
00711 //      delay_ms(50);
00712 //      LCD_WriteReg(0x0007,0x0101);      /* Display Control */
00713 //      delay_ms(50);
00714 //      LCD_WriteReg(0x0010,0x16B0);      /* Power Control 1 */
00715 //      LCD_WriteReg(0x0011,0x0001);      /* Power Control 2 */
00716 //      LCD_WriteReg(0x0017,0x0001);      /* Power Control 3 */
00717 //      LCD_WriteReg(0x0012,0x0138);      /* Power Control 4 */
00718 //      LCD_WriteReg(0x0013,0x0800);      /* Power Control 5 */
00719 //      LCD_WriteReg(0x0029,0x0009);      /* NVM read data 2 */
00720 //      LCD_WriteReg(0x002a,0x0009);      /* NVM read data 3 */
00721 //      LCD_WriteReg(0x00a4,0x0000);  
00722 //      LCD_WriteReg(0x0050,0x0000);      /* ���ò������ڵ�X�Ὺʼ�� */
00723 //      LCD_WriteReg(0x0051,0x00EF);      /* ���ò������ڵ�X������� */
00724 //      LCD_WriteReg(0x0052,0x0000);      /* ���ò������ڵ�Y�Ὺʼ�� */
00725 //      LCD_WriteReg(0x0053,0x013F);      /* ���ò������ڵ�Y������� */
00726 //         
00727 //      LCD_WriteReg(0x0060,0x2700);      /* Driver Output Control */
00728 //                                        /* ������Ļ�ĵ����Լ�ɨ�����ʼ�� */
00729 //      LCD_WriteReg(0x0061,0x0003);      /* Driver Output Control */
00730 //      LCD_WriteReg(0x006A,0x0000);      /* Vertical Scroll Control */
00731 //      
00732 //      LCD_WriteReg(0x0080,0x0000);      /* Display Position �C Partial Display 1 */
00733 //      LCD_WriteReg(0x0081,0x0000);      /* RAM Address Start �C Partial Display 1 */
00734 //      LCD_WriteReg(0x0082,0x0000);      /* RAM address End - Partial Display 1 */
00735 //      LCD_WriteReg(0x0083,0x0000);      /* Display Position �C Partial Display 2 */
00736 //      LCD_WriteReg(0x0084,0x0000);      /* RAM Address Start �C Partial Display 2 */
00737 //      LCD_WriteReg(0x0085,0x0000);      /* RAM address End �C Partail Display2 */
00738 //      LCD_WriteReg(0x0090,0x0013);      /* Frame Cycle Control */
00739 //      LCD_WriteReg(0x0092,0x0000);      /* Panel Interface Control 2 */
00740 //      LCD_WriteReg(0x0093,0x0003);      /* Panel Interface control 3 */
00741 //      LCD_WriteReg(0x0095,0x0110);      /* Frame Cycle Control */
00742 //      LCD_WriteReg(0x0007,0x0173);
00743 //  }
00744 //  else if( DeviceCode == 0x4531 )
00745 //  {   
00746 //      LCD_Code = LGDP4531;
00747 //      /* Setup display */
00748 //      LCD_WriteReg(0x00,0x0001);
00749 //      LCD_WriteReg(0x10,0x0628);
00750 //      LCD_WriteReg(0x12,0x0006);
00751 //      LCD_WriteReg(0x13,0x0A32);
00752 //      LCD_WriteReg(0x11,0x0040);
00753 //      LCD_WriteReg(0x15,0x0050);
00754 //      LCD_WriteReg(0x12,0x0016);
00755 //      delay_ms(50);
00756 //      LCD_WriteReg(0x10,0x5660);
00757 //      delay_ms(50);
00758 //      LCD_WriteReg(0x13,0x2A4E);
00759 //      LCD_WriteReg(0x01,0x0100);
00760 //      LCD_WriteReg(0x02,0x0300);  
00761 //      LCD_WriteReg(0x03,0x1030);      
00762 //      LCD_WriteReg(0x08,0x0202);
00763 //      LCD_WriteReg(0x0A,0x0000);
00764 //      LCD_WriteReg(0x30,0x0000);
00765 //      LCD_WriteReg(0x31,0x0402);
00766 //      LCD_WriteReg(0x32,0x0106);
00767 //      LCD_WriteReg(0x33,0x0700);
00768 //      LCD_WriteReg(0x34,0x0104);
00769 //      LCD_WriteReg(0x35,0x0301);
00770 //      LCD_WriteReg(0x36,0x0707);
00771 //      LCD_WriteReg(0x37,0x0305);
00772 //      LCD_WriteReg(0x38,0x0208);
00773 //      LCD_WriteReg(0x39,0x0F0B);
00774 //      delay_ms(50);
00775 //      LCD_WriteReg(0x41,0x0002);
00776 //      LCD_WriteReg(0x60,0x2700);
00777 //      LCD_WriteReg(0x61,0x0001);
00778 //      LCD_WriteReg(0x90,0x0119);
00779 //      LCD_WriteReg(0x92,0x010A);
00780 //      LCD_WriteReg(0x93,0x0004);
00781 //      LCD_WriteReg(0xA0,0x0100);
00782 //      delay_ms(50);
00783 //      LCD_WriteReg(0x07,0x0133);
00784 //      delay_ms(50);
00785 //      LCD_WriteReg(0xA0,0x0000);
00786 //  }
00787 //  else if( DeviceCode == 0x4535 )
00788 //  {   
00789 //      LCD_Code = LGDP4535;    
00790 //      LCD_WriteReg(0x15, 0x0030);      /* Set the internal vcore voltage */                                              
00791 //      LCD_WriteReg(0x9A, 0x0010);      /* Start internal OSC */
00792 //      LCD_WriteReg(0x11, 0x0020);      /* set SS and SM bit */
00793 //      LCD_WriteReg(0x10, 0x3428);      /* set 1 line inversion */
00794 //      LCD_WriteReg(0x12, 0x0002);      /* set GRAM write direction and BGR=1 */ 
00795 //      LCD_WriteReg(0x13, 0x1038);      /* Resize register */
00796 //      delay_ms(40); 
00797 //      LCD_WriteReg(0x12, 0x0012);      /* set the back porch and front porch */
00798 //      delay_ms(40); 
00799 //      LCD_WriteReg(0x10, 0x3420);      /* set non-display area refresh cycle ISC[3:0] */
00800 //      LCD_WriteReg(0x13, 0x3045);      /* FMARK function */
00801 //      delay_ms(70); 
00802 //      LCD_WriteReg(0x30, 0x0000);      /* RGB interface setting */
00803 //      LCD_WriteReg(0x31, 0x0402);      /* Frame marker Position */
00804 //      LCD_WriteReg(0x32, 0x0307);      /* RGB interface polarity */
00805 //      LCD_WriteReg(0x33, 0x0304);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
00806 //      LCD_WriteReg(0x34, 0x0004);      /* DC1[2:0], DC0[2:0], VC[2:0] */
00807 //      LCD_WriteReg(0x35, 0x0401);      /* VREG1OUT voltage */
00808 //      LCD_WriteReg(0x36, 0x0707);      /* VDV[4:0] for VCOM amplitude */
00809 //      LCD_WriteReg(0x37, 0x0305);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
00810 //      LCD_WriteReg(0x38, 0x0610);      /* DC1[2:0], DC0[2:0], VC[2:0] */
00811 //      LCD_WriteReg(0x39, 0x0610);      /* VREG1OUT voltage */
00812 //      LCD_WriteReg(0x01, 0x0100);      /* VDV[4:0] for VCOM amplitude */
00813 //      LCD_WriteReg(0x02, 0x0300);      /* VCM[4:0] for VCOMH */
00814 //      LCD_WriteReg(0x03, 0x1030);      /* GRAM horizontal Address */
00815 //      LCD_WriteReg(0x08, 0x0808);      /* GRAM Vertical Address */
00816 //      LCD_WriteReg(0x0A, 0x0008);     
00817 //      LCD_WriteReg(0x60, 0x2700);      /* Gate Scan Line */
00818 //      LCD_WriteReg(0x61, 0x0001);      /* NDL,VLE, REV */
00819 //      LCD_WriteReg(0x90, 0x013E);
00820 //      LCD_WriteReg(0x92, 0x0100);
00821 //      LCD_WriteReg(0x93, 0x0100);
00822 //      LCD_WriteReg(0xA0, 0x3000);
00823 //      LCD_WriteReg(0xA3, 0x0010);
00824 //      LCD_WriteReg(0x07, 0x0001);
00825 //      LCD_WriteReg(0x07, 0x0021);
00826 //      LCD_WriteReg(0x07, 0x0023);
00827 //      LCD_WriteReg(0x07, 0x0033);
00828 //      LCD_WriteReg(0x07, 0x0133);
00829 //  }               
00830 //  else if( DeviceCode == 0x0047 )
00831 //  {
00832 //      LCD_Code = HX8347D;
00833 //      /* Start Initial Sequence */
00834 //      LCD_WriteReg(0xEA,0x00);                          
00835 //      LCD_WriteReg(0xEB,0x20);                                                     
00836 //      LCD_WriteReg(0xEC,0x0C);                                                   
00837 //      LCD_WriteReg(0xED,0xC4);                                                    
00838 //      LCD_WriteReg(0xE8,0x40);                                                     
00839 //      LCD_WriteReg(0xE9,0x38);                                                    
00840 //      LCD_WriteReg(0xF1,0x01);                                                    
00841 //      LCD_WriteReg(0xF2,0x10);                                                    
00842 //      LCD_WriteReg(0x27,0xA3);                                                    
00843 //      /* GAMMA SETTING */
00844 //      LCD_WriteReg(0x40,0x01);                           
00845 //      LCD_WriteReg(0x41,0x00);                                                   
00846 //      LCD_WriteReg(0x42,0x00);                                                   
00847 //      LCD_WriteReg(0x43,0x10);                                                    
00848 //      LCD_WriteReg(0x44,0x0E);                                                   
00849 //      LCD_WriteReg(0x45,0x24);                                                  
00850 //      LCD_WriteReg(0x46,0x04);                                                  
00851 //      LCD_WriteReg(0x47,0x50);                                                   
00852 //      LCD_WriteReg(0x48,0x02);                                                    
00853 //      LCD_WriteReg(0x49,0x13);                                                  
00854 //      LCD_WriteReg(0x4A,0x19);                                                  
00855 //      LCD_WriteReg(0x4B,0x19);                                                 
00856 //      LCD_WriteReg(0x4C,0x16);                                                 
00857 //      LCD_WriteReg(0x50,0x1B);                                                   
00858 //      LCD_WriteReg(0x51,0x31);                                                    
00859 //      LCD_WriteReg(0x52,0x2F);                                                     
00860 //      LCD_WriteReg(0x53,0x3F);                                                    
00861 //      LCD_WriteReg(0x54,0x3F);                                                     
00862 //      LCD_WriteReg(0x55,0x3E);                                                     
00863 //      LCD_WriteReg(0x56,0x2F);                                                   
00864 //      LCD_WriteReg(0x57,0x7B);                                                     
00865 //      LCD_WriteReg(0x58,0x09);                                                  
00866 //      LCD_WriteReg(0x59,0x06);                                                 
00867 //      LCD_WriteReg(0x5A,0x06);                                                   
00868 //      LCD_WriteReg(0x5B,0x0C);                                                   
00869 //      LCD_WriteReg(0x5C,0x1D);                                                   
00870 //      LCD_WriteReg(0x5D,0xCC);                                                   
00871 //      /* Power Voltage Setting */
00872 //      LCD_WriteReg(0x1B,0x18);                                                    
00873 //      LCD_WriteReg(0x1A,0x01);                                                    
00874 //      LCD_WriteReg(0x24,0x15);                                                    
00875 //      LCD_WriteReg(0x25,0x50);                                                    
00876 //      LCD_WriteReg(0x23,0x8B);                                                   
00877 //      LCD_WriteReg(0x18,0x36);                           
00878 //      LCD_WriteReg(0x19,0x01);                                                    
00879 //      LCD_WriteReg(0x01,0x00);                                                   
00880 //      LCD_WriteReg(0x1F,0x88);                                                    
00881 //      delay_ms(50);
00882 //      LCD_WriteReg(0x1F,0x80);                                                  
00883 //      delay_ms(50);
00884 //      LCD_WriteReg(0x1F,0x90);                                                   
00885 //      delay_ms(50);
00886 //      LCD_WriteReg(0x1F,0xD0);                                                   
00887 //      delay_ms(50);
00888 //      LCD_WriteReg(0x17,0x05);                                                    
00889 //      LCD_WriteReg(0x36,0x00);                                                    
00890 //      LCD_WriteReg(0x28,0x38);                                                 
00891 //      delay_ms(50);
00892 //      LCD_WriteReg(0x28,0x3C);                                                
00893 //  }
00894 //  else if( DeviceCode == 0x7783 )
00895 //  {
00896 //      LCD_Code = ST7781;
00897 //      /* Start Initial Sequence */
00898 //      LCD_WriteReg(0x00FF,0x0001);
00899 //      LCD_WriteReg(0x00F3,0x0008);
00900 //      LCD_WriteReg(0x0001,0x0100);
00901 //      LCD_WriteReg(0x0002,0x0700);
00902 //      LCD_WriteReg(0x0003,0x1030);  
00903 //      LCD_WriteReg(0x0008,0x0302);
00904 //      LCD_WriteReg(0x0008,0x0207);
00905 //      LCD_WriteReg(0x0009,0x0000);
00906 //      LCD_WriteReg(0x000A,0x0000);
00907 //      LCD_WriteReg(0x0010,0x0000);  
00908 //      LCD_WriteReg(0x0011,0x0005);
00909 //      LCD_WriteReg(0x0012,0x0000);
00910 //      LCD_WriteReg(0x0013,0x0000);
00911 //      delay_ms(50);
00912 //      LCD_WriteReg(0x0010,0x12B0);
00913 //      delay_ms(50);
00914 //      LCD_WriteReg(0x0011,0x0007);
00915 //      delay_ms(50);
00916 //      LCD_WriteReg(0x0012,0x008B);
00917 //      delay_ms(50);   
00918 //      LCD_WriteReg(0x0013,0x1700);
00919 //      delay_ms(50);   
00920 //      LCD_WriteReg(0x0029,0x0022);        
00921 //      LCD_WriteReg(0x0030,0x0000);
00922 //      LCD_WriteReg(0x0031,0x0707);
00923 //      LCD_WriteReg(0x0032,0x0505);
00924 //      LCD_WriteReg(0x0035,0x0107);
00925 //      LCD_WriteReg(0x0036,0x0008);
00926 //      LCD_WriteReg(0x0037,0x0000);
00927 //      LCD_WriteReg(0x0038,0x0202);
00928 //      LCD_WriteReg(0x0039,0x0106);
00929 //      LCD_WriteReg(0x003C,0x0202);
00930 //      LCD_WriteReg(0x003D,0x0408);
00931 //      delay_ms(50);               
00932 //      LCD_WriteReg(0x0050,0x0000);        
00933 //      LCD_WriteReg(0x0051,0x00EF);        
00934 //      LCD_WriteReg(0x0052,0x0000);        
00935 //      LCD_WriteReg(0x0053,0x013F);        
00936 //      LCD_WriteReg(0x0060,0xA700);        
00937 //      LCD_WriteReg(0x0061,0x0001);
00938 //      LCD_WriteReg(0x0090,0x0033);                
00939 //      LCD_WriteReg(0x002B,0x000B);        
00940 //      LCD_WriteReg(0x0007,0x0133);
00941 //  }
00942 //  else    /* special ID */
00943 //  {
00944 //      DeviceCode = LCD_ReadReg(0x67);
00945 
00946 //      if( DeviceCode == 0x0046 )
00947 //      {
00948 //          LCD_Code = HX8346A;
00949 
00950 //          /* Gamma for CMO 3.2 */
00951 //          LCD_WriteReg(0x46,0x94);
00952 //          LCD_WriteReg(0x47,0x41);
00953 //          LCD_WriteReg(0x48,0x00);
00954 //          LCD_WriteReg(0x49,0x33);
00955 //          LCD_WriteReg(0x4a,0x23);
00956 //          LCD_WriteReg(0x4b,0x45);
00957 //          LCD_WriteReg(0x4c,0x44);
00958 //          LCD_WriteReg(0x4d,0x77);
00959 //          LCD_WriteReg(0x4e,0x12);
00960 //          LCD_WriteReg(0x4f,0xcc);
00961 //          LCD_WriteReg(0x50,0x46);
00962 //          LCD_WriteReg(0x51,0x82);
00963 //          /* 240x320 window setting */
00964 //          LCD_WriteReg(0x02,0x00);
00965 //          LCD_WriteReg(0x03,0x00);
00966 //          LCD_WriteReg(0x04,0x01);
00967 //          LCD_WriteReg(0x05,0x3f);
00968 //          LCD_WriteReg(0x06,0x00);
00969 //          LCD_WriteReg(0x07,0x00);
00970 //          LCD_WriteReg(0x08,0x00); 
00971 //          LCD_WriteReg(0x09,0xef); 
00972 //          
00973 //          /* Display Setting */
00974 //          LCD_WriteReg(0x01,0x06);                        
00975 //          LCD_WriteReg(0x16,0xC8);    /* MY(1) MX(1) MV(0) */
00976 
00977 //          LCD_WriteReg(0x23,0x95);
00978 //          LCD_WriteReg(0x24,0x95);
00979 //          LCD_WriteReg(0x25,0xff);
00980 //          
00981 //          LCD_WriteReg(0x27,0x02);
00982 //          LCD_WriteReg(0x28,0x02);
00983 //          LCD_WriteReg(0x29,0x02);
00984 //          LCD_WriteReg(0x2a,0x02);
00985 //          LCD_WriteReg(0x2c,0x02);
00986 //          LCD_WriteReg(0x2d,0x02);                        
00987 //          
00988 //          LCD_WriteReg(0x3a,0x01);
00989 //          LCD_WriteReg(0x3b,0x01);
00990 //          LCD_WriteReg(0x3c,0xf0);
00991 //          LCD_WriteReg(0x3d,0x00);
00992 //          delay_ms(2);
00993 //          LCD_WriteReg(0x35,0x38);
00994 //          LCD_WriteReg(0x36,0x78);
00995 //          
00996 //          LCD_WriteReg(0x3e,0x38);
00997 //          
00998 //          LCD_WriteReg(0x40,0x0f);
00999 //          LCD_WriteReg(0x41,0xf0);
01000 //          /* Power Supply Setting */
01001 //          LCD_WriteReg(0x19,0x49);
01002 //          LCD_WriteReg(0x93,0x0f);
01003 //          delay_ms(1);
01004 //          LCD_WriteReg(0x20,0x30);
01005 //          LCD_WriteReg(0x1d,0x07);
01006 //          LCD_WriteReg(0x1e,0x00);
01007 //          LCD_WriteReg(0x1f,0x07);
01008 //          /* VCOM Setting for CMO 3.2�� Panel */
01009 //          LCD_WriteReg(0x44,0x4d);
01010 //          LCD_WriteReg(0x45,0x13);
01011 //          delay_ms(1);
01012 //          LCD_WriteReg(0x1c,0x04);
01013 //          delay_ms(2);
01014 //          LCD_WriteReg(0x43,0x80);
01015 //          delay_ms(5);
01016 //          LCD_WriteReg(0x1b,0x08);
01017 //          delay_ms(4);
01018 //          LCD_WriteReg(0x1b,0x10);          
01019 //          delay_ms(4);        
01020 //          /* Display ON Setting */
01021 //          LCD_WriteReg(0x90,0x7f);
01022 //          LCD_WriteReg(0x26,0x04);
01023 //          delay_ms(4);
01024 //          LCD_WriteReg(0x26,0x24);
01025 //          LCD_WriteReg(0x26,0x2c);
01026 //          delay_ms(4);
01027 //          LCD_WriteReg(0x26,0x3c);    
01028 //          /* Set internal VDDD voltage */
01029 //          LCD_WriteReg(0x57,0x02);
01030 //          LCD_WriteReg(0x55,0x00);
01031 //          LCD_WriteReg(0x57,0x00);
01032 //      }
01033 //      if( DeviceCode == 0x0047 )
01034 //      {
01035 //          LCD_Code = HX8347A;
01036 //          LCD_WriteReg(0x0042,0x0008);   
01037 //          /* Gamma setting */  
01038 //          LCD_WriteReg(0x0046,0x00B4); 
01039 //          LCD_WriteReg(0x0047,0x0043); 
01040 //          LCD_WriteReg(0x0048,0x0013); 
01041 //          LCD_WriteReg(0x0049,0x0047); 
01042 //          LCD_WriteReg(0x004A,0x0014); 
01043 //          LCD_WriteReg(0x004B,0x0036); 
01044 //          LCD_WriteReg(0x004C,0x0003); 
01045 //          LCD_WriteReg(0x004D,0x0046); 
01046 //          LCD_WriteReg(0x004E,0x0005);  
01047 //          LCD_WriteReg(0x004F,0x0010);  
01048 //          LCD_WriteReg(0x0050,0x0008);  
01049 //          LCD_WriteReg(0x0051,0x000a);  
01050 //          /* Window Setting */
01051 //          LCD_WriteReg(0x0002,0x0000); 
01052 //          LCD_WriteReg(0x0003,0x0000); 
01053 //          LCD_WriteReg(0x0004,0x0000); 
01054 //          LCD_WriteReg(0x0005,0x00EF); 
01055 //          LCD_WriteReg(0x0006,0x0000); 
01056 //          LCD_WriteReg(0x0007,0x0000); 
01057 //          LCD_WriteReg(0x0008,0x0001); 
01058 //          LCD_WriteReg(0x0009,0x003F); 
01059 //          delay_ms(10); 
01060 //          LCD_WriteReg(0x0001,0x0006); 
01061 //          LCD_WriteReg(0x0016,0x00C8);   
01062 //          LCD_WriteReg(0x0023,0x0095); 
01063 //          LCD_WriteReg(0x0024,0x0095); 
01064 //          LCD_WriteReg(0x0025,0x00FF); 
01065 //          LCD_WriteReg(0x0027,0x0002); 
01066 //          LCD_WriteReg(0x0028,0x0002); 
01067 //          LCD_WriteReg(0x0029,0x0002); 
01068 //          LCD_WriteReg(0x002A,0x0002); 
01069 //          LCD_WriteReg(0x002C,0x0002); 
01070 //          LCD_WriteReg(0x002D,0x0002); 
01071 //          LCD_WriteReg(0x003A,0x0001);  
01072 //          LCD_WriteReg(0x003B,0x0001);  
01073 //          LCD_WriteReg(0x003C,0x00F0);    
01074 //          LCD_WriteReg(0x003D,0x0000); 
01075 //          delay_ms(20); 
01076 //          LCD_WriteReg(0x0035,0x0038); 
01077 //          LCD_WriteReg(0x0036,0x0078); 
01078 //          LCD_WriteReg(0x003E,0x0038); 
01079 //          LCD_WriteReg(0x0040,0x000F); 
01080 //          LCD_WriteReg(0x0041,0x00F0);  
01081 //          LCD_WriteReg(0x0038,0x0000); 
01082 //          /* Power Setting */ 
01083 //          LCD_WriteReg(0x0019,0x0049);  
01084 //          LCD_WriteReg(0x0093,0x000A); 
01085 //          delay_ms(10); 
01086 //          LCD_WriteReg(0x0020,0x0020);   
01087 //          LCD_WriteReg(0x001D,0x0003);   
01088 //          LCD_WriteReg(0x001E,0x0000);  
01089 //          LCD_WriteReg(0x001F,0x0009);   
01090 //          LCD_WriteReg(0x0044,0x0053);  
01091 //          LCD_WriteReg(0x0045,0x0010);   
01092 //          delay_ms(10);  
01093 //          LCD_WriteReg(0x001C,0x0004);  
01094 //          delay_ms(20); 
01095 //          LCD_WriteReg(0x0043,0x0080);    
01096 //          delay_ms(5); 
01097 //          LCD_WriteReg(0x001B,0x000a);    
01098 //          delay_ms(40);  
01099 //          LCD_WriteReg(0x001B,0x0012);    
01100 //          delay_ms(40);   
01101 //          /* Display On Setting */ 
01102 //          LCD_WriteReg(0x0090,0x007F); 
01103 //          LCD_WriteReg(0x0026,0x0004); 
01104 //          delay_ms(40);  
01105 //          LCD_WriteReg(0x0026,0x0024); 
01106 //          LCD_WriteReg(0x0026,0x002C); 
01107 //          delay_ms(40);   
01108 //          LCD_WriteReg(0x0070,0x0008); 
01109 //          LCD_WriteReg(0x0026,0x003C);  
01110 //          LCD_WriteReg(0x0057,0x0002); 
01111 //          LCD_WriteReg(0x0055,0x0000); 
01112 //          LCD_WriteReg(0x0057,0x0000); 
01113 //      }    
01114 //  }                       
01115     delay_ms(50);   /* delay 50 ms */   
01116 }
01117 
01118 /*******************************************************************************
01119 * Function Name  : LCD_Clear
01120 * Description    : ����Ļ����ָ������ɫ��������������� 0xffff
01121 * Input          : - Color: Screen Color
01122 * Output         : None
01123 * Return         : None
01124 * Attention      : None
01125 *******************************************************************************/
01126 void LCD_Clear(uint16_t Color)
01127 {
01128     uint32_t index;
01129     
01130     if( LCD_Code == HX8347D || LCD_Code == HX8347A )
01131     {
01132         LCD_WriteReg(0x02,0x00);                                                  
01133         LCD_WriteReg(0x03,0x00);  
01134                         
01135         LCD_WriteReg(0x04,0x00);                           
01136         LCD_WriteReg(0x05,0xEF);  
01137                          
01138         LCD_WriteReg(0x06,0x00);                           
01139         LCD_WriteReg(0x07,0x00);    
01140                        
01141         LCD_WriteReg(0x08,0x01);                           
01142         LCD_WriteReg(0x09,0x3F);     
01143     }
01144     else
01145     {   
01146         LCD_SetCursor(0,0); 
01147     }   
01148 
01149     LCD_WriteIndex(0x0022);
01150     for( index = 0; index < MAX_X * MAX_Y; index++ )
01151     {
01152         LCD_WriteData(Color);
01153     }
01154 }
01155 
01156 /******************************************************************************
01157 * Function Name  : LCD_BGR2RGB
01158 * Description    : RRRRRGGGGGGBBBBB ��Ϊ BBBBBGGGGGGRRRRR ��ʽ
01159 * Input          : - color: BRG ��ɫֵ  
01160 * Output         : None
01161 * Return         : RGB ��ɫֵ
01162 * Attention      : �ڲ���������
01163 *******************************************************************************/
01164 static uint16_t LCD_BGR2RGB(uint16_t color)
01165 {
01166     uint16_t  r, g, b, rgb;
01167     
01168     b = ( color>>0 )  & 0x1f;
01169     g = ( color>>5 )  & 0x3f;
01170     r = ( color>>11 ) & 0x1f;
01171     
01172     rgb =  (b<<11) + (g<<5) + (r<<0);
01173     
01174     return( rgb );
01175 }
01176 
01177 /******************************************************************************
01178 * Function Name  : LCD_GetPoint
01179 * Description    : ��ȡָ���������ɫֵ
01180 * Input          : - Xpos: Row Coordinate
01181 *                  - Xpos: Line Coordinate 
01182 * Output         : None
01183 * Return         : Screen Color
01184 * Attention      : None
01185 *******************************************************************************/
01186 uint16_t LCD_GetPoint(uint16_t Xpos,uint16_t Ypos)
01187 {
01188     uint16_t dummy;
01189     
01190     LCD_SetCursor(Xpos,Ypos);
01191     LCD_WriteIndex(0x0022);  
01192     
01193     switch( LCD_Code )
01194     {
01195         case ST7781:
01196         case LGDP4531:
01197         case LGDP4535:
01198         case SSD1289:
01199         case SSD1298:
01200              dummy = LCD_ReadData();   /* Empty read */
01201              dummy = LCD_ReadData();    
01202              return  dummy;       
01203         case HX8347A:
01204         case HX8347D:
01205              {
01206                 uint8_t red,green,blue;
01207                 
01208                 dummy = LCD_ReadData();   /* Empty read */
01209 
01210                 red = LCD_ReadData() >> 3; 
01211                 green = LCD_ReadData() >> 2; 
01212                 blue = LCD_ReadData() >> 3; 
01213                 dummy = (uint16_t) ( ( red<<11 ) | ( green << 5 ) | blue ); 
01214              }  
01215              return  dummy;
01216 
01217         default:    /* 0x9320 0x9325 0x9328 0x9331 0x5408 0x1505 0x0505 0x9919 */
01218              dummy = LCD_ReadData();   /* Empty read */
01219              dummy = LCD_ReadData();    
01220              return  LCD_BGR2RGB( dummy );
01221     }
01222 }
01223 
01224 /******************************************************************************
01225 * Function Name  : LCD_SetPoint
01226 * Description    : ��ָ�����껭��
01227 * Input          : - Xpos: Row Coordinate
01228 *                  - Ypos: Line Coordinate 
01229 * Output         : None
01230 * Return         : None
01231 * Attention      : None
01232 *******************************************************************************/
01233 void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t point)
01234 {
01235     if( Xpos >= MAX_X || Ypos >= MAX_Y )
01236     {
01237         return;
01238     }
01239     LCD_SetCursor(Xpos,Ypos);
01240     LCD_WriteReg(0x0022,point);
01241 }
01242 
01243 /******************************************************************************
01244 * Function Name  : LCD_DrawLine
01245 * Description    : Bresenham's line algorithm
01246 * Input          : - x1: A��������
01247 *                  - y1: A�������� 
01248 *                  - x2: B��������
01249 *                  - y2: B�������� 
01250 *                  - color: ����ɫ
01251 * Output         : None
01252 * Return         : None
01253 * Attention      : None
01254 *******************************************************************************/     
01255 void LCD_DrawLine( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1 , uint16_t color )
01256 {
01257     short dx,dy;      /* ����X Y�������ӵı���ֵ */
01258     short temp;       /* ��� �յ��С�Ƚ� ��������ʱ���м���� */
01259 
01260     if( x0 > x1 )     /* X�����������յ� �������� */
01261     {
01262         temp = x1;
01263         x1 = x0;
01264         x0 = temp;   
01265     }
01266     if( y0 > y1 )     /* Y�����������յ� �������� */
01267     {
01268         temp = y1;
01269         y1 = y0;
01270         y0 = temp;   
01271     }
01272   
01273     dx = x1-x0;       /* X�᷽���ϵ����� */
01274     dy = y1-y0;       /* Y�᷽���ϵ����� */
01275 
01276     if( dx == 0 )     /* X����û������ ����ֱ�� */ 
01277     {
01278         do
01279         { 
01280             LCD_SetPoint(x0, y0, color);   /* �����ʾ �费ֱ�� */
01281             y0++;
01282         }
01283         while( y1 >= y0 ); 
01284         return; 
01285     }
01286     if( dy == 0 )     /* Y����û������ ��ˮƽֱ�� */ 
01287     {
01288         do
01289         {
01290             LCD_SetPoint(x0, y0, color);   /* �����ʾ ��ˮƽ�� */
01291             x0++;
01292         }
01293         while( x1 >= x0 ); 
01294         return;
01295     }
01296     /* ����ɭ��ķ(Bresenham)�㷨���� */
01297     if( dx > dy )                         /* ����X�� */
01298     {
01299         temp = 2 * dy - dx;               /* �����¸����λ�� */         
01300         while( x0 != x1 )
01301         {
01302             LCD_SetPoint(x0,y0,color);    /* ����� */ 
01303             x0++;                         /* X���ϼ�1 */
01304             if( temp > 0 )                /* �ж����¸����λ�� */
01305             {
01306                 y0++;                     /* Ϊ�������ڵ㣬����x0+1,y0+1�� */ 
01307                 temp += 2 * dy - 2 * dx; 
01308             }
01309             else         
01310             {
01311                 temp += 2 * dy;           /* �ж����¸����λ�� */  
01312             }       
01313         }
01314         LCD_SetPoint(x0,y0,color);
01315     }  
01316     else
01317     {
01318         temp = 2 * dx - dy;                      /* ����Y�� */       
01319         while( y0 != y1 )
01320         {
01321             LCD_SetPoint(x0,y0,color);     
01322             y0++;                 
01323             if( temp > 0 )           
01324             {
01325                 x0++;               
01326                 temp+=2*dy-2*dx; 
01327             }
01328             else
01329             {
01330                 temp += 2 * dy;
01331             }
01332         } 
01333         LCD_SetPoint(x0,y0,color);
01334     }
01335 } 
01336 
01337 /******************************************************************************
01338 * Function Name  : PutChar
01339 * Description    : ��Lcd��������λ����ʾһ���ַ�
01340 * Input          : - Xpos: ˮƽ���� 
01341 *                  - Ypos: ��ֱ����  
01342 *                  - ASCI: ��ʾ���ַ�
01343 *                  - charColor: �ַ���ɫ   
01344 *                  - bkColor: ������ɫ 
01345 * Output         : None
01346 * Return         : None
01347 * Attention      : None
01348 *******************************************************************************/
01349 void PutChar( uint16_t Xpos, uint16_t Ypos, uint8_t ASCI, uint16_t charColor, uint16_t bkColor, int size )
01350 {
01351     uint16_t i, j;
01352     uint8_t buffer[16], tmp_char;
01353     GetASCIICode(buffer,ASCI);  /* È¡×ÖÄ£Êý¾Ý */
01354     for( i=0; i<16; i++ )
01355     {
01356         tmp_char = buffer[i];
01357               
01358         for( j=0; j<8; j++ )
01359         {
01360                         
01361             if( ((tmp_char >> (7 - j)) & 0x01) == 0x01 )
01362             {
01363                 i=i*size;
01364                                 j=j*size;
01365                                 LCD_SetPoint( Xpos + j, Ypos + i, charColor );  /* ×Ö·ûÑÕÉ« */
01366                             if(size==2||size==3){
01367                               LCD_SetPoint( Xpos + j+1, Ypos + i, charColor );  /* ×Ö·ûÑÕÉ« */
01368                               LCD_SetPoint( Xpos + j, Ypos + i+1, charColor );  /* ×Ö·ûÑÕÉ« */
01369                               LCD_SetPoint( Xpos + j+1, Ypos + i+1, charColor );  /* ×Ö·ûÑÕÉ« */
01370 
01371                             }
01372                             if(size==3){
01373                               LCD_SetPoint( Xpos + j-1, Ypos + i, charColor );  /* ×Ö·ûÑÕÉ« */
01374                               LCD_SetPoint( Xpos + j, Ypos + i-1, charColor );  /* ×Ö·ûÑÕÉ« */
01375                               LCD_SetPoint( Xpos + j-1, Ypos + i-1, charColor );  /* ×Ö·ûÑÕÉ« */
01376                                 LCD_SetPoint( Xpos + j+1, Ypos + i-1, charColor );  /* ×Ö·ûÑÕÉ« */
01377                               LCD_SetPoint( Xpos + j-1, Ypos + i+1, charColor );  /* ×Ö·ûÑÕÉ« */
01378                             }
01379                               i=i/size;
01380                               j=j/size;
01381                         }
01382             else
01383             {
01384                 i=i*size;
01385                                 j=j*size;
01386                                 LCD_SetPoint( Xpos + j, Ypos + i, bkColor );  /* ×Ö·ûÑÕÉ« */
01387                                 if(size==2||size==3){
01388                                     LCD_SetPoint( Xpos + j+1, Ypos + i, bkColor );  /* ×Ö·ûÑÕÉ« */
01389                                     LCD_SetPoint( Xpos + j, Ypos + i+1, bkColor );  /* ×Ö·ûÑÕÉ« */
01390                                     LCD_SetPoint( Xpos + j+1, Ypos + i+1, bkColor );  /* ×Ö·ûÑÕÉ« */
01391                                 }
01392                               if(size==3){
01393                                     LCD_SetPoint( Xpos + j-1, Ypos + i, bkColor );  /* ×Ö·ûÑÕÉ« */
01394                                     LCD_SetPoint( Xpos + j, Ypos + i-1, bkColor );  /* ×Ö·ûÑÕÉ« */
01395                                     LCD_SetPoint( Xpos + j-1, Ypos + i-1, bkColor );  /* ×Ö·ûÑÕÉ« */
01396                                     LCD_SetPoint( Xpos + j+1, Ypos + i-1, bkColor );  /* ×Ö·ûÑÕÉ« */
01397                                     LCD_SetPoint( Xpos + j-1, Ypos + i+1, bkColor );  /* ×Ö·ûÑÕÉ« */
01398                                 }
01399                                 i=i/size;
01400                               j=j/size;
01401                         }
01402         }
01403                 
01404     }
01405 }
01406 
01407 /******************************************************************************
01408 * Function Name  : GUI_Text
01409 * Description    : ��ָ��������ʾ�ַ���
01410 * Input          : - Xpos: ������
01411 *                  - Ypos: ������ 
01412 *                  - str: �ַ���
01413 *                  - charColor: �ַ���ɫ   
01414 *                  - bkColor: ������ɫ 
01415 * Output         : None
01416 * Return         : None
01417 * Attention      : None
01418 *******************************************************************************/
01419 void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor, int size)
01420 {
01421     uint8_t TempChar;
01422     do
01423     {
01424         TempChar = *str++;  
01425         PutChar( Xpos, Ypos, TempChar, Color, bkColor, size );    
01426         if( Xpos < MAX_X - 8*size )
01427         {
01428             Xpos += 8*size;
01429         } 
01430         else if ( Ypos < MAX_Y - 16*size )
01431         {
01432             Xpos = 0;
01433             Ypos += 16*size;
01434         }   
01435         else
01436         {
01437             Xpos = 0;
01438             Ypos = 0;
01439         }    
01440     }
01441     while ( *str != 0 );
01442 }
01443 
01444 
01445 
01446 /*********************************************************************************************************
01447       END FILE
01448 *********************************************************************************************************/
01449