自己用的LPC1768的開板帶有一塊2.4寸的TFT彩色液晶屏,雖然自己工作中還用不過顯示屏,但是晚上閑著也是閑著,于是繼續玩咱的LPC1768吧。
我的開發板上的液晶屏的用的是SPI接口,當然你也可以把它設計成并行口,其接口電路如下所示: 話說這個液晶屏的驅動芯片是ILI9325,在網上下載了該芯片的數據手冊,好家伙有111頁,全是E文呀,沒辦法,誰讓咱是小電工呢,就慢慢啃吧。ILI9325這個芯片的寄存器比較多,不過沒關系,我們暫時用到的不是太多,這里只要簡要的總結,剩下的還是日后用到了再好好研究吧。 1、寄存器03H(Entry Mode),該寄存器主要設置圖像的顯示模式,包括屏幕的掃描方式(水平掃描或垂直掃描),這直接影響到img2lcd軟件(這是個取模軟件)的掃描方式控制項。 2、寄存器04H(Resizing Control Register)重新調整大小 寄存器,通過配置該寄存器,可以調整所顯示圖片的大小。 3、寄存器07H(Display Control 1),配置該寄存器可打開或關閉圖形。 4、水平和垂直位置的RAM地址(R50h,R51h,R52h,R53h) 看手冊上寄存器不少,不過控制方式不一樣,所用到的寄存器不一樣,這里不再列舉寄存器,想做驅動,一定要看芯片的手冊,而且一定要仔細的研究它的手冊。話說寫液晶驅動不顯示圖片什么的貌似對不起LCD,當然這次懶貓這次寫的驅動也有圖片顯示,想圖片顯示當然少不了取模軟件,懶貓這次用的取模軟件是img2lcd,這個軟件功能不錯,用起來也比較簡單,如果不會用可以查看一下它自帶的幫助文件。 注意:LCD的配置方式不同,所設置的掃描方式也不同。 好了,貼上咱寫的這個驅動; - /********************************************************************************
- * 函數名稱 :GLCD_clear (unsigned short color)
- * 函數描述 : 清屏
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注:
- *******************************************************************************/
- void GLCD_clear (unsigned short color)
- {
- unsigned int i;
-
- wr_reg(0x20, 0); // 1st line GRAM Data(AD0-AD7)
- wr_reg(0x21, 0); // 1st line GRAM Data(AD8-AD16)
- wr_cmd(0x22);
- for(i = 0; i < (WIDTH*HEIGHT); i++){
- wr_dat(color); // Set color of background
- }
- }
-
- /********************************************************************************
- * 函數名稱 :void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w,
- * unsigned int h, unsigned char *bitmap)
- * 函數描述 : 顯示圖片
- * 入口參數 : unsigned int x -- Vertical GRAM Start Address
- * unsigned int y -- Horizontal GRAM Start Address
- * unsigned int w -- The width of picture
- * unsigned int h -- The high of picture
- * unsigned char *bitmap -- The array which store picture
- * 出口參數 : 無
- * 備 注:
- *******************************************************************************/
- void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap)
- {
- unsigned int i;
- unsigned int len = w*h; /* 數組長度 = 圖片的width*high(注:元素是16位的) */
-
- /* 用Img2Lcd這個軟件生成的數組是char型的(元素是8位的),需轉換成short型(元素是16位的) */
- unsigned short *bitmap_ptr = (unsigned short *)bitmap;
-
- wr_reg(0x50, y); /* 水平GRAM起始地址 */
- wr_reg(0x51, y+h-1); /* 水平GRAM結束地址(-1) */
- wr_reg(0x52, x); /* 垂直GRAM起始地址 */
- wr_reg(0x53, x+w-1); /* 垂直GRAM結束地址(-1) */
-
- wr_reg(0x20, y); /* GRAM水平垂直地址設置 */
- wr_reg(0x21, x);
-
- wr_cmd(0x22); /* 寫數據到GRAM,AC自動加 */
- for (i = 0; i < len; i++) { /* 開始寫數據 */
- wr_dat(*bitmap_ptr++); /* 向GRAM寫入數據 */
- }
- }
復制代碼
glcd.c- /*********************************************************************************
- 文件名稱:GLCD.c
- 功 能: 關于ILI9325的一些函數
- 編譯環境: MDKV4.12
- 時 鐘: 外部12Mhz
- 日 期: 12/03/19
- 作 者: 懶貓愛飛
- 備 注:NULL
- ---------------------------------------------------------------------------------
- 修改內容:NULL
- 修改日期:XXXX年xx月xx日 xx時xx分
- 修改人員:xxx xxx xxx
-
- **********************************************************************************/
- #include "GLCD.inc"
- /********************************************************************************
- * 函數名稱 :__inline static void delay (int cnt)
- * 函數描述 : 簡短延時
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- __inline static void delay (int cnt) {
- cnt <<= DELAY_2N;
- while (cnt--);
- }
- /********************************************************************************
- * 函數名稱 :__inline void wr_cmd (unsigned char c)
- * 函數描述 : 通過ssp1向LCD寫命令
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- static __inline void wr_cmd (unsigned char cmd)
- {
- LCD_EN(); /* Enable ILI9325 */
- ssp_send(SSP_START | SSP_WR | SSP_INDEX); /* Write : RS = 0, RW = 0 */
- ssp_send(0);
- ssp_send(cmd); /* Send the command */
- LCD_DIS(); /* Disable ILI9325 */
- }
- /********************************************************************************
- * 函數名稱 :__inline void wr_dat (unsigned char dat)
- * 函數描述 : 通過ssp1向LCD寫數據
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- static __inline void wr_dat (unsigned short dat)
- {
- LCD_EN(); /* Enable ILI9325 */
- ssp_send(SSP_START | SSP_WR | SSP_DATA); /* Write : RS = 1, RW = 0 */
- ssp_send((dat >> 8)); /* Write D8..D15 */
- ssp_send((dat & 0xFF)); /* Write D0..D7 */
- LCD_DIS(); /* Disable ILI9325 */
- }
- /********************************************************************************
- * 函數名稱 :__inline unsigned short rd_dat (void)
- * 函數描述 : 通過ssp1讀取數據
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- static __inline unsigned short rd_dat (void)
- {
- unsigned short val = 0;
- LCD_EN(); /* Enable ILI9325 */
- ssp_send(SSP_START | SSP_RD | SSP_DATA); /* Read: RS = 1, RW = 1 */
- ssp_send(0); /* Dummy read */
- val = ssp_send(0); /* Read D8..D15 */
- val <<= 8;
- val |= ssp_send(0); /* Read D0..D7 */
- LCD_DIS(); /* Disable ILI9325 */
- return (val);
- }
- /********************************************************************************
- * 函數名稱 :__inline void wr_reg (unsigned char reg, unsigned short val)
- * 函數描述 : 通過ssp1向LCD寄存器寫數據
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- static __inline void wr_reg (unsigned char reg, unsigned short val)
- {
- wr_cmd(reg);
- wr_dat(val);
- }
- /********************************************************************************
- * 函數名稱 :unsigned short rd_reg (unsigned char reg)
- * 函數描述 : 通過ssp1從LCD寄存器讀取數據
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- static unsigned short rd_reg (unsigned char reg)
- {
- wr_cmd(reg);
- return (rd_dat());
- }
- /********************************************************************************
- * 函數名稱 :void GLCD_init (void)
- * 函數描述 : LCD初始化
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- void GLCD_init (void)
- {
- wr_reg(0xE3, 0x3008);
- wr_reg(0xE7, 0x0012);
- wr_reg(0xEF, 0x1231);
- /* 源掃描設置SS=0, 輸出的移動方向是從S1到S720
- * (源掃描設置SS=1, 輸出的移動方向是從S720到S1)
- * SM=0,逐行掃描(SM=1,隔行掃描)
- */
- wr_reg(0x00, 0x0001); /* Start internal OSC */
- wr_reg(0x01, 0x0100); /* Set SS and SM bit */
- wr_reg(0x02, 0x0700); /* Set 1 line inversion */
- wr_reg(0x03, 0x1030); /* GRAM為水平掃描方向(BGR=1) */
- //wr_reg(0x03, 0x1031); /* GRAM為垂直掃描方向(BGR=1) */
- wr_reg(0x04, 0x0000); /* Resize register */
- wr_reg(0x08, 0x0207); /* 2 lines each, back and front porch */
- wr_reg(0x09, 0x0000); /* Set non-disp area refresh cyc ISC */
- wr_reg(0x0A, 0x0000); /* FMARK function */
- wr_reg(0x0C, 0x0000); /* RGB interface setting */
- wr_reg(0x0D, 0x0000); /* Frame marker Position */
- wr_reg(0x0F, 0x0000); /* RGB interface polarity */
- /* Power On sequence -------------------------------------------------------*/
- wr_reg(0x10, 0x0000); /* Reset Power Control 1 */
- wr_reg(0x11, 0x0007); /* Reset Power Control 2 */
- wr_reg(0x12, 0x0000); /* Reset Power Control 3 */
- wr_reg(0x13, 0x0000); /* Reset Power Control 4 */
- delay(20); /* Discharge cap power voltage (200ms)*/
- wr_reg(0x10, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- wr_reg(0x11, 0x0227); /* DC1[2:0], DC0[2:0], VC[2:0] */
- delay(5); /* Delay 50 ms */
- wr_reg(0x12, 0x001B); /* VREG1OUT voltage */
- delay(5); /* Delay 50 ms */
- wr_reg(0x13, 0x1600); /* VDV[4:0] for VCOM amplitude */
- wr_reg(0x29, 0x0018); /* VCM[4:0] for VCOMH */
- wr_reg(0x2B, 0x000C);
- delay(5); /* Delay 50 ms */
- wr_reg(0x20, 0x0000); /* GRAM horizontal Address */
- wr_reg(0x21, 0x0000); /* GRAM Vertical Address */
-
- /* Adjust the Gamma Curve --------------------------------------------------*/
- wr_reg(0x30, 0x0000);
- wr_reg(0x31, 0x0404);
- wr_reg(0x32, 0x0304);
- wr_reg(0x35, 0x0005);
- wr_reg(0x36, 0x1604);
- wr_reg(0x37, 0x0304);
- wr_reg(0x38, 0x0303);
- wr_reg(0x39, 0x0707);
- wr_reg(0x3C, 0x0500);
- wr_reg(0x3D, 0x000F);
-
- /* Set GRAM area -----------------------------------------------------------*/
- wr_reg(0x50, 0x0000); /* Horizontal GRAM Start Address */
- wr_reg(0x51, (HEIGHT-1)); /* Horizontal GRAM End Address */
- wr_reg(0x52, 0x0000); /* Vertical GRAM Start Address */
- wr_reg(0x53, (WIDTH-1)); /* Vertical GRAM End Address */
- wr_reg(0x60, 0xA700); /* Gate Scan Line */
- wr_reg(0x61, 0x0001); /* NDL,VLE, REV */
- wr_reg(0x6A, 0x0000); /* Set scrolling line */
- /* Partial Display Control -------------------------------------------------*/
- wr_reg(0x80, 0x0000);
- wr_reg(0x81, 0x0000);
- wr_reg(0x82, 0x0000);
- wr_reg(0x83, 0x0000);
- wr_reg(0x84, 0x0000);
- wr_reg(0x85, 0x0000);
- /* Panel Control -----------------------------------------------------------*/
- wr_reg(0x90, 0x0010);
- wr_reg(0x92, 0x6000);
- // wr_reg(0x93, 0x0003);
- // wr_reg(0x95, 0x0110);
- // wr_reg(0x97, 0x0000);
- // wr_reg(0x98, 0x0000);
- /* Set GRAM write direction and BGR = 1
- I/D=10 (Horizontal : increment, Vertical : increment)
- AM=1 (address is updated in vertical writing direction) */
- wr_reg(0x03, 0x1038);
- wr_reg(0x07, 0x0133); /* 262K color and display ON */
- BACK_LIGHT_ON(); /* Turn backlight on */
- }
- /********************************************************************************
- * 函數名稱 :GLCD_clear (unsigned short color)
- * 函數描述 : 清屏
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- void GLCD_clear (unsigned short color)
- {
- unsigned int i;
- wr_reg(0x20, 0); // 1st line GRAM Data(AD0-AD7)
- wr_reg(0x21, 0); // 1st line GRAM Data(AD8-AD16)
- wr_cmd(0x22);
- for(i = 0; i < (WIDTH*HEIGHT); i++){
- wr_dat(color); // Set color of background
- }
- }
- /********************************************************************************
- * 函數名稱 :void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w,
- * unsigned int h, unsigned char *bitmap)
- * 函數描述 : 顯示圖片
- * 入口參數 : unsigned int x -- Vertical GRAM Start Address
- * unsigned int y -- Horizontal GRAM Start Address
- * unsigned int w -- The width of picture
- * unsigned int h -- The high of picture
- * unsigned char *bitmap -- The array which store picture
- * 出口參數 : 無
- * 備 注 :
- *******************************************************************************/
- void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap)
- {
- unsigned int i;
- unsigned int len = w*h; /* 數組長度 = 圖片的width*high(注:元素是16位的) */
- /* 用Img2Lcd這個軟件生成的數組是char型的(元素是8位的),需轉換成short型(元素是16位的) */
- unsigned short *bitmap_ptr = (unsigned short *)bitmap;
- wr_reg(0x50, y); /* 水平GRAM起始地址 */
- wr_reg(0x51, y+h-1); /* 水平GRAM結束地址(-1) */
- wr_reg(0x52, x); /* 垂直GRAM起始地址 */
- wr_reg(0x53, x+w-1); /* 垂直GRAM結束地址(-1) */
- wr_reg(0x20, y); /* GRAM水平垂直地址設置 */
- wr_reg(0x21, x);
- wr_cmd(0x22); /* 寫數據到GRAM,AC自動加 */
- for (i = 0; i < len; i++) { /* 開始寫數據 */
- wr_dat(*bitmap_ptr++); /* 向GRAM寫入數據 */
- }
- }
復制代碼
主程序:- /*********************************************************************************
- 工程名稱:lesson8
- 功 能: 學習使用TFT屏
- 編譯環境: MDKV4.12
- 時 鐘: 外部12Mhz
- 日 期: 12/04/12
- 作 者: 懶貓愛飛
- 版本 號:V1R0
- ---------------------------------------------------------------------------------
- 修改內容:NULL
- 修改日期:
- 修改人員:
- ---------------------------------------------------------------------------------
-
- **********************************************************************************/
- /*********************************************************************************
- 文件名稱:mian.c
- 功 能: 主要調度函數及應用函數
- 編譯環境: MDKV4.12
- 時 鐘: 外部12Mhz
- 日 期: 11/09/14
- 作 者: 懶貓愛飛
- 備 注:NULL
- ---------------------------------------------------------------------------------
- 修改內容:NULL
- 修改日期:XXXX年xx月xx日 xx時xx分
- 修改人員:xxx xxx xxx
-
- **********************************************************************************/
- #include"includes.h"
-
- /* 全局變量聲明 */
- /* 局部變量聲明 */
- unsigned char OpenString[][50] = {
- "**********************************************\r\n",
- "**** --歡迎光臨-- ****\r\n",
- "**** 小野獸的小草窩^_^ ****\r\n",
- "**** http://blog#ednchina#com/ytfdhb/ ****\r\n",
- "**** 我是懶貓愛飛,我的口號是: ****\r\n",
- "**** 每天進步一點點,開心多一點^_^ ****\r\n",
- "**********************************************\r\n"
- };
- unsigned short colortab[16] = {Black,Navy,DarkGreen,DarkCyan ,Maroon ,Purple,Olive,LightGrey ,
- DarkGrey,Blue,Green,Cyan,Red,Magenta,Yellow,White};
- /* 函數聲明 */
- void board_init(void); /* 系統初始始化 */
- /********************************************************************************
- * 函數名稱 :int main(void)
- * 函數功能 : 主函數
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :無
- *******************************************************************************/
- int main(void)
- {
- unsigned int i = 0;
- //unsigned char cnt = 0;
- board_init(); /* 系統初始化 */
- for(i=0;i<7;i++)
- {
- UARTSend(0,OpenString[i],50); /* 發送歡迎信息 */
- }
- GLCD_init();
- GLCD_clear(Red);
- DelayMs(500);
-
-
- //GLCD_bitmap ( 0, 0, 320, 128, ARM_Ani_16bpp_fh_fv);
- //GLCD_bitmap (30, 10, 259, 99, (unsigned char *)gImage_dd); // 已正確顯示
- //GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_love);
- //DelayMs(2000);
- //GLCD_clear(0x0000);
- //GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_great);
- //DelayMs(2000);
- //DelayMs(2000);
- while(1)
- {
- GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_great);
- DelayMs(5000);
- GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_love);
- DelayMs(5000);
- GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_butterfly);
- DelayMs(5000);
- //GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_beauty);
- //DelayMs(3000);
- //GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_hand);
- //DelayMs(3000);
- //GLCD_bitmap (0, 0, 320, 240, (unsigned char *)gImage_aether);
- //DelayMs(3000);
-
- }
- }
- /********************************************************************************
- * 函數名稱 :void board_init(void)
- * 函數功能 : 初始化系統
- * 入口參數 : 無
- * 出口參數 : 無
- * 備 注 :無
- *******************************************************************************/
- void board_init(void)
- {
- SystemInit(); /* 系統初始化,函數在system_LPC17xx.c文件夾中定義 */
- SysTick_init (); /* 配置節拍定時器中斷,每1ms中斷一次 */
-
- PortInit(); /* 端口初始化 */
- //DACInit(); /* DAC初始化 */
- //AdcInit(); /* ADCC初始化 */
- UARTInit(0,19200); /* 設置串口0波特率 */
- ssp_init();
- //init_ssp();
- }
復制代碼
由于原代碼比較多,這里只貼上部分函數,具體的代碼,請參考附件,這里上傳幾張效果圖,懶貓已把液晶屏顯示字符,顯示漢字,畫圓,畫線等的程序寫好了,改天整理一下也發上來,下一步弄一下SD卡,USB方面的東東,今天先寫這么多吧。
每天進步一點點,開心多一點^_^
完整程序源代碼工程文件下載地址:
21935.rar
(1.55 MB, 下載次數: 31)
2015-5-27 19:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|