S3C2440之液晶屏LCD驱动
生活随笔
收集整理的這篇文章主要介紹了
S3C2440之液晶屏LCD驱动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作為一款高端的CPU S3C2440(2013年的時候),自帶LCD液晶屏的UI接口,
也就是外設,只需要對照對應的LCD手冊設置寄存器即可
所用LCD是一款16BPP的320(寬)X240(高)的LCD顯示屏
/****************************** *文件名:LCD.c * *功能: 液晶顯示程序 * *創建者: 潘星宇 * *最后修改:2013.02.27 * *備注: * * * *******************************/#include "LCD.h"#if !BPP24 #define BPPMODE_TFT 12 //16位TFT型LCD #else #define BPPMODE_TFT 13 //24位TFT型LCD #endif#if !BPP24 #define HWSWP 1 //顏色數據半字交換 #else #define HWSWP 0 //顏色數據半字不交換 #endif //定義顯示緩存區 320 240 //24BPP時應該為 U32LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH]; volatile U16 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH]; /************************************************************************** ***** 函數名: LCD_Init(void) ***** 功能: LCD初始化 ***** 參數: 無 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2013-03-7 ***** 最后更新:2013-03-7 ****************************************************************************/ void LCD_Init(void) {rGPCUP = 0x00000000;rGPCCON = 0xaaaa02aa; //0x1010rGPDUP = 0x00000000;rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]rLCDCON1=rLCDCON1|((CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0); //1100rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);rLCDCON4=(HSPW);rLCDCON5 = (1<<11) |(INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3) |(BSWP<<1) | (HWSWP);rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);//24BPP時應該是M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*2))>>1 );rLCDSADDR3=LCD_WIDTH*2/2; //24BPP時候應該是 LCD_WIDTH*4/2rLCDINTMSK|=(3); // MASK LCD Sub InterruptrTCONSEL = 0; // Disable LPC3480rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disablerGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN把rGPGDAT = rGPGDAT | (1<<4) ;rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); // PWRENrLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); // INVPWREN電源脈沖信號不反轉rLCDCON1|=1; //開啟LCD顯示 }/************************************************************************** ***** 函數名: PutPixel(void) ***** 功能: 繪制像素點 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 int ****************************************************************************/ void PutPixel(U32 x,U32 y, U32 c ) {LCD_BUFFER[y][x] = c; }/************************************************************************** ***** 函數名: Draw_Text16(void) ***** 功能:繪制寬X高大小為16×16的中文字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]) { unsigned short int i,j;unsigned char mask,buffer;for (i=0;i<16;i++){/*漢字的左半邊*/mask=0x80; //掩碼 0b1000 0000>>1---0b0000 1000buffer=ch[i*2]; //提取一行的第一個字節0x08=0b0000 1000for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j,y+i,color); //為筆畫上色}else{PutPixel(x+j,y+i,backColor); //背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的右半邊*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*2+1]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+8,y+i,color); //為筆畫上色}else{PutPixel(x+j+8,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}} }/************************************************************************** ***** 函數名: Draw_ASCII16x24(void) ***** 功能:繪制寬X高大小為16×24的字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2013-03-22 ***** 最后更新:2013-03-22 ****************************************************************************/ void Draw_ASCII16x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]) { unsigned short int i,j;unsigned char mask,buffer;for (i=0;i<24;i++){/*字符的左半邊*/mask=0x80; //掩碼 0b1000 0000>>1---0b0000 1000buffer=ch[i*2]; //提取一行的第一個字節0x08=0b0000 1000for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j,y+i,color); //為筆畫上色}else{PutPixel(x+j,y+i,backColor); //背景色}mask=mask>>1; //為判斷下一位準備}/*字符的右半邊*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*2+1]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+8,y+i,color); //為筆畫上色}else{PutPixel(x+j+8,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}} }/************************************************************************** ***** 函數名: Draw_ASCII(void) ***** 功能:繪制寬X高大小為8×16的字符 ***** 參數: x:橫坐標 y:縱坐標 color文字顏色 backColor 文字背景顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void Draw_ASCII(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *ch) {unsigned short int i,j;unsigned char mask,buffer;for (i=0;i<16;i++){mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i]; //提取一行的第一個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j,y+i,color);//為筆畫上色}else{PutPixel(x+j,y+i,backColor); //背景色}mask=mask>>1; //為判斷下一位準備}} }/************************************************************************** ***** 函數名: Draw_ASCII_N(void) ***** 功能: 繪制大小為16×8,16x16的字符串 ***** 參數: x:橫坐標 y:縱坐標 color文字顏色 backColor 文字背景顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs) { U32 i=0;while (*chs != '\0'){if (*chs > 0xa0) //漢字內碼都是大于0xa0{for (i=0 ;i < GB16_NUM();i++){ if(x>LCD_WIDTH-16){x=0;y=y+16;}if ((*chs == hz_index[i]) && (*(chs+1) == hz_index[i+1])){Draw_Text16(x,y,color,backColor,&hz[16*(i)]);x +=16;break;}}chs+=2;}else //如果是字符執行以下{ if(x>LCD_WIDTH-8){x=0;y=y+16;}for (i=0 ;i < ASCII_NUM();i++){if (*chs == zf_index[i]){Draw_ASCII(x,y,color,backColor,&zf[16*i]);x += 8;break;}}chs++;} } }/************************************************************************** ***** 函數名: Draw_Text56(void) ***** 功能:繪制大小為56×56的中文字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2012-12-16 ***** 最后更新:2012-12-16 ****************************************************************************/ //Draw_Text16(50,10,0x0,0xf800,xin); void Draw_Text56(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]) { unsigned long int i,j;unsigned char mask,buffer;for (i=0;i<56;i++){/*漢字的第一部分*/mask=0x80; //掩碼 0b1000 0000>>1---0b0000 1000buffer=ch[i*7]; //提取一行的第一個字節0x08=0b0000 1000for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j,y+i,color); //為筆畫上色}else{PutPixel(x+j,y+i,backColor); //背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第二部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+1]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+8,y+i,color); //為筆畫上色}else{PutPixel(x+j+8,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第三部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+2]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+16,y+i,color); //為筆畫上色}else{PutPixel(x+j+16,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第四部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+3]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+24,y+i,color); //為筆畫上色}else{PutPixel(x+j+24,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第五部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+4]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+32,y+i,color); //為筆畫上色}else{PutPixel(x+j+32,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第六部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+5]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+40,y+i,color); //為筆畫上色}else{PutPixel(x+j+40,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}/*漢字的第七部分*/mask=0x80; //掩碼,從bit7開始判斷buffer=ch[i*7+6]; //提取一行的第二個字節for (j=0;j<8;j++){if (buffer&mask){PutPixel(x+j+48,y+i,color); //為筆畫上色}else{PutPixel(x+j+48,y+i,backColor);//背景色}mask=mask>>1; //為判斷下一位準備}} }/************************************************************************** ***** 函數名: Draw_ASCII_N(void) ***** 功能: 繪制N個大小為16×8的字符 ***** 參數: x:橫坐標 y:縱坐標 color顏色 ch:字符串 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void Draw_ASCII_N(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs) {U32 i=0;while (*chs!= '\0'){for ( ;i < ASCII_NUM();i++){if (*chs==zf_index[i]){Draw_ASCII(x,y+8,color,backColor,&zf[16*i]);break;}}} }/************************************************************************** ***** 函數名: Brush_Background() ***** 功能: 繪制屏幕背景顏色,顏色為c ***** 參數: c 顏色 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新: 2011-03-30 ****************************************************************************/ void Brush_Background( U32 c) {int x,y ;for ( y = 0 ; y < LCD_HEIGHT ; y++ ){for ( x = 0 ; x < LCD_WIDTH ; x++ ){LCD_BUFFER[y][x] = c ;}} }/************************************************************************** ***** 函數名: one_point_to_another(unsigned int x1, unsigned int y1,unsigned int length, double angle, unsigned int color, unsigned int length_start,unsigned int length_end) ***** 功能: 由一點,長度和角度做線 ***** 參數: 已知點坐標x1,y1;長度length,角度angle,顏色color;起始點和結束點;角度按照鐘表原則,0點為0°,順時針旋轉,函數內部將角度按照象限的原則轉化,第一象限為0°的開始。length_start_points:希望保留起始的點的個數length_end_points:希望保留最后的點的個數 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間:2012-12-25 ***** 最后更新: 2012-12-28 ****************************************************************************/ void one_point_to_another(unsigned int x1, //已知點橫坐標x1unsigned int y1, //已知點縱坐標y1unsigned int length, //兩點間距長度float angle, //兩點角度,按照鐘表原則,0點為0°,順時針旋轉unsigned int color, //顏色unsigned int length_start_points, //希望保留起始的點的個數unsigned int length_end_points) //希望保留最后的點的個數 {unsigned int x2; //畫線用橫坐標寄存器unsigned int y2; //畫線用縱坐標寄存器unsigned int length_i; //畫線計數用unsigned int length_end_i = 0; //畫線取最后幾個點計數用float radian; //弧度if ((angle >= 0) && (angle <= 90)){angle = 90 - angle;}else if ((angle >= 91) && (angle <= 180)){angle = 360 - (angle - 90);}else if ((angle >= 181) && (angle <=270)){angle = 270 - (angle - 180); }else if ((angle >= 271) && (angle <=359)){angle = 180 - (angle - 270); }radian = (angle / 180)*PIN; //角度與弧度的轉換if (length_start_points >= length) //如果希望保留前面的點超出了線的長度{length_start_points = length; }if (length_end_points >= length) //如果希望保留后面的點超出了線的長度{length_end_points = length; }for (length_i = 0; length_i <= length; length_i++){if ((length_start_points > 0) || (length_end_i >= (length - length_end_points))) //希望保留起始點的個數{x2 = (unsigned int)(x1 + length_i*cos(radian) + 0.5); //加0.5為了防止大于5的小數被舍去y2 = (unsigned int)(y1 - length_i*sin(radian) + 0.5); //由于液晶屏的坐標Y軸向下坐標大,與象限剛好相反,故在此是減去PutPixel(x2,y2,color);if (length_start_points > 0) //防止自減運算溢出,變成最大值{length_start_points--;}}length_end_i++;} }/************************************************************************** ***** 函數名: draw_circle(unsigned int x1, unsigned int y1,unsigned int radius,unsigned int color) ***** 功能: 畫一個圓 ***** 參數: 已知點坐標x1,y1;半徑radius,顏色color; ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間:2012-12-30 ***** 最后更新: 2012-12-30 ****************************************************************************/ void draw_circle(unsigned int x1, //圓心橫坐標unsigned int y1, //圓心縱坐標unsigned int radius, //半徑unsigned int color) //顏色 {unsigned int i;for (i=0; i <= 359; i++){one_point_to_another (x1, y1, radius, i, color, 0, 1);} }/************************************************************************** ***** 函數名: MidpointCircle(int x0,int y0,int r,int color)***** 功能:畫個圓 ***** 參數: 圓心x,y坐標,半徑,顏色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2012-12-23 ***** 最后更新: 2012-12-23 ****************************************************************************/ void MidpointCircle(int x0,int y0,int r,int color) {int x,y;float d;x=0;y=r;d=5.0/4-r;while(x<=y){PutPixel(x0+x,y0+y,color);PutPixel(x0+x,y0-y,color);PutPixel(x0-x,y0+y,color);PutPixel(x0-x,y0-y,color);PutPixel(x0+y,y0+x,color);PutPixel(x0+y,y0-x,color);PutPixel(x0-y,y0+x,color);PutPixel(x0-y,y0-x,color);if(d<0){d+=x*2.0+3;}else{d+=2.0*(x-y)+5;y--;}x++;} }/************************************************************************** ***** 函數名: draw_square畫個正方形 ***** 參數: x:左上角頂點橫坐標y:左上角頂點縱坐標l:邊長color:邊的顏色back_color:內部填充色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2013-3-14 ***** 最后更新: 2013-3-14 ****************************************************************************/ void draw_square(U16 x, U16 y, U16 l, U32 color, U32 back_color) {U16 i,j,k;for (i=0; i<=l; i++){PutPixel(x+i,y,color); //上邊PutPixel(x+i,y+l,color); //下邊PutPixel(x,y+i,color); //左邊PutPixel(x+l,y+i,color); //右邊}for (j=0; j<=l-2; j++){for(k=0; k<=l-2; k++){PutPixel(x+1+k,y+1+j,back_color); //填充內部,橫著畫} } }/************************************************************************** ***** 函數名: draw_rectangle畫個矩形 ***** 參數: x:起點橫坐標y:起點縱坐標 width:寬height:高color:顏色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2013-3-24 ***** 最后更新: 2013-3-24 ****************************************************************************/ void draw_rectangle(U16 x, U16 y, U16 width, U16 height, U32 color) {U16 i,j;for(i=0; i<height; i++){for(j=0; j<width; j++){PutPixel(x+j,y+i,color); }} }/************************************************************************** ***** 函數名: Paint_Bmp() ***** 功能: 顯示指定大小圖片 ***** 參數: x0 開始位置,y0開始位置 ,h高度,l 寬度 ,bmp 圖片數據數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2017-04-22 ****************************************************************************/ //l:480 h:272void Paint_Bmp(int x0,int y0,int l,int h,const unsigned char bmp[]) {int x,y;U32 c;int p = 0;for( y = y0 ; y < y0+h ; y++ ){for( x = x0 ; x <x0+l ; x++ ){c = bmp[p+1] | (bmp[p]<<8) ; //16BPP 先放的是高8位然后是低8位// if ( ( (x0+x) < LCD_WIDTH) && ( (y0+y) < LCD_HEIGHT) )LCD_BUFFER[y][x] = c ;p = p + 2 ; //16BPP儲存一個顏色 故一次加2}} }有好幾個頭文件如下:
#ifndef LCD_H #define LCD_H #include "2440addr.h" #include "def.h" #include "zi.h" #include "math.h" /************************************************************************** ***** 函數名: LCD_Init(void) ***** 功能: LCD初始化 ***** 參數: 無 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ extern void LCD_Init(void);/************************************************************************** ***** 函數名: PutPixel(void) ***** 功能: 繪制像素點 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 int ****************************************************************************/ extern void PutPixel(U32 x,U32 y, U32 c );/************************************************************************** ***** 函數名: Draw_Text16(void) ***** 功能:繪制寬X高大小為16×16的中文字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ extern void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);/************************************************************************** ***** 函數名: Draw_Text56(void) ***** 功能:繪制大小為56×56的中文字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2012-12-16 ***** 最后更新:2012-12-16 ****************************************************************************/ //Draw_Text16(50,10,0x0,0xf800,xin); extern void Draw_Text56(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);/************************************************************************** ***** 函數名: Draw_ASCII(void) ***** 功能:繪制寬X高大小為8×16的字符 ***** 參數: x:橫坐標 y:縱坐標 color文字顏色 backColor 文字背景顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ extern void Draw_ASCII(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *ch);/************************************************************************** ***** 函數名: Draw_ASCII_N(void) ***** 功能: 繪制大小為16×8,16x16的字符串 ***** 參數: x:橫坐標 y:縱坐標 color文字顏色 backColor 文字背景顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ extern void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs);/************************************************************************** ***** 函數名: Draw_ASCII16x24(void) ***** 功能:繪制寬X高大小為16×24的字符 ***** 參數: x:橫坐標 y:縱坐標 c顏色 ch:字模數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2013-03-22 ***** 最后更新:2013-03-22 ****************************************************************************/ extern void Draw_ASCII16x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[]);/************************************************************************** ***** 函數名: Draw_ASCII_N(void) ***** 功能: 繪制N個大小為16×8的字符 ***** 參數: x:橫坐標 y:縱坐標 color顏色 ch:字符串 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ extern void Draw_ASCII_N(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs);/************************************************************************** ***** 函數名: Brush_Background() ***** 功能: 繪制屏幕背景顏色,顏色為c ***** 參數: c 顏色 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新: 2011-03-30 ****************************************************************************/ extern void Brush_Background( U32 c);/************************************************************************** ***** 函數名: one_point_to_another(unsigned int x1, unsigned int y1,unsigned int length, double angle, unsigned int color, unsigned int length_start,unsigned int length_end) ***** 功能: 由一點,長度和角度做線 ***** 參數: 已知點坐標x1,y1;長度length,角度angle,顏色color;起始點和結束點;角度按照鐘表原則,0點為0°,順時針旋轉,函數內部將角度按照象限的原則轉化,第一象限為0°的開始。length_start_points:希望保留起始的點的個數length_end_points:希望保留最后的點的個數 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間:2012-12-25 ***** 最后更新: 2012-12-25 這個函數有個缺陷:圓心的橫縱坐標都要大于半徑,因為沒有判斷負值的數據類型,稍微改造下即可 ****************************************************************************/ extern void one_point_to_another(unsigned int x1, //已知點橫坐標x1unsigned int y1, //已知點縱坐標y1unsigned int length, //兩點間距長度float angle, //兩點角度,按照鐘表原則,0點為0°,順時針旋轉unsigned int color, //顏色unsigned int length_start_points, //希望保留起始的點的個數unsigned int length_end_points); //希望保留最后的點的個數/************************************************************************** ***** 函數名: draw_circle(unsigned int x1, unsigned int y1,unsigned int radius,unsigned int color) ***** 功能: 畫一個圓 ***** 參數: 已知點坐標x1,y1;半徑radius,顏色color; ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間:2012-12-30 ***** 最后更新: 2012-12-30 ****************************************************************************/ extern void draw_circle(unsigned int x1, //圓心橫坐標unsigned int y1, //圓心縱坐標unsigned int radius, //半徑unsigned int color); //顏色/************************************************************************** ***** 函數名: MidpointCircle(int x0,int y0,int r,int color)***** 功能:畫個圓 ***** 參數: 圓心x,y坐標,半徑,顏色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2012-12-23 ***** 最后更新: 2012-12-23 ****************************************************************************/ extern void MidpointCircle(int x0,int y0,int r,int color);/************************************************************************** ***** 函數名: draw_square畫個正方形 ***** 參數: x:左上角頂點橫坐標y:左上角頂點縱坐標l:邊長color:邊的顏色back_color:內部填充色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2013-3-14 ***** 最后更新: 2013-3-14 ****************************************************************************/ extern void draw_square(U16 x, U16 y, U16 l, U32 color, U32 back_color);/************************************************************************** ***** 函數名: draw_rectangle畫個矩形 ***** 參數: x:起點橫坐標y:起點縱坐標 width:寬height:高color:顏色 ***** 返回值: 無 ***** 創建者: 潘星宇 ***** 創建時間: 2013-3-24 ***** 最后更新: 2013-3-24 ****************************************************************************/ extern void draw_rectangle(U16 x, U16 y, U16 width, U16 height, U32 color);/************************************************************************** ***** 函數名: Paint_Bmp() ***** 功能: 顯示指定大小圖片 ***** 參數: x0 開始位置,y0開始位置 ,h高度,l 寬度 ,bmp 圖片數據數組 ***** 返回值: 無 ***** 創建者: ***** 創建時間: 2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ //l:480 h:272 extern void Paint_Bmp(int x0,int y0,int h,int l,const unsigned char bmp[]); #endif #ifndef __DEF_H__ #define __DEF_H__#define U32 unsigned int #define U16 unsigned short #define S32 int #define S16 short int #define U8 unsigned char #define S8 char#define BYTE char #define WORD short #define DWORD int #define UINT U32 #define LPSTR U8 * #define TRUE 1 #define FALSE 0 #define OK 1 #define FAIL 0#define SIZE_1K 0x00000400 #define SIZE_2K 0x00000800 #define SIZE_4K 0x00001000 #define SIZE_8K 0x00002000 #define SIZE_16K 0x00004000 #define SIZE_32K 0x00008000 #define SIZE_64K 0x00010000 #define SIZE_128K 0x00020000 #define SIZE_256K 0x00040000 #define SIZE_512K 0x00080000 #define SIZE_1M 0x00100000 #define SIZE_2M 0x00200000 #define SIZE_4M 0x00400000 #define SIZE_8M 0x00800000 #define SIZE_16M 0x01000000 #define SIZE_32M 0x02000000 #define SIZE_64M 0x04000000 #define SIZE_128M 0x08000000 #define SIZE_256M 0x10000000 #define SIZE_512M 0x20000000 #define SIZE_1G 0x40000000 #define SIZE_2G 0x80000000#define ENTER_KEY 0x0d #define BACK_KEY 0x08 #define BEEP_KEY 0x07 #define UP_KEY 0x41 #define DOWN_KEY 0x42 #define RIGHT_KEY 0x43 #define LEFT_KEY 0x44 #define HOME_KEY 0x48 #define END_KEY 0x4b #define ESC_KEY 0x1b#define PIN 3.141592653 #define M5D(n) ((n) & 0x1fffff) //用于設置顯示緩存區時,取低21位地址/******************480X272*********************************/#define BPP24 (0) #define LCD_WIDTH 480 //屏幕的寬 #define LCD_HEIGHT 272 //屏幕的高 //垂直同步信號的脈寬、后肩和前肩 #define VSPW (8) //垂直同步信號的脈寬(X35屏只能是該值) #define VBPD (2) //垂直同步信號的后肩 #define VFPD (4) //垂直同步信號的前肩//水平同步信號的脈寬、后肩和前肩 #define HSPW (30) //水平同步信號的脈寬 #define HBPD (10) //水平同步信號的后肩 #define HFPD (19) //水平同步信號的前肩#define FRM565 (1)//for #define CLKVAL_TFT 4 //設置時鐘信號 #define MVAL_USED 0 // 當屏是TFT時設置為0,STN屏時設置為1 #define PNRMODE_TFT 3 //選擇顯示模式 TFT型LCD //for LCDCON5 #define BPP24BL 0 //32位數據表示24位顏色值時,低位數據有效,高8位無效 #define INVVCLK 0 //像素值在VCLK下降沿有效 #define INVVLINE 1 //翻轉HSYNC信號 #define INVVFRAME 1 //翻轉VSYNC信號 #define INVVD 1 //翻轉VD信號極性 #define INVVDEN 1 //1 //翻轉VDEN信號極性 #define PWREN 1 //使能PWREN信號 #define BSWP 0 //顏色數據字節不交換 #define LINEVAL (LCD_HEIGHT-1) #define HOZVAL (LCD_WIDTH-1)#endif /*__DEF_H__*/?
總結
以上是生活随笔為你收集整理的S3C2440之液晶屏LCD驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Excel VBA】Len的有趣之处—
- 下一篇: 周报 | 吉吉拍助力消费者转变