S3C42440之LCD操作

基本操作:

本文只涉及到TFT屏的操作。控制器重要的时钟信号,VCLK为最基本的像素时钟信号,VSYNC为刷新频率,也称为场频,HSYNC为行频。板子上是4.3寸的TFT屏。



结合上面的图可以得知,场率即刷新频率典型值为60HZ,不得超90HZ。像素时钟信号VCLK典型9MHZ,不超15MHZ。

VCLK=HCLK/[(CLKVAL+1)*2],若HCLK=100MHZ,如果取VCLK=9MHZ,那么CLKVAL=4.5,取整为4,那么此时VLCK=10MHZ。

取VSPW=10-1 VFPD=2-1VBPD=2-1        HSPW=40-1 HFPD=10-1HBPD=10-1

那么行频=VCLK / (HSPW+1 +HFPD+1 HBPD+1 + HOZVAL+1)=10M/(40+10+10+480)=18.51KHZ

场频=行频 / (VSPW+1 VFPD+1 +VBPD+1 + LINEVAL+1)=18.51KHZ/(10+2+2+272)=64.7HZ


程序如下:

int main(void)
{	

	char ch;

	NF_Init();
	NF_Read((u8*)0x32000000, (ulong)0x1000, 0x2000);   //copy program to sdram

	init_uart0();

    
    while (1)
    {
        printf("\r\n##### Test TFT LCD #####\r\n");
        printf("[1] TFT480272 8Bit\n\r");
        printf("[2] TFT480272 16Bit\n\r");
        printf("Enter your selection: ");

        putchar((ch = getchar()));
        switch (ch)
        {
            case '1':
            {
                Test_Lcd_Tft_8Bit_480272();
                break;
            }
            
            case '2':
            {
                Test_Lcd_Tft_16Bit_480272();
                break;
            }
            
            default: 
                break;
        }
    }
}

/* 
 * ÒÔ480*272,8bppµÄÏÔʾģʽ²âÊÔTFT LCD
 */
void Test_Lcd_Tft_8Bit_480272(void)
{
    Lcd_Port_Init();                     // ÉèÖÃLCDÒý½Å
    Tft_Lcd_Init(MODE_TFT_8BIT_480272);  // ³õʼ»¯LCD¿ØÖÆÆ÷
    Lcd_PowerEnable(0, 1);               // ÉèÖÃLCD_PWRENÓÐЧ£¬ËüÓÃÓÚ´ò¿ªLCDµÄµçÔ´
    Lcd_EnvidOnOff(1);                   // ʹÄÜLCD¿ØÖÆÆ÷Êä³öÐźÅ

    Lcd_Palette8Bit_Init();     // ³õʼ»¯µ÷É«°å
    ClearScr(0x0);              // ÇåÆÁ£¬ºÚÉ«
    printf("[TFT 64K COLOR(16bpp) LCD TEST]\n");

    printf("1. Press any key to draw line\n");
    getchar();
    DrawLine(0  , 0  , 479, 0  , 0);    // ÑÕɫΪDEMO256pal[0]
    DrawLine(0  , 0  , 0  , 271, 1);    // ÑÕɫΪDEMO256pal[1]
    DrawLine(479, 0  , 479, 271, 2);    // ¡­¡­
    DrawLine(0  , 271, 479, 271, 4);
    DrawLine(0  , 0  , 479, 271, 8);
    DrawLine(479, 0  , 0  , 271, 16);
    DrawLine(240, 0  , 240, 271, 32);
    DrawLine(0  , 136, 479, 136, 64);

    printf("2. Press any key to draw circles\n");
    getchar();
    Mire();

    printf("3. Press any key to fill the screem with one color\n");
    getchar();
    ClearScr(128);  //  Êä³öµ¥É«Í¼Ïñ£¬ÑÕɫΪDEMO256pal[128]

    printf("4. Press any key to fill the screem by temporary palette\n");
    getchar(); 
    ClearScrWithTmpPlt(0x0000ff);       //  Êä³öµ¥É«Í¼Ïñ£¬ÑÕɫΪÀ¶É«
    
    printf("5. Press any key to fill the screem by palette\n");
    getchar();
    DisableTmpPlt();            // ¹Ø±ÕÁÙʱµ÷É«°å¼Ä´æÆ÷
    ChangePalette(0xffff00);    // ¸Ä±äÕû¸öµ÷É«°åΪ»ÆÉ«£¬Êä³öµ¥É«Í¼Ïñ
    
    printf("6. Press any key stop the testing\n");
    getchar();
    Lcd_EnvidOnOff(0);
}

/* 
 * ÒÔ480*272,16bppµÄÏÔʾģʽ²âÊÔTFT LCD
 */
void Test_Lcd_Tft_16Bit_480272(void)
{
    Lcd_Port_Init();                     // ÉèÖÃLCDÒý½Å
    Tft_Lcd_Init(MODE_TFT_16BIT_480272); // ³õʼ»¯LCD¿ØÖÆÆ÷
    Lcd_PowerEnable(0, 1);               // ÉèÖÃLCD_PWRENÓÐЧ£¬ËüÓÃÓÚ´ò¿ªLCDµÄµçÔ´
    Lcd_EnvidOnOff(1);                   // ʹÄÜLCD¿ØÖÆÆ÷Êä³öÐźÅ

    ClearScr(0x0);  // ÇåÆÁ£¬ºÚÉ«
    printf("[TFT 64K COLOR(16bpp) LCD TEST]\n");

    printf("1. Press any key to draw line\n");
    getchar();
    DrawLine(0  , 0  , 479, 0  , 0xff0000);     // ºìÉ«
    DrawLine(0  , 0  , 0  , 271, 0x00ff00);     // ÂÌÉ«
    DrawLine(479, 0  , 479, 271, 0x0000ff);     // À¶É«
    DrawLine(0  , 271, 479, 271, 0xffffff);     // °×É«
    DrawLine(0  , 0  , 479, 271, 0xffff00);     // »ÆÉ«
    DrawLine(479, 0  , 0  , 271, 0x8000ff);     // ×ÏÉ«
    DrawLine(240, 0  , 240, 271, 0xe6e8fa);     // ÒøÉ«
    DrawLine(0  , 136, 479, 136, 0xcd7f32);     // ½ðÉ«

    printf("2. Press any key to draw circles\n");
    getchar();
    Mire();

    printf("3. Press any key to fill the screem with one color\n");
    getchar();
    ClearScr(0xff0000);             // ºìÉ«

    printf("4. Press any key to fill the screem by temporary palette\n");
    getchar();
    ClearScrWithTmpPlt(0xb3ee3a);   // »ÆÉ«

    printf("5. Press any key stop the testing\n");
    getchar();
    Lcd_EnvidOnOff(0);
}



void Tft_Lcd_Init(int type)
{
    switch(type)
    {        
    case MODE_TFT_8BIT_480272:
        /* 
         * ÉèÖÃLCD¿ØÖÆÆ÷µÄ¿ØÖƼĴæÆ÷LCDCON1~5
         * 1. LCDCON1:
         *    ÉèÖÃVCLKµÄƵÂÊ£ºVCLK(Hz) = HCLK/[(CLKVAL+1)x2]
         *    Ñ¡ÔñLCDÀàÐÍ: TFT LCD   
         *    ÉèÖÃÏÔʾģʽ: 8BPP
         *    ÏȽûÖ¹LCDÐźÅÊä³ö
         * 2. LCDCON2/3/4:
         *    ÉèÖÿØÖÆÐźŵÄʱ¼ä²ÎÊý
         *    ÉèÖ÷ֱæÂÊ£¬¼´ÐÐÊý¼°ÁÐÊý
         * ÏÖÔÚ£¬¿ÉÒÔ¸ù¾Ý¹«Ê½¼ÆËã³öÏÔʾÆ÷µÄƵÂÊ£º
         * µ±HCLK=100MHzʱ£¬
         * Frame Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x
         *              {(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x
         *              {2x(CLKVAL+1)/(HCLK)}]
         *            = 60Hz
         * 3. LCDCON5:
         *    ÉèÖÃÏÔʾģʽΪ8BPPʱ£¬µ÷É«°åÖеÄÊý¾Ý¸ñʽ: 5:6:5
         *    ÉèÖÃHSYNC¡¢VSYNCÂö³åµÄ¼«ÐÔ(ÕâÐèÒª²Î¿¼¾ßÌåLCDµÄ½Ó¿ÚÐźÅ): ·´×ª
         *    ×Ö½Ú½»»»Ê¹ÄÜ
         */
        rLCDCON1 = (CLKVAL_TFT_480272<<8) | (LCDTYPE_TFT<<5) | \
                  (BPPMODE_8BPP<<1) | (ENVID_DISABLE<<0);
        rLCDCON2 = (VBPD_480272<<24) | (LINEVAL_TFT_480272<<14) | \
                  (VFPD_480272<<6) | (VSPW_480272);
        rLCDCON3 = (HBPD_480272<<19) | (HOZVAL_TFT_480272<<8) | (HFPD_480272);
        rLCDCON4 = HSPW_480272;
        rLCDCON5 = (FORMAT8BPP_565<<11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | \
                  (BSWP<<1);

        /*
         * ÉèÖÃLCD¿ØÖÆÆ÷µÄµØÖ·¼Ä´æÆ÷LCDSADDR1~3
         * Ö¡ÄÚ´æÓëÊÓ¿Ú(view point)ÍêÈ«ÎǺϣ¬
         * ͼÏñÊý¾Ý¸ñʽÈçÏÂ(8BPPʱ£¬Ö¡»º³åÇøÖеÄÊý¾ÝΪµ÷É«°åÖеÄË÷ÒýÖµ)£º
         *         |----PAGEWIDTH----|
         *    y/x  0   1   2       479
         *     0   idx idx idx ... idx
         *     1   idx idx idx ... idx
         * 1. LCDSADDR1:
         *    ÉèÖÃLCDBANK¡¢LCDBASEU
         * 2. LCDSADDR2:
         *    ÉèÖÃLCDBASEL: Ö¡»º³åÇøµÄ½áÊøµØÖ·A[21:1]
         * 3. LCDSADDR3:
         *    OFFSIZEµÈÓÚ0£¬PAGEWIDTHµÈÓÚ(480/2)
         */
        rLCDSADDR1 = ((LCDFRAMEBUFFER>>22)<<21) | LOWER21BITS(LCDFRAMEBUFFER>>1);
        rLCDSADDR2 = LOWER21BITS((LCDFRAMEBUFFER+ \
                    (LINEVAL_TFT_480272+1)*(HOZVAL_TFT_480272+1)*1)>>1);
        rLCDSADDR3 = (0<<11) | (LCD_XSIZE_TFT_480272/2);

        /* ½ûÖ¹ÁÙʱµ÷É«°å¼Ä´æÆ÷ */
        rTPAL = 0;

        fb_base_addr = LCDFRAMEBUFFER;
        bpp = 8;
        xsize = 480;
        ysize = 272;
        
        break;
        
    case MODE_TFT_16BIT_480272:
        /* 
         * ÉèÖÃLCD¿ØÖÆÆ÷µÄ¿ØÖƼĴæÆ÷LCDCON1~5
         * 1. LCDCON1:
         *    ÉèÖÃVCLKµÄƵÂÊ£ºVCLK(Hz) = HCLK/[(CLKVAL+1)x2]
         *    Ñ¡ÔñLCDÀàÐÍ: TFT LCD   
         *    ÉèÖÃÏÔʾģʽ: 16BPP
         *    ÏȽûÖ¹LCDÐźÅÊä³ö
         * 2. LCDCON2/3/4:
         *    ÉèÖÿØÖÆÐźŵÄʱ¼ä²ÎÊý
         *    ÉèÖ÷ֱæÂÊ£¬¼´ÐÐÊý¼°ÁÐÊý
         * ÏÖÔÚ£¬¿ÉÒÔ¸ù¾Ý¹«Ê½¼ÆËã³öÏÔʾÆ÷µÄƵÂÊ£º
         * µ±HCLK=100MHzʱ£¬
         * Frame Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x
         *              {(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x
         *              {2x(CLKVAL+1)/(HCLK)}]
         *            = 60Hz
         * 3. LCDCON5:
         *    ÉèÖÃÏÔʾģʽΪ16BPPʱµÄÊý¾Ý¸ñʽ: 5:6:5
         *    ÉèÖÃHSYNC¡¢VSYNCÂö³åµÄ¼«ÐÔ(ÕâÐèÒª²Î¿¼¾ßÌåLCDµÄ½Ó¿ÚÐźÅ): ·´×ª
         *    °ë×Ö(2×Ö½Ú)½»»»Ê¹ÄÜ
         */
        rLCDCON1 = (CLKVAL_TFT_480272<<8) | (LCDTYPE_TFT<<5) | \
                  (BPPMODE_16BPP<<1) | (ENVID_DISABLE<<0);
        rLCDCON2 = (VBPD_480272<<24) | (LINEVAL_TFT_480272<<14) | \
                  (VFPD_480272<<6) | (VSPW_480272);
        rLCDCON3 = (HBPD_480272<<19) | (HOZVAL_TFT_480272<<8) | (HFPD_480272);
        rLCDCON4 = HSPW_480272;
        rLCDCON5 = (FORMAT8BPP_565<<11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | \
                  (HWSWP<<1);

        /*
         * ÉèÖÃLCD¿ØÖÆÆ÷µÄµØÖ·¼Ä´æÆ÷LCDSADDR1~3
         * Ö¡ÄÚ´æÓëÊÓ¿Ú(view point)ÍêÈ«ÎǺϣ¬
         * ͼÏñÊý¾Ý¸ñʽÈçÏ£º
         *         |----PAGEWIDTH----|
         *    y/x  0   1   2       639
         *     0   rgb rgb rgb ... rgb
         *     1   rgb rgb rgb ... rgb
         * 1. LCDSADDR1:
         *    ÉèÖÃLCDBANK¡¢LCDBASEU
         * 2. LCDSADDR2:
         *    ÉèÖÃLCDBASEL: Ö¡»º³åÇøµÄ½áÊøµØÖ·A[21:1]
         * 3. LCDSADDR3:
         *    OFFSIZEµÈÓÚ0£¬PAGEWIDTHµÈÓÚ(640*2/2)
         */
        rLCDSADDR1 = ((LCDFRAMEBUFFER>>22)<<21) | LOWER21BITS(LCDFRAMEBUFFER>>1);
        rLCDSADDR2 = LOWER21BITS((LCDFRAMEBUFFER+ \
                    (LINEVAL_TFT_480272+1)*(HOZVAL_TFT_480272+1)*2)>>1);
        rLCDSADDR3 = (0<<11) | (LCD_XSIZE_TFT_480272*2/2);

        /* ½ûÖ¹ÁÙʱµ÷É«°å¼Ä´æÆ÷ */
        rTPAL = 0;

        fb_base_addr = LCDFRAMEBUFFER;
        bpp = 16;
        xsize = 480;
        ysize = 272;

        break;

    default:
        break;
    }   
}

/*
 * ÉèÖõ÷É«°å
 */
void Lcd_Palette8Bit_Init(void)
{
    int i;  
    volatile unsigned int *palette;
    
    rLCDCON5 |= (FORMAT8BPP_565<<11); // ÉèÖõ÷É«°åÖÐÊý¾Ý¸ñʽΪ5:6:5

    palette = (volatile unsigned int *)rPALETTE;
    for (i = 0; i < 256; i++)
        *palette++ = DEMO256pal[i];
}

/*
 * ¸Ä±äµ÷É«°åΪһÖÖÑÕÉ«
 * ÊäÈë²ÎÊý£º
 *     color: ÑÕÉ«Öµ£¬¸ñʽΪ0xRRGGBB
 */
void ChangePalette(u32 color)
{
    int i;
    unsigned char red, green, blue;
    u32 *palette;
    
    palette=(u32 *)rPALETTE;
    for (i = 0; i < 256; i++)
    {
        red   = (color >> 19) & 0xff;
        green = (color >> 10) & 0xff;
        blue  = (color >>  3) & 0xff;
        color = (red << 11) | (green << 5) | blue; // ¸ñʽ5:6:5

        while ((rLCDCON5>>16) == 2);     // µÈ´ýÖ±µ½VSTATUS²»Îª¡±ÓÐЧ¡±
        *palette++ = color;
    }
}

/*
 * ÉèÖÃÊÇ·ñÊä³öLCDµçÔ´¿ª¹ØÐźÅLCD_PWREN
 * ÊäÈë²ÎÊý£º
 *     invpwren: 0 - LCD_PWRENÓÐЧʱΪÕý³£¼«ÐÔ
 *               1 - LCD_PWRENÓÐЧʱΪ·´×ª¼«ÐÔ
 *     pwren:    0 - LCD_PWRENÊä³öÓÐЧ
 *               1 - LCD_PWRENÊä³öÎÞЧ
 */
void Lcd_PowerEnable(int invpwren, int pwren)
{
    rGPGCON = (rGPGCON & (~(3<<8))) | (3<<8);   // GPG4ÓÃ×÷LCD_PWREN
    rGPGUP  = (rGPGUP & (~(1<<4))) | (1<<4);    // ½ûÖ¹ÄÚ²¿ÉÏÀ­
    
    rLCDCON5 = (rLCDCON5 & (~(1<<5))) | (invpwren<<5);  // ÉèÖÃLCD_PWRENµÄ¼«ÐÔ: Õý³£/·´×ª
    rLCDCON5 = (rLCDCON5 & (~(1<<3))) | (pwren<<3);     // ÉèÖÃÊÇ·ñÊä³öLCD_PWREN
}    

/*
 * ÉèÖÃLCD¿ØÖÆÆ÷ÊÇ·ñÊä³öÐźÅ
 * ÊäÈë²ÎÊý£º
 * onoff: 
 *      0 : ¹Ø±Õ
 *      1 : ´ò¿ª
 */
void Lcd_EnvidOnOff(int onoff)
{
    if (onoff == 1)
        rLCDCON1 |= 1;         // ENVID ON
    else
        rLCDCON1 &= 0x3fffe; // ENVID Off
}    

/*
 * ʹÓÃÁÙʱµ÷É«°å¼Ä´æÆ÷Êä³öµ¥É«Í¼Ïñ
 * ÊäÈë²ÎÊý£º
 *     color: ÑÕÉ«Öµ£¬¸ñʽΪ0xRRGGBB
 */
void ClearScrWithTmpPlt(u32 color)
{
    rTPAL = (1<<24)|((color & 0xffffff)<<0);
}

/*
 * ֹͣʹÓÃÁÙʱµ÷É«°å¼Ä´æÆ÷
 */
void DisableTmpPlt(void)
{
    rTPAL = 0;
}

RGB颜色对照表

#FFFFFF

#FFFFF0

#FFFFE0

#FFFF00

#FFFAFA

#FFFAF0

#FFFACD

#FFF8DC

#FFF68F

#FFF5EE

#FFF0F5

#FFEFDB

#FFEFD5

#FFEC8B

#FFEBCD

#FFE7BA

#FFE4E1

#FFE4C4

#FFE4B5

#FFE1FF

#FFDEAD

#FFDAB9

#FFD700

#FFD39B

#FFC1C1

#FFC125

#FFC0CB

#FFBBFF

#FFB90F

#FFB6C1

#FFB5C5

#FFAEB9

#FFA54F

#FFA500

#FFA07A

#FF8C69

#FF8C00

#FF83FA

#FF82AB

#FF8247

#FF7F50

#FF7F24

#FF7F00

#FF7256

#FF6EB4

#FF6A6A

#FF69B4

#FF6347

#FF4500

#FF4040

#FF3E96

#FF34B3

#FF3030

#FF1493

#FF00FF

#FF0000

#FDF5E6

#FCFCFC

#FAFAFA

#FAFAD2

#FAF0E6

#FAEBD7

#FA8072

#F8F8FF

#F7F7F7

#F5FFFA

#F5F5F5

#F5F5DC

#F5DEB3

#F4F4F4

#F4A460

#F2F2F2

#F0FFFF

#F0FFF0

#F0F8FF

#F0F0F0

#F0E68C

#F08080

#EEEEE0

#EEEED1

#EEEE00

#EEE9E9

#EEE9BF

#EEE8CD

#EEE8AA

#EEE685

#EEE5DE

#EEE0E5

#EEDFCC

#EEDC82

#EED8AE

#EED5D2

#EED5B7

#EED2EE

#EECFA1

#EECBAD

#EEC900

#EEC591

#EEB4B4

#EEB422

#EEAEEE

#EEAD0E

#EEA9B8

#EEA2AD

#EE9A49

#EE9A00

#EE9572

#EE82EE

#EE8262

#EE7AE9

#EE799F

#EE7942

#EE7621

#EE7600

#EE6AA7

#EE6A50

#EE6363

#EE5C42

#EE4000

#EE3B3B

#EE3A8C

#EE30A7

#EE2C2C

#EE1289

#EE00EE

#EE0000

#EDEDED

#EBEBEB

#EAEAEA

#E9967A

#E8E8E8

#E6E6FA

#E5E5E5

#E3E3E3

#E0FFFF

#E0EEEE

#E0EEE0

#E0E0E0

#E066FF

#DEDEDE

#DEB887

#DDA0DD

#DCDCDC

#DC143C

#DBDBDB

#DB7093

#DAA520

#DA70D6

#D9D9D9

#D8BFD8

#D6D6D6

#D4D4D4

#D3D3D3

#D2B48C

#D2691E

#D1EEEE

#D1D1D1

#D15FEE

#D02090

#CFCFCF

#CDCDC1

#CDCDB4

#CDCD00

#CDC9C9

#CDC9A5

#CDC8B1

#CDC673

#CDC5BF

#CDC1C5

#CDC0B0

#CDBE70

#CDBA96

#CDB7B5

#CDB79E

#CDB5CD

#CDB38B

#CDAF95

#CDAD00

#CDAA7D

#CD9B9B

#CD9B1D

#CD96CD

#CD950C

#CD919E

#CD8C95

#CD853F

#CD8500

#CD8162

#CD7054

#CD69C9

#CD6889

#CD6839

#CD661D

#CD6600

#CD6090

#CD5C5C

#CD5B45

#CD5555

#CD4F39

#CD3700

#CD3333

#CD3278

#CD2990

#CD2626

#CD1076

#CD00CD

#CD0000

#CCCCCC

#CAFF70

#CAE1FF

#C9C9C9

#C7C7C7

#C71585

#C6E2FF

#C67171

#C5C1AA

#C4C4C4

#C2C2C2

#C1FFC1

#C1CDCD

#C1CDC1

#C1C1C1

#C0FF3E

#BFEFFF

#BFBFBF

#BF3EFF

#BEBEBE

#BDBDBD

#BDB76B

#BCEE68

#BCD2EE

#BC8F8F

#BBFFFF

#BABABA

#BA55D3

#B9D3EE

#B8B8B8

#B8860B

#B7B7B7

#B5B5B5

#B4EEB4

#B4CDCD

#B452CD

#B3EE3A

#B3B3B3

#B2DFEE

#B23AEE

#B22222

#B0E2FF

#B0E0E6

#B0C4DE

#B0B0B0

#B03060

#AEEEEE

#ADFF2F

#ADD8E6

#ADADAD

#ABABAB

#AB82FF

#AAAAAA

#A9A9A9

#A8A8A8

#A6A6A6

#A52A2A

#A4D3EE

#A3A3A3

#A2CD5A

#A2B5CD

#A1A1A1

#A0522D

#A020F0

#9FB6CD

#9F79EE

#9E9E9E

#9C9C9C

#9BCD9B

#9B30FF

#9AFF9A

#9ACD32

#9AC0CD

#9A32CD

#999999

#9932CC

#98FB98

#98F5FF

#97FFFF

#96CDCD

#969696

#949494

#9400D3

#9370DB

#919191

#912CEE

#90EE90

#8FBC8F

#8F8F8F

#8EE5EE

#8E8E8E

#8E8E38

#8E388E

#8DEEEE

#8DB6CD

#8C8C8C

#8B8B83

#8B8B7A

#8B8B00

#8B8989

#8B8970

#8B8878

#8B8682

#8B864E

#8B8386

#8B8378

#8B814C

#8B7E66

#8B7D7B

#8B7D6B

#8B7B8B

#8B795E

#8B7765

#8B7500

#8B7355

#8B6969

#8B6914

#8B668B

#8B6508

#8B636C

#8B5F65

#8B5A2B

#8B5A00

#8B5742

#8B4C39

#8B4789

#8B475D

#8B4726

#8B4513

#8B4500

#8B3E2F

#8B3A62

#8B3A3A

#8B3626

#8B2500

#8B2323

#8B2252

#8B1C62

#8B1A1A

#8B0A50

#8B008B

#8B0000

#8A8A8A

#8A2BE2

#8968CD

#87CEFF

#87CEFA

#87CEEB

#878787

#858585

#848484

#8470FF

#838B8B

#838B83

#836FFF

#828282

#7FFFD4

#7FFF00

#7F7F7F

#7EC0EE

#7D9EC0

#7D7D7D

#7D26CD

#7CFC00

#7CCD7C

#7B68EE

#7AC5CD

#7A8B8B

#7A7A7A

#7A67EE

#7A378B

#79CDCD

#787878

#778899

#76EEC6

#76EE00

#757575

#737373

#71C671

#7171C6

#708090

#707070

#6E8B3D

#6E7B8B

#6E6E6E

#6CA6CD

#6C7B8B

#6B8E23

#6B6B6B

#6A5ACD

#698B69

#698B22

#696969

#6959CD

#68838B

#68228B

#66CDAA

#66CD00

#668B8B

#666666

#6495ED

#63B8FF

#636363

#616161

#607B8B

#5F9EA0

#5E5E5E

#5D478B

#5CACEE

#5C5C5C

#5B5B5B

#595959

#575757

#556B2F

#555555

#551A8B

#54FF9F

#548B54

#545454

#53868B

#528B8B

#525252

#515151

#4F94CD

#4F4F4F

#4EEE94

#4D4D4D

#4B0082

#4A708B

#4A4A4A

#48D1CC

#4876FF

#483D8B

#474747

#473C8B

#4682B4

#458B74

#458B00

#454545

#43CD80

#436EEE

#424242

#4169E1

#40E0D0

#404040

#3D3D3D

#3CB371

#3B3B3B

#3A5FCD

#388E8E

#383838

#36648B

#363636

#333333

#32CD32

#303030

#2F4F4F

#2E8B57

#2E2E2E

#2B2B2B

#292929

#282828

#27408B

#262626

#242424

#228B22

#218868

#212121

#20B2AA

#1F1F1F

#1E90FF

#1E1E1E

#1C86EE

#1C1C1C

#1A1A1A

#191970

#1874CD

#171717

#141414

#121212

#104E8B

#0F0F0F

#0D0D0D

#0A0A0A

#080808

#050505

#030303

#00FFFF

#00FF7F

#00FF00

#00FA9A

#00F5FF

#00EEEE

#00EE76

#00EE00

#00E5EE

#00CED1

#00CDCD

#00CD66

#00CD00

#00C5CD

#00BFFF

#00B2EE

#009ACD

#008B8B

#008B45

#008B00

#00868B

#00688B

#006400

#0000FF

#0000EE

#0000CD

#0000AA

#00008B

#000080

#000000


经测试正常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值