?? lcd_driver_user.c
字號:
//========================================================================
// 文件名: LCD_Driver_User.c
// 作 者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
// www.Mzdesign.com.cn
// 日 期: 2008/06/11
// 描 述: 底層接口驅動擴展程序集
//
// 參 考: 請參考具體顯示器的硬件描述說明書或者是DataSheet,并以此來編寫底
// 層接口驅動程序,以及LCD的初始化代碼
// 版 本:
// 2007/02/25 First version Mz Design
// 2008/06/11 V2.0 Mzdesign
// 注 意:
// 該驅動程序當中有很多已經被屏蔽掉的子程序,用戶可根據自己的應用
// 取消屏障并作一定的修改(如果可能的話)
// 該文件與LCD的特性有關,為MzDesign通用版LCD驅動的V2.0版本,內含的
// 函數是標準的函數,每款LCD對應的通用版LCD驅動程序包都是一樣的,只
// 是會針對不同的LCD模塊會有一些區別,用戶可以參考我們介紹V1.0版本
// 驅動的書<LCD驅動顯控原理>.
// 相 關: 本例為針對MzDesign的MzT24 320X240點TFT屏作的移植改去,適用于NXP
// 的LPC21XX以及LPC22XX系列ARM7
//========================================================================
#include "LCD_Config.h"
#include "LCD_PortConfig.h"
//========================================================================
// 函數: void LCD_DataWrite(unsigned int Data)
// 描述: 寫一個字節的顯示數據至LCD中的顯示緩沖RAM當中
// 參數: Data 寫入的數據
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
//========================================================================
/*
void LCD_DataWrite(LCDBYTE Dat)
{
LCD_A0_SET();
LCD_Ctrl_Clr(LCD_RW|LCD_EP|LCD_CS);
LCD_Data_BUS_Clr();
LCD_Data_BUS_Set(Dat);
LCD_EP_SET();
LCD_EP_CLR(); //
LCD_CS_SET();
} */
//========================================================================
// 函數: LCDBYTE LCD_DataRead(void)
// 描述: 從LCD中的顯示緩沖RAM當中讀一個字節的顯示數據
// 參數: 無
// 返回: 讀出的數據,
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
// 注意:
//========================================================================
LCDBYTE LCD_DataRead(void)
{
LCDBYTE Read_Data;
Read_Data = LCD_DAT_R;
Read_Data = LCD_DAT_R;
Read_Data = ((LCDBYTE)LCD_DAT_R)<<8;
Read_Data |= LCD_DAT_R;
return Read_Data;
}
//========================================================================
// 函數: void LCD_RegWrite(LCDBYTE Command)
// 描述: 寫一個字節的數據至LCD中的控制寄存器當中
// 參數: Command 寫入的數據,低八位有效(byte)
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
//========================================================================
/*
void LCD_RegWrite(LCDBYTE Command)
{
LCD_Ctrl_Clr(LCD_A0|LCD_RW|LCD_EP|LCD_CS);
LCD_Data_BUS_Clr();
LCD_Data_BUS_Set(Command);
LCD_EP_SET();
LCD_EP_CLR(); //
LCD_CS_SET();
} */
//========================================================================
// 函數: LCDBYTE LCD_ReadStatus(void)
// 描述: 讀取LCD模塊的指定狀態位
// 參數: 無
// 返回: 讀取到的狀態位
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
//========================================================================
LCDBYTE LCD_ReadStatus(void)
{
return 1;
}
//========================================================================
// 函數: void LCD_TestStatus(LCDBYTE bitMatch)
// 描述: 測試LCD模塊的指定狀態位
// 參數: bitMatch
// 返回: 如測試有效則返回1 如超時則返回0
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
//========================================================================
LCDBYTE LCD_TestStatus(LCDBYTE bitMatch)
{
return 1; //return 1 as test status bit ok
}
//========================================================================
// 函數: void Write_Dot_LCD(int x,int y,unsigned int i)
// 描述: 在LCD的真實坐標系上的X、Y點繪制填充色為i的點
// 參數: x X軸坐標
// y Y軸坐標
// i 要填充的點的顏色
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void Write_Dot_LCD(DOTBYTE x,DOTBYTE y,LCDBYTE i)
{
LCD_RegWrite(0x20);
LCD_DataWrite(x);
LCD_RegWrite(0x21);
LCD_DataWrite(y);
LCD_RegWrite(0x22);
LCD_DataWrite(i);
}
/*
//========================================================================
// 函數: void Clear_Dot_LCD(WORD x,WORD y)
// 描述: 清除在LCD的真實坐標系上的X、Y點
// 參數: x X軸坐標
// y Y軸坐標
// 返回: 無
// 備注: 暫不使用該函數
// 版本:
// 2006/10/15 First version
//========================================================================
void Clear_Dot_LCD(WORD x,WORD y)
{
//可根據自己的需要填寫代碼
x = y; //無意義,僅為了讓系統不提示警告
} */
//========================================================================
// 函數: unsigned int Get_Dot_LCD(int x,int y)
// 描述: 獲取在LCD的真實坐標系上的X、Y點上的當前填充色數據
// 參數: x X軸坐標
// y Y軸坐標
// 返回: 該點的顏色
// 備注: 暫不使用該函數
// 版本:
// 2006/10/15 First version
//========================================================================
LCDBYTE Get_Dot_LCD(DOTBYTE x,DOTBYTE y)
{
LCDBYTE Read_Data;
//可根據自己的需要填寫代碼
LCD_RegWrite(0x20);
LCD_DataWrite(x);
LCD_RegWrite(0x21);
LCD_DataWrite(y);
LCD_RegWrite(0x22);
Read_Data = LCD_DataRead(); //
return Read_Data;
}
//========================================================================
// 函數: void Set_Dot_Addr_LCD(int x,int y)
// 描述: 設置在LCD的真實坐標系上的X、Y點對應的RAM地址
// 參數: x X軸坐標
// y Y軸坐標
// 返回: 無
// 備注: 僅設置當前操作地址,為后面的連續操作作好準備
// Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void Set_Dot_Addr_LCD(DOTBYTE x,DOTBYTE y)
{
LCD_RegWrite(0x20);
LCD_DataWrite(x);
LCD_RegWrite(0x21);
LCD_DataWrite(y);
LCD_RegWrite(0x22);
}
//========================================================================
// 函數: void LCD_Fill_s(WORD Number,LCDBYTE Color)
// 描述: 連續填充以Color色調的Number個點
// 參數: Number 填充的數量 Color 像素點的顏色
// 返回:
// 備注: 該函數可能會使用到
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void LCD_Fill_s(WORD Number,LCDBYTE Color)
{
while(Number!=0)
{
LCD_DataWrite(Color);
Number--;
}
}
//========================================================================
// 函數: void LCD_Fill(unsigned int Data)
// 描述: 會屏填充以Data的數據至各點中
// 參數: Data 要填充的顏色數據
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void LCD_Fill(LCDBYTE Data)
{
DOTBYTE i,j=0;
DOTBYTE uiTemp;
uiTemp = (unsigned int)Dis_Y_MAX;
Set_Dot_Addr_LCD(0,0);
for(i=0;i<=uiTemp;i++) //往LCD中填充初始化的顯示數據
{
for(j=0;j<=Dis_X_MAX;j++)
{
LCD_DAT_W = (unsigned char)(Data>>8);
LCD_DAT_W = (unsigned char)Data;
}
}
}
//========================================================================
// 函數: void LCD_PortInit(void)
// 描述: 與LCD連接的端口初始化代碼
// 參數: 無
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2007/01/09 First version
// 注意:
//========================================================================
void LCD_PortInit(void)
{
BCFG2 = 0x00000440;
PINSEL2 = 0x0fe041c4;
LCD_Ctrl_GPIO();
}
//========================================================================
// 函數: void LCD_Init(void)
// 描述: LCD初始化程序,在里面會完成LCD初始所需要設置的許多寄存器,具體如果
// 用戶想了解,建議查看DataSheet當中各個寄存器的意義
// 參數: 無
// 返回: 無
// 備注: Mz 通用版LCD驅動程序 標準子函數
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
//延時程序
void TimeDelay(WORD Time)
{
WORD i;
while(Time > 0)
{
for(i = 0;i < 800;i++)
{
;//__asm("nop");
}
Time --;
}
}
unsigned short LCD_IndexAuto=0;
void LCD_Init(void)
{
//LCD驅動所使用到的端口的初始化
LCD_PortInit();
//根據LCD顯示的配置,設置LCD的數據地址指針自動增加特性
if(LCD_XY_Switch==1)
{
LCD_IndexAuto |= 0x0008;
if(LCD_X_Rev==0)
LCD_IndexAuto |= 0x0020;
else
LCD_IndexAuto &= ~0x0020;
if(LCD_Y_Rev==0)
LCD_IndexAuto |= 0x0010;
else
LCD_IndexAuto &= ~0x0010;
}
else
{
LCD_IndexAuto &= ~0x0008;
if(LCD_X_Rev==0)
LCD_IndexAuto |= 0x0010;
else
LCD_IndexAuto &= ~0x0010;
if(LCD_Y_Rev==0)
LCD_IndexAuto |= 0x0020;
else
LCD_IndexAuto &= ~0x0020;
}
LCD_IndexAuto |= 0x1100;
//end
LCD_RE_CLR();
TimeDelay(200);
LCD_RE_SET();
TimeDelay(20);
LCD_RegWrite(0x01);
LCD_DataWrite(0x0100); //Driver Output Contral Register
LCD_RegWrite(0x02);
LCD_DataWrite(0x0700); //0x0701 //LCD Driving Waveform Contral
LCD_RegWrite(0x03);
LCD_DataWrite(LCD_IndexAuto);//0x1030); //Entry Mode設置
//指針從左至右自上而下的自動增模式
//Normal Mode(Window Mode disable)
//RGB格式
//16位數據2次傳輸的8總線設置
LCD_RegWrite(0x04);
LCD_DataWrite(0x0000); //Scalling Control register
LCD_RegWrite(0x08);
LCD_DataWrite(0x0207); //Display Control 2
LCD_RegWrite(0x09);
LCD_DataWrite(0x0000); //Display Control 3
LCD_RegWrite(0x0A);
LCD_DataWrite(0x0000); //Frame Cycle Control
LCD_RegWrite(0x0C);
LCD_DataWrite(0x0000); //External Display Interface Control 1
LCD_RegWrite(0x0D);
LCD_DataWrite(0x0000); //Frame Maker Position
LCD_RegWrite(0x0F);
LCD_DataWrite(0x0000); //External Display Interface Control 2
TimeDelay(20);
LCD_RegWrite(0x07);
LCD_DataWrite(0x0101); //Display Control
TimeDelay(20);
LCD_RegWrite(0x10);
LCD_DataWrite(0x16B0); //0x14B0 //Power Control 1
LCD_RegWrite(0x11);
LCD_DataWrite(0x0001); //0x0007 //Power Control 2
LCD_RegWrite(0x17);
LCD_DataWrite(0x0001); //0x0000 //Power Control 3
LCD_RegWrite(0x12);
LCD_DataWrite(0x0138); //0x013B //Power Control 4
LCD_RegWrite(0x13);
LCD_DataWrite(0x0800); //0x0800 //Power Control 5
LCD_RegWrite(0x29);
LCD_DataWrite(0x0009); //NVM read data 2
LCD_RegWrite(0x2a);
LCD_DataWrite(0x0009); //NVM read data 3
LCD_RegWrite(0xa4);
LCD_DataWrite(0x0000);
LCD_RegWrite(0x50);
LCD_DataWrite(0x0000); //設置操作窗口的X軸開始列
LCD_RegWrite(0x51);
LCD_DataWrite(0x00EF); //設置操作窗口的X軸結束列
LCD_RegWrite(0x52);
LCD_DataWrite(0x0000); //設置操作窗口的Y軸開始行
LCD_RegWrite(0x53);
LCD_DataWrite(0x013F); //設置操作窗口的Y軸結束行
LCD_RegWrite(0x60);
LCD_DataWrite(0xA700); //Driver Output Control
//設置屏幕的點數以及掃描的起始行
LCD_RegWrite(0x61);
LCD_DataWrite(0x0001); //Driver Output Control
LCD_RegWrite(0x6A);
LCD_DataWrite(0x0000); //Vertical Scroll Control
LCD_RegWrite(0x80);
LCD_DataWrite(0x0000); //Display Position – Partial Display 1
LCD_RegWrite(0x81);
LCD_DataWrite(0x0000); //RAM Address Start – Partial Display 1
LCD_RegWrite(0x82);
LCD_DataWrite(0x0000); //RAM address End - Partial Display 1
LCD_RegWrite(0x83);
LCD_DataWrite(0x0000); //Display Position – Partial Display 2
LCD_RegWrite(0x84);
LCD_DataWrite(0x0000); //RAM Address Start – Partial Display 2
LCD_RegWrite(0x85);
LCD_DataWrite(0x0000); //RAM address End – Partail Display2
LCD_RegWrite(0x90);
LCD_DataWrite(0x0013); //Frame Cycle Control
LCD_RegWrite(0x92);
LCD_DataWrite(0x0000); //Panel Interface Control 2
LCD_RegWrite(0x93);
LCD_DataWrite(0x0003); //Panel Interface control 3
LCD_RegWrite(0x95);
LCD_DataWrite(0x0110); //Frame Cycle Control
// LCD_RegWrite(0x0097,0x0000);
// LCD_RegWrite(0x0098,0x0000);
// LCD_RegWrite(0x00F0,0x5408);
// LCD_RegWrite(0x00F4,0x0077);
// LCD_RegWrite(0x00F3,0x000c);
LCD_RegWrite(0x07);
LCD_DataWrite(0x0173);
LCD_Fill(LCD_INITIAL_COLOR);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -