S3C2440之液晶屏LCD驅動
阿新 • • 發佈:2019-01-12
作為一款高階的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; //0x1010 rGPDUP = 0x00000000; rGPDCON=0xaaaaaaaa; //Initialize VD[15:8] rLCDCON1=rLCDCON1|((CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0); //1100 rLCDCON2=(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/2 rLCDINTMSK|=(3); // MASK LCD Sub Interrupt rTCONSEL = 0; // Disable LPC3480 rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN把 rGPGDAT = rGPGDAT | (1<<4) ; rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); // PWREN rLCDCON5=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 1000 buffer=ch[i*2]; //提取一行的第一個位元組0x08=0b0000 1000 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; //為判斷下一位準備 } /*漢字的右半邊*/ 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 1000 buffer=ch[i*2]; //提取一行的第一個位元組0x08=0b0000 1000 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; //為判斷下一位準備 } /*字元的右半邊*/ 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 1000 buffer=ch[i*7]; //提取一行的第一個位元組0x08=0b0000 1000 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; //為判斷下一位準備 } /*漢字的第二部分*/ 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, //已知點橫座標x1 unsigned int y1, //已知點縱座標y1 unsigned 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:272 void 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, //已知點橫座標x1 unsigned int y1, //已知點縱座標y1 unsigned 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__*/