由于OK6410自帶的LCD分辨率太低,自己在淘寶上淘了一個5'的TFT LCD,分辨率為800*480
今天上午終于驅(qū)動起來了,遺憾的是OK6410的轉(zhuǎn)接板竟然將部分RGB數(shù)據(jù)線接在一起,導(dǎo)致只能支持16BIT的顏色.
下面是我的液晶屏的時序資料
//代碼
//TFT_LCD.C
/*************************************************************************************************************
?* 文件名: TFT_LCD.c
?* 功能: S3C6410 TFT_LCD底層驅(qū)動函數(shù)
?* 作者: 陳鵬
?* 創(chuàng)建時間: 2012年3月11日15:46
?* 最后修改時間:2012年5月6日
?* 詳細(xì): TFT_LCD初始化以及相關(guān)繪圖函數(shù)
*************************************************************************************************************/
#include"s3c6410_system.h"
#include"tft_lcd.h"
#include"s3c6410_map.h"
#include "ASCII.H"
//顯存分辨率
#define LCD_XSIZE 800//水平分辨率
#define LCD_YSIZE ? 480//垂直分辨率
//定義顯存
volatile static u16 LCD_BUFFER[LCD_YSIZE][LCD_XSIZE];
const u8 FONT_H[6] = {16,16,13,16,13,16};//對應(yīng)的字體寬和高
//液晶相關(guān)參數(shù) 5'TFT 800*480
//時序控制
//括號里面的為LCD時序要求的值,但是實際需要調(diào)整
//只要調(diào)整LCD_VSPW和LCD_HSPW就可以了
#define LCD_VBPD 29//VSBP-VSPW(32-3) ?
在幀開始處,垂直后沿是不活動行的數(shù)量,在垂直同步過程之后
#define LCD_VFPD 13//VSFP(13)
在幀末尾處,垂直前沿是不活動行的數(shù)量,在垂直同步過程之前。
#define LCD_VSPW 4//VSPW(3)
通過計算不活動行的數(shù)量,垂直同步脈沖寬度決定VSYNC 脈沖的高點品寬度。
#define LCD_HBPD 40//HSBP-HSPW(88-48)
水平后沿是HSYNC 下降沿和有效數(shù)據(jù)開始之間的VCLK 周期的數(shù)量。
#define LCD_HFPD 40//HSFP(40)
水平前沿是有效數(shù)據(jù)末端和HSYNC 上升沿之間的VCLK 周期的數(shù)量。
#define LCD_HSPW 174//HSPW(48)
通過計算不VCLK 的數(shù)量,水平同步脈沖寬度決定HSYNC 脈沖的高點品寬度
#define LCD_LINEVAL 480 //垂直分辨率
#define LCD_HOZVAL 800//水平分辨率
#define LCD_BUF_SIZE(LCD_XSIZE*(LCD_YSIZE+1))
//緩沖區(qū)大小,留有空閑,防止溢出
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//配置
//視頻主控制器0寄存器VIDCON0
#define VIDCON0_INTERLACE_F (0 << 29)//漸行
#define VIDCON0_VIDOUT (0 << 26)//RGB接口
#define VIDCON0_L1_DATA16 (0 << 23)//I80 (LDI1)輸出16bit模式
#define VIDCON0_L0_DATA16 (0 << 20)//I80 (LDI0)輸出16bit模式
#define VIDCON0_PNRMODE (0 << 17)//顯示格式 RGB格式
#define VIDCON0_CLKVALUP (1 << 16)//選擇CLKVAL_F 更新時序控制 ,幀開始時控制
#define VIDCON0_CLKVAL_F (3 << 6)//時鐘分頻,最大66MHz
VCLK=視頻時鐘源/(CLKVAL+1) CLKVAL>=1
#define VIDCON0_VCLKFREE (1 << 5)//VCLK 自由運行控制(只有在RGB IF 模式下有效):自由運行模式
#define VIDCON0_CLKDIR (1 << 4)//用CLKVAL_F 寄存器劃分時鐘源
#define VIDCON0_CLKSEL_F (0 << 2)//選擇時鐘源,HCLK = 133MHz
#define VIDCON0_ENVID (0 << 1)//視頻輸出及顯示控制信號禁止
#define VIDCON0_ENVID_F (0 << 0)//視頻輸出及顯示控制信號禁止
//視頻主控制器1寄存器VIDCON1
#define VIDCON1_IVCLK (1 << 7)//時鐘上升沿有效
#define VIDCON1_IHSYNC (1 << 6)//HSYNC反向
#define VIDCON1_IVSYNC (1 << 5)//VSYNC反向
#define VIDCON1_IVDEN (0 << 4)//DE信號不反向
//視頻時序控制0寄存器VIDTCON0
#define VIDTCON0_VBPDE (0 << 24)//在幀開始處,垂直后沿是不活動行的數(shù)量,在垂直同步過程之后(只對YVU 接口)
#define VIDTCON0_VBPD (LCD_VBPD << 16)
#define VIDTCON0_VFPD (LCD_VFPD << 8)
#define VIDTCON0_VSPW (LCD_VSPW << 0)
//視頻時序控制1寄存器VIDTCON1
#define VIDTCON1_VFPDE (0 << 24)//在幀末尾處,垂直前沿是不活動行的數(shù)量,在垂直同步過程之前(只對YVU 接口)
#define VIDTCON1_HBPD (LCD_HBPD << 16)
#define VIDTCON1_HFPD (LCD_HFPD << 8)
#define VIDTCON1_HSPW (LCD_HSPW << 0)
//視頻時序控制2寄存器VIDTCON2
#define VIDTCON2_LINEVAL (LCD_LINEVAL << 11)
#define VIDTCON2_HOZVAL (LCD_HOZVAL << 0)
//窗口0控制寄存器WINCON0
#define WINCON0_nWide_Narrow (0 << 26)//根據(jù)輸入值范圍選擇從YCbCr 到RGB 的顏色空間轉(zhuǎn)換等式。YCbCr 寬范圍是2’00, YCbCr 窄范圍是2’11,寬范圍:Y/Cb/Cr:2514-0窄范圍:Y:2314-16,Cb/Cr:240-16
#define WINCON0_ENLOCAL (0 << 22)//選擇數(shù)據(jù)訪問方式:專用DMA
#define WINCON0_BUFSEL (0 << 20)//緩沖區(qū)設(shè)置為0
#define WINCON0_BUFAUTOEN (0 << 19)
//雙緩沖區(qū)自動控制位,由BUFSEL控制
#define WINCON0_BITSWP (0 << 18)//位交換禁止
#define WINCON0_BYTSWP (0 << 17)//字節(jié)交換禁止
#define WINCON0_HAWSWP (1 << 16)//半子交換使能
#define WINCON0_InRGB (0 << 13)//此位指明源圖像的輸入顏色空間(只對ENLOCALI 有效):RGB
#define WINCON0_BURSTLEN (0 << 9)//DMA 的突發(fā)最大長度選擇:16BYTE
#define WINCON0_BPPMODE_F (5 << 2)//16bit RGB565
//窗口0位置控制A寄存器VIDOSD0A
#define VIDOSD0A_OSD_LeftTopX_F (0 << 11)//左上角的OSD 圖像像素橫向屏幕坐標(biāo)
#define VIDOSD0A_OSD_LeftTopY_F (0 << 0) //左上角的OSD 圖像像素縱向屏幕坐標(biāo)(對于接口TV輸出而言,這個值必須設(shè)置在屏幕y 坐標(biāo)值的一半位置。Y 坐標(biāo)值的初始位置必須為偶數(shù))
//窗口0位置控制B寄存器VIDOSD0B
#define VIDOSD0B_OSD_RightBotX_F ((LCD_HOZVAL - 1) << 11)//右下角的OSD 圖像像素橫向屏幕坐標(biāo)
#define VIDOSD0B_OSD_RightBotY_F ((LCD_LINEVAL - 1) << 0)//右下角的OSD 圖像像素縱向屏幕坐標(biāo)(對于接口TV輸出而言,這個值必須設(shè)置在屏幕y 坐標(biāo)值的一半位置。Y 坐標(biāo)值的初始位置必須為奇數(shù))
//窗口0位置控制C寄存器VIDOSD0C
#define VIDOSD0C_OSDSIZE (LCD_HOZVAL * LCD_LINEVAL)//窗口尺寸=高*寬(字?jǐn)?shù))
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**************************************************************
480*272 TFT LCD關(guān)閉輸出
**************************************************************/
void LCD_Disable(void)
{
VIDCON0 &= (~(BIT1 | BIT0));//視頻輸出和邏輯瞬態(tài)使能禁止+當(dāng)前幀末尾視頻輸出和邏輯瞬態(tài)使能禁止
WINCON0 &= ~BIT0;//禁止視頻輸出和VIDEO 控制信號
}
/**************************************************************
480*272 TFT LCD使能
**************************************************************/
void LCD_Enable(void)
{
VIDCON0 |= (BIT1 | BIT0);//視頻輸出和邏輯瞬態(tài)使能+當(dāng)前幀末尾視頻輸出和邏輯瞬態(tài)使能
WINCON0 |= BIT0;//使能視頻輸出和VIDEO 控制信號
}
/*************************************************************************************************************************
*函數(shù) ? ? ? ?: void LCD_Init(void)
*功能 ? ? ? ?: LCD初始化
*參數(shù) ? ? ? ?: 無
*返回 ? ? ? ?: 無
*依賴 ? ? ? ?: 底層宏定義
*作者 ? ? ? ?: 陳鵬
*時間 ? ? ? ?: 20120311
*最后修改時間: 20120311
*說明 ? ? ? ?: 初始化TFT LCD
*************************************************************************************************************************/
void LCD_Init(void)
{
u32 i;
? ?
? ? //IO以及硬件初始化
GPIOI->CON
= 0XAAAAAAAA;
GPIOJ->CON
= 0XAAAAAAAA;
SPCON &= ~0x3;// 將SPCON寄存器中,最低兩位設(shè)為01,即RGB I/F style
SPCON |= 0x1;
LCD_Disable();//顯示控制器失能
S3C6410_SFR(0x7410800C) &= ~(1 << 3);// (1)MOFPCON:SEL_BYPASS[3] value@0x7410800C ?必須設(shè)置為0
//視頻主控制器0寄存器配置
VIDCON0 = VIDCON0_INTERLACE_F + VIDCON0_VIDOUT + VIDCON0_L1_DATA16 + VIDCON0_L0_DATA16 + VIDCON0_PNRMODE+
? ? ?VIDCON0_CLKVALUP + VIDCON0_CLKVAL_F + VIDCON0_VCLKFREE + VIDCON0_CLKDIR + VIDCON0_CLKSEL_F +
?VIDCON0_ENVID + VIDCON0_ENVID_F;
//視頻主控制器1寄存器配置
VIDCON1 = VIDCON1_IVCLK + VIDCON1_IHSYNC + VIDCON1_IVSYNC + VIDCON1_IVDEN;?
//視頻主控制器2寄存器配置
VIDCON2 = 0;
//視頻時序控制0寄存器配置
VIDTCON0 = VIDTCON0_VBPDE + VIDTCON0_VBPD + VIDTCON0_VFPD + VIDTCON0_VSPW;
//視頻時序控制1寄存器配置
VIDTCON1 = VIDTCON1_VFPDE + VIDTCON1_HBPD + VIDTCON1_HFPD + VIDTCON1_HSPW;
//視頻時序控制2寄存器配置
VIDTCON2 = VIDTCON2_LINEVAL + VIDTCON2_HOZVAL;
//窗口0控制寄存器配置
WINCON0 = WINCON0_nWide_Narrow + WINCON0_ENLOCAL + WINCON0_BUFSEL + WINCON0_BUFAUTOEN + WINCON0_BITSWP + WINCON0_BYTSWP + WINCON0_HAWSWP+
?WINCON0_InRGB + WINCON0_BURSTLEN + WINCON0_BPPMODE_F;
//窗口0位置控制A寄存器配置
VIDOSD0A = VIDOSD0A_OSD_LeftTopX_F + VIDOSD0A_OSD_LeftTopY_F;
//窗口0位置控制B寄存器配置
VIDOSD0B = VIDOSD0B_OSD_RightBotX_F + VIDOSD0B_OSD_RightBotY_F;
//窗口0位置控制C寄存器配置
VIDOSD0C = VIDOSD0C_OSDSIZE;
//窗口0緩沖地址開始
VIDW00ADD0B0 = (u32)LCD_BUFFER;
//窗口0緩沖地址結(jié)束
VIDW00ADD1B0 = (u32)LCD_BUFFER + LCD_BUF_SIZE;
//幀緩沖地址2寄存器
VIDW00ADD2 = (0 << 13) | (LCD_HOZVAL * 2);//虛擬平面的頁面寬度此值定義了幀內(nèi)可可視端口的寬度。PAGEWIDTH 的值必須比突發(fā)尺寸大且在字邊界范圍內(nèi)。
LCD_Enable();
//顯示使能
for(i = 0;i < 50000;i ++);//加一個延時,否則可能會出錯
LCD_ClearScreen(0xffff);//清屏
}
/*************************************************************************************************************************
*函數(shù) ? ? ? ?: void LCD_ClearScreen(u16 Color)
*功能 ? ? ? ?: LCD清屏函數(shù)
*參數(shù) ? ? ? ?: Color:清屏顏色
*返回 ? ? ? ?: 無
*依賴 ? ? ? ?: 底層宏定義
*作者 ? ? ? ?: 陳鵬
*時間 ? ? ? ?: 20120311
*最后修改時間: 20120311
*說明 ? ? ? ?: 需要先初始化LCD,顏色值為RGB565
*************************************************************************************************************************/
void LCD_ClearScreen(u16 Color)
{
u16 x,y ;
for( x = 0 ; x < ?LCD_XSIZE; x++ )
? ? {?
? ? for( y = 0 ; y < LCD_YSIZE ; y++ )
LCD_BUFFER[y][x] = Color ;//在256色調(diào)色板中0x00為黑色,0xff為白色。
? ? }
}
/*************************************************************************************************************************
*函數(shù) ? ? ? ?: void ?LCD_DrawPoint(u16 x,u16 y,u16 Color)
*功能 ? ? ? ?: 在指定位置畫一個指定顏色的點
*參數(shù) ? ? ? ?: x,y:坐標(biāo);Color:顏色
*返回 ? ? ? ?: 無
*依賴 ? ? ? ?: 底層宏定義
*作者 ? ? ? ?: 陳鵬
*時間 ? ? ? ?: 20120311
*最后修改時間: 20120311
*說明 ? ? ? ?: 需要先初始化LCD,顏色值為RGB565,注意不要超出范圍
*************************************************************************************************************************/
void LCD_DrawPoint(u16 x,u16 y,u16 Color)
{
? ? if ( ( x < LCD_XSIZE) && ( y < LCD_YSIZE) )
LCD_BUFFER[y][x] = Color;
}
/*************************************************************************************************************************
* 函數(shù) :
void LCD_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 MODE)
* 功能 :
在指定位置顯示一個ASCII字符?
* 參數(shù) :
開始坐標(biāo),字符,字體顏色,背景顏色,顯示模式以及字體,
* 返回 :
無
* 依賴 :
畫點函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : Font_MODE最高位為1表示疊加顯示,其它位用來選擇字體
*************************************************************************************************************************/
void LCD_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE)
{
? const u8 *font_add;//用來選擇不同的字體對應(yīng)字庫地址
u8 i,j;
u8 fh;//字高
switch (FONT_H[Font_MODE & 0x7f])
{
case 16:fh = 16;font_add = Song_16[*p - 32];break;//選擇字體高度為16,字寬為8,宋體正常字體;
case 13:fh = 13;font_add = Song_13[*p - 32];break;//選擇字體高度為13,字寬為8,宋體正常字體;
default : fh = 16;font_add = Song_16[*p - 32];break;//默認(rèn)選擇字體高度為16,字寬為8,宋體正常字體;
}
? for(i = 0;i < fh;i ++)
{
for(j = 0;j < 8;j ++)
{
if(font_add[i] & 0x80 >> j)
LCD_DrawPoint(x + j,y + i,Font_color);//字的顏色
else?
{
if(!(Font_MODE & 0x80))//非疊加顯示
LCD_DrawPoint(x + j,y + i,Back_color);//背景顏色
}
}
}
}
/*************************************************************************************************************************
* 函數(shù) :
void Show_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 MODE)
* 功能 :
在指定位置顯示ASCII字符串?
* 參數(shù) :
開始坐標(biāo),字符串,字體顏色,背景顏色,顯示模式以及字體,
* 返回 :
無
* 依賴 :
void Show_Char(u16 x,u16 y,char *p,u16 Font_color,u16 Back_color,u8 MODE);//單個字符顯示函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : Font_最高位為1表示疊加顯示,其它位用來選擇字體
*************************************************************************************************************************/
void Show_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE)
{
? while(*p != 0x00)//判斷是否到達(dá)字符串結(jié)尾
{
if(x > 231)//判斷是否需要換行
{
x = 0;
y += 16;
}
if (*p == 'n')
{
y += 16;
x = 0;
p ++;
}
LCD_Char(x,y,p,Font_color,Back_color,Font_MODE);
p ++;
x += 8;
}
}
/*************************************************************************************************************************
* 函數(shù) :
void LCD_China(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE)
* 功能 :
在指定位置顯示一個漢字指定大小的漢字?
* 參數(shù) :
開始坐標(biāo),漢字點陣數(shù)組位置,字體顏色,背景顏色,顯示模式以及字體,
* 返回 :
無
* 依賴 :
畫點函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : Font_最高位為1表示疊加顯示,其它位用來選擇字體高度
*************************************************************************************************************************/
void LCD_China(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE)
{
u8 i,j;
u8 fhl;//字寬高
fhl = FONT_H[Font_MODE & 0x7f];
if(Font_MODE & 0x80)//疊加顯示
{
for(i = 0;i < fhl;i ++)
{
for(j = 0;j < 8;j ++)
{
if(*p & 0x80 >> j)
LCD_DrawPoint(x + j,y + i,Font_color);//字的顏色
}
p ++;
for(j = 0;j < fhl - 8;j ++)
{
if(*p & 0x80 >> j)
LCD_DrawPoint(x + j + 8,y + i,Font_color);//字的顏色
}
p ++;
}
}
else //非疊加顯示
{
for(i = 0;i < fhl;i ++)
{
for(j = 0;j < 8;j ++)
{
if(*p & 0x80 >> j)
LCD_DrawPoint(x + j,y + i,Font_color);//字的顏色
else
LCD_DrawPoint(x + j,y + i,Back_color);//背景顏色
}
p ++;
for(j = 0;j < fhl - 8;j ++)
{
if(*p & 0x80 >> j)
LCD_DrawPoint(x + j + 8,y + i,Font_color);//字的顏色
else
LCD_DrawPoint(x + j + 8,y + i,Back_color);//背景顏色
}
p ++;
}
} ?
}
/*************************************************************************************************************************
* 函數(shù) :
void LCD_Fill(u16 xStart, u16 xEnd, u16 yStart, u16 yEnd,u16 color)
* 功能 :
指定位置填充顏色
* 參數(shù) :
位置坐標(biāo),顏色值
* 返回 :
無
* 依賴 :
底層函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : 無
*************************************************************************************************************************/
void LCD_Fill(u16 xStart, u16 xEnd, u16 yStart, u16 yEnd,u16 color)
{
? u16 i,j;
?
for(i = yStart;i < yEnd + 1; i ++)
{
for(j = xStart;j < xEnd + 1;j ++)
{
LCD_DrawPoint(j,i,color);
}
}
}
/*************************************************************************************************************************
* 函數(shù) :
void Draw_Circle(u16 x0,u16 y0,u8 r)
* 功能 :
畫圓函數(shù)
* 參數(shù) :
圓心坐標(biāo),半徑
* 返回 :
無
* 依賴 :
畫點函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : 無
*************************************************************************************************************************/
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color)
{
int a = 0,b = r;
int di;
di = 3 -(r << 1); ? ? ? ? ? ? //判斷下個點位置的標(biāo)志
// LCD_DrawPoint(x0,y0,color); ? ? ? ? ? ? //中心?
while(a <= b)
{
LCD_DrawPoint(x0 - b,y0 - a,color); ? ? ? ? ? ? //3 ? ? ? ? ??
LCD_DrawPoint(x0 + b,y0 - a,color); ? ? ? ? ? ? //0 ? ? ? ? ??
LCD_DrawPoint(x0 - a,y0 + b,color); ? ? ? ? ? ? //1 ? ? ??
LCD_DrawPoint(x0 - b,y0 - a,color); ? ? ? ? ? ? //7 ? ? ? ? ??
LCD_DrawPoint(x0 - a,y0 - b,color); ? ? ? ? ? ? //2 ? ? ? ? ? ??
LCD_DrawPoint(x0 + b,y0 + a,color); ? ? ? ? ? ? //4 ? ? ? ? ? ? ??
LCD_DrawPoint(x0 + a,y0 - b,color); ? ? ? ? ? ? //5
LCD_DrawPoint(x0 + a,y0 + b,color); ? ? ? ? ? ? //6?
LCD_DrawPoint(x0 - b,y0 + a,color); ? ? ? ? ? ? //
a ++;
//使用Bresenham算法畫圓 ? ??
if(di<0)
di += 4 * a + 6;?
??
else
{
di += 10 + 4 * (a - b); ??
b --;
} ?
} ?
}
?
/*************************************************************************************************************************
* 函數(shù) :
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
* 功能 :
畫線函數(shù)
* 參數(shù) :
起點終點坐標(biāo)
* 返回 :
無
* 依賴 :
畫點函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : 無
*************************************************************************************************************************/?
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
{
u16 t;?
int xerr=0,yerr=0,delta_x,delta_y,distance;?
int incx,incy,uRow,uCol;
//TFT_LCD_SetRamAddr(0,239,0,319);//設(shè)置顯示窗口?
delta_x=x2-x1; //計算坐標(biāo)增量?
delta_y=y2-y1;?
uRow=x1;?
uCol=y1;?
if(delta_x>0)incx=1; //設(shè)置單步方向?
else if(delta_x==0)incx=0;//垂直線?
else {incx=-1;delta_x=-delta_x;}?
if(delta_y>0)incy=1;?
else if(delta_y==0)incy=0;//水平線?
else{incy=-1;delta_y=-delta_y;}?
if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標(biāo)軸?
else distance=delta_y;?
for(t=0;t<=distance+1;t++ )//畫線輸出?
{ ?
LCD_DrawPoint(uRow,uCol,color);//畫點?
xerr+=delta_x ;?
yerr+=delta_y ;
if(xerr>distance)?
{?
xerr-=distance;?
uRow+=incx;?
}?
if(yerr>distance)?
{?
yerr-=distance;?
uCol+=incy;?
}?
} ?
}
??
/*************************************************************************************************************************
* 函數(shù) :
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
* 功能 :
在指定位置畫一個矩形
* 參數(shù) :
多邊形的兩個坐標(biāo)
* 返回 :
無
* 依賴 :
畫線函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : 無
*************************************************************************************************************************/
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
{
LCD_DrawLine(x1,y1,x2,y1,color);
LCD_DrawLine(x1,y1,x1,y2,color);
LCD_DrawLine(x1,y2,x2,y2,color);
LCD_DrawLine(x2,y1,x2,y2,color);
} ? ?
/*************************************************************************************************************************
* 函數(shù) :
void Draw_Big_Point(u8 x,u16 y,u16 color)
* 功能 :
畫一個2*2的大點
* 參數(shù) :
點的中心坐標(biāo)
* 返回 :
無
* 依賴 :
畫點函數(shù)
* 作者 :
陳鵬
* 時間 :
20110920
* 最后修改時間 : 20110920
* 說明 : 無
*************************************************************************************************************************/??
void Draw_Big_Point(u8 x,u16 y,u16 color)
{
//TFT_LCD_SetRamAddr(0,239,0,319); ? ??
LCD_DrawPoint(x,y,color);//中心點?
LCD_DrawPoint(x+1,y,color);
LCD_DrawPoint(x,y+1,color);
LCD_DrawPoint(x+1,y+1,color);?
}
//TFT_LCD.H
/*************************************************************************************************************
?* 文件名: TFT_LCD.c
?* 功能: S3C6410 TFT_LCD底層驅(qū)動函數(shù)
?* 作者: 陳鵬
?* 創(chuàng)建時間: 2012年3月11日15:46
?* 最后修改時間:2012年5月6日
?* 詳細(xì): TFT_LCD初始化以及相關(guān)繪圖函數(shù)
*************************************************************************************************************/
#ifndef _TFT_LCD_H_
#define _TFT_LCD_H_
#include"s3c6410_system.h"
//常見顏色
#define BLACK
0X000000
#define BLUE
0X0000FF
#define GREEN
0X008000
#define CYAN
0X00FFFF
#define PURPLE0X800080
#define SKYBLUE0X87CEEB
#define BLOWN
0XA52A2A
#define SILVER0XC0C0C0
#define RED
0XFF0000
#define PINK
0XFFC0CB
#define GOLD
0XFFD700
#define YELLOW0XFFFF00
#define WHITE
0XFFFFFF
//RGB888,轉(zhuǎn)RGB565
#define ToRGB565(x) ((((x >> 16) & 0xff) >> 3) << 11) | ((((x >> 8) & 0xff) >> 2) << 5) | ((x & 0xff) >> 3)
void LCD_Init(void);
void LCD_ClearScreen(u16 Color);
void LCD_DrawPoint(u16 x,u16 y,u16 Color);
void LCD_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE);
void Show_Char(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE);
void Draw_Big_Point(u8 x,u16 y,u16 color);//畫一個2*2的大點
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);//在指定位置畫一個矩形
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);//畫線函數(shù)
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);//畫圓函數(shù)
void LCD_Fill(u16 xStart, u16 xEnd, u16 yStart, u16 yEnd,u16 color);//指定位置填充顏色
void LCD_China(u16 x,u16 y,const u8 *p,u16 Font_color,u16 Back_color,u8 Font_MODE);//在指定位置顯示一個漢字指定大小的漢字?
#endif
//最終效果圖