參數(shù)配置:
開發(fā)板型號TX2440; 一個像素點采用16位表示; LCD屏幕分辨率 480*272; 液晶模塊型號:BL43014_SPEC;圖像的內(nèi)容以C語言數(shù)組的形式保存在bmp.c文件中。
/*
*版權(quán)所有(C)2015,ZJU
*
*文件名稱:lcd.c
*內(nèi)容摘要:關(guān)于lcd的配置
*其它說明:開發(fā)板型號: TX2440
* led顯示尺寸 480 x 272
液晶模塊型號:BL43014_SPEC
*當前版本:V1.0
*作 者:Frank
*完成日期:2015.12.20
*
*/
#define GPCCON (*(volatile unsigned long *)0x56000020)
#define GPDCON (*(volatile unsigned long *)0x56000030)
#define GPGCON (*(volatile unsigned long *)0x56000060)
//LCD控制寄存器定義
#define LCDCON1 (*(volatile unsigned long *)0x4D000000)
#define LCDCON2 (*(volatile unsigned long *)0x4D000004)
#define LCDCON3 (*(volatile unsigned long *)0x4D000008)
#define LCDCON4 (*(volatile unsigned long *)0x4D00000C)
#define LCDCON5 (*(volatile unsigned long *)0x4D000010)
#define LCDSADDR1 (*(volatile unsigned long *)0x4D000014)
#define LCDSADDR2 (*(volatile unsigned long *)0x4D000018)
#define LCDSADDR3 (*(volatile unsigned long *)0x4D00001C)
#define TPAL (*(volatile unsigned long *)0x4D000050)
/*以下宏定義的值參考所使用的LCD液晶模塊的芯片手冊*/
#define VSPW 9
#define VBPD 7
#define LINEVAL 271
#define VFPD 7
#define CLKVAL 4 // 10 = 100 / ((CLKVAL+1)*2)
#define HSPW 40
#define HBPD 39
#define HOZVAL 479
#define HFPD 4
unsigned short LCDBUFFER[272][480]; //定義一個LCD圖像緩存空間
extern unsigned char bmp[90200];
typedef unsigned char U8;
typedef unsigned short int U16;
typedef unsigned int U32;
/*******************************************************************
*函數(shù)名稱:Lcd_Port_Init()
*功能描述:LCD端口初始化
*其他說明:配置LCD用到的GPIO端口
*創(chuàng)建日期:2015.12.20
*******************************************************************/
void Lcd_Port_Init(void)
{
GPDCON = 0xaaaaaaaa;
GPCCON = 0xaaaaaaaa;
}
/*******************************************************************
*函數(shù)名稱:Lcd_Control_Init()
*功能描述:LCD控制寄存器初始化
*其他說明:配置LCD用到的控制寄存器
*創(chuàng)建日期:2015.12.20
*******************************************************************/
void Lcd_Control_Init(void)
{
LCDCON1 = (CLKVAL << 8) | (0x3 << 5) | (0xC << 1) | (0 << 0);
LCDCON2 = (VBPD << 24) | (LINEVAL << 14) | (VFPD << 6) | (VSPW);
LCDCON3 = (HBPD << 19) | (HOZVAL << 8) | (HFPD);
LCDCON4 = HSPW;
// LCDCON5 = (1 << 11) | (1 << 9) | (1 << 8) | (1 << 0);
LCDCON5 = (1 << 11) | (1 << 9) | (1 << 8);
LCDSADDR1 = (((unsigned int)LCDBUFFER >> 22) << 21) | (((unsigned int)LCDBUFFER >> 1) & 0x1fffff);
LCDSADDR2 = (((unsigned int)LCDBUFFER + 272*480*2) >> 1) & 0x1fffff;
LCDSADDR3 = (0 << 11) | (480*2 / 2);
TPAL = 0;
}
/*******************************************************************
*函數(shù)名稱:Lcd_Init()
*功能描述:LCD初始化
*其他說明:
*創(chuàng)建日期:2015.12.20
*******************************************************************/
void Lcd_Init()
{
Lcd_Port_Init();
Lcd_Control_Init();
/*打開LCD電源*/
GPGCON |= (0x3 << 8);
LCDCON5 |= (1 << 3);
/*使能LCD控制器*/
LCDCON1 |= 1;
}
/*******************************************************************
*函數(shù)名稱:point()
*功能描述:在lcd上畫一個點
*其他說明:
*創(chuàng)建日期:2015.12.20
*******************************************************************/
void Point(unsigned int x, unsigned int y, unsigned int color)
{
unsigned int red, green, blue;
red = (color >> 19) & 0x1f;
green = (color >> 10) & 0x3f;
blue = (color >> 3) & 0x1f;
/*采用5:6:5的模式表示一個RGB*/
LCDBUFFER[y][x] = (unsigned short)((red << 11) | (green << 5) | blue);
}
/*******************************************************************
*函數(shù)名稱:Paint_Bmp(U16,U16,U16,U16,U8)
*功能描述:LCD顯示一幅圖像
*輸入?yún)?shù):(x0,y0)圖像顯示第一個點的坐標; high圖像的高度
wide圖像的寬度; bmp存儲圖像的數(shù)組
*其他說明:
*創(chuàng)建日期:2015.12.20
*******************************************************************/
void Paint_Bmp(U16 x0, U16 y0, U16 wide, U16 high, const U8 *bmp)
{
unsigned short x, y;
unsigned short c;
unsigned int p = 0;
for (y=y0; y for (x=x0; x c = bmp[p] | (bmp[p+1]<<8); /*一個像素點由16位表示,bmp[p] 表示低8位,bmp[p+1]表示高8位*/ if ((x<480) && (y<272)) { LCDBUFFER[y][x] = c; } p = p + 2; } } } /******************************************************************* *函數(shù)名稱:Lcd_Test() *功能描述:LCD測試函數(shù) *其他說明: *創(chuàng)建日期:2015.12.20 *******************************************************************/ void Lcd_Test(void) { int x; /* for (x=0; x<480; ++x) { Point(x++, 150, 0xff0000); } */ Paint_Bmp(0,0,220,220,bmp); } 需要注意的幾點: 1、宏定義的值需要參考使用的LCD液晶模塊的芯片手冊(TX2440使用的LCD是BL43014_SPEC) 圖1 BL43014_SPEC Input Time Table 2、液晶模塊的Vsync和Hsync的時序與S3C2440芯片手冊上的相反,所以LCDCON5中bit8和bit9需要設置為1。 圖2 BL43014_SPEC Vertical Input Timing 圖3 TFT LCD Timing Example( S3C2440 Datasheet)
上一篇:S3C2440電阻觸摸屏驅(qū)動設計
下一篇:最后一頁
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- Genesys Cloud助力SITA,讓航旅客戶有更好的體驗
- 5G 毫米波技術(shù)展現(xiàn)超凡能力,為多個行業(yè)帶來新希望
- 疫情讓自動駕駛產(chǎn)業(yè)發(fā)生巨變
- 立訊精密收購緯創(chuàng)2家子公司:或威脅富士康iPhone代工龍頭地位
- CHIPS聯(lián)盟發(fā)布AIB 2.0規(guī)范
- 索尼手機回應不會放棄:坐等5G時代到來
- 谷歌Pixel 3手機曝光:預裝Android P系統(tǒng)
- 價值十萬塊的黃金版Apple Watch:蘋果給淘汰了
- 庫克:隱私問題已經(jīng)失控,自己也沉迷于手機
- 夸大宣傳吹過頭 聯(lián)想Z5也做不到“真全面屏”