1. 程式人生 > >LCD顯示文字的函式-ARM體系-2440

LCD顯示文字的函式-ARM體系-2440

/*
*lcd顯示漢字
*輸入引數:
*	x:開始位置橫座標
*	y:開始位置縱座標
*	color:字型顏色
*	ch[]:文字
*	
*/

void Draw_Text16(int x, int y, int color, const unsigned char ch[])  
{  
    unsigned short i, j ;  
    unsigned char mask, tem ;  
    for(i=0; i<16; i++)  
    {  
        mask= 0x80 ;  
        tem = ch[i*2] ; //倆個位元組一組16位,取第一個位元組  
        for(j=0; j<8; j++)  
        {  
            if(tem & mask)  
            {  
                PutPixel(x+j, y+i, color) ;  
            }  
            mask = mask >> 1 ;  
        }   
          
        mask = 0x80 ;  
        tem = ch[i*2 + 1] ;  
        for(j=0; j<8; j++)  
        {  
            if(tem & mask)  
            {  
                PutPixel(x+j+8, y+i, color) ;  
            }  
            mask = mask >> 1 ;  
        }  
    }  
} 
/* 
 * 畫點
 * 輸入引數:
 *     x、y : 象素座標
 *     color: 顏色值
 *         對於16BPP: color的格式為0xAARRGGBB (AA = 透明度),
 *     需要轉換為5:6:5格式
 *         對於8BPP: color為調色盤中的索引值,
 *     其顏色取決於調色盤中的數值
 */
void PutPixel(UINT32 x, UINT32 y, UINT32 color)
{
    UINT8 red,green,blue;

    switch (bpp){
        case 16:
        {
            UINT16 *addr = (UINT16 *)fb_base_addr + (y * xsize + x);
            red   = (color >> 19) & 0x1f;
            green = (color >> 10) & 0x3f;
            blue  = (color >>  3) & 0x1f;
            color = (red << 11) | (green << 5) | blue; // 格式5:6:5
            *addr = (UINT16) color;
            break;
        }
        
        case 8:
        {
            UINT8 *addr = (UINT8 *)fb_base_addr + (y * xsize + x);
            *addr = (UINT8) color;
            break;
        }

        default:
            break;
    }
}