天天看點

cortex_m3_stm32嵌入式學習筆記(十一):TFTLCD顯示(初涉顯示器)

本章我們将介紹 ALIENTEK 2.8 寸 TFT LCD 子產品,該子產品采用 TFTLCD 面闆,可以顯示 16 位色的真彩圖檔。

TFT-LCD 即薄膜半導體液晶顯示器。其英文全稱為: Thin Film Transistor-Liquid CrystalDisplay。 TFT-LCD 與無源 TN-LCD、 STN-LCD 的簡單矩陣不同,它在液晶顯示屏的每一個象素上都設定有一個薄膜半導體( TFT),可有效地克服非選通時的串擾,使顯示液晶屏的靜态特性與掃描線數無關,是以大大提高了圖像品質。 TFT-LCD 也被叫做真彩液晶顯示器。

特點: 1, 2.4’ /2.8’ /3.5’ /4.3’ /7’ 5 種大小的螢幕可選。

2, 320× 240 的分辨率( 3.5’ 分辨率為:320*480, 4.3’ 和 7’ 分辨率為: 800*480)。

3, 16 位真彩顯示。

4,自帶觸摸屏,可以用來作為控制輸入。

(我買的是2.8的屏) 。。接下來就是學習lcd庫了,我個人感覺我們應該把它當成一個庫來學。。(看了一下光lcd.c檔案就3000多行每次我們都自己寫不得累死。。)要掌握裡面的各種函數的用法,恩。。不是一朝一夕的事,今天就先貼一下lcd.h 主要是一堆庫函數的聲明

#ifndef __LCD_H
#define __LCD_H		
#include "sys.h"	 
#include "stdlib.h"
//LCD重要參數集
typedef struct  
{										    
	u16 width;			//LCD 寬度
	u16 height;			//LCD 高度
	u16 id;				//LCD ID
	u8  dir;			//橫屏還是豎屏控制:0,豎屏;1,橫屏。	
	u16	wramcmd;		//開始寫gram指令
	u16 setxcmd;		//設定x坐标指令
	u16  setycmd;		//設定y坐标指令	 
}_lcd_dev; 	  

//LCD參數
extern _lcd_dev lcddev;	//管理LCD重要參數
//LCD的畫筆顔色和背景色	   
extern u16  POINT_COLOR;//預設紅色    
extern u16  BACK_COLOR; //背景顔色.預設為白色


//-----------------LCD端口定義---------------- 
#define	LCD_LED PCout(10) 				//LCD背光    	PC10 

/*
#define	LCD_CS_SET  GPIOC->BSRR=1<<9    //片選端口  		PC9
#define	LCD_RS_SET	GPIOC->BSRR=1<<8    //資料/指令 		PC8	   
#define	LCD_WR_SET	GPIOC->BSRR=1<<7    //寫資料			PC7
#define	LCD_RD_SET	GPIOC->BSRR=1<<6    //讀資料			PC6
								    
#define	LCD_CS_CLR  GPIOC->BRR=1<<9     //片選端口  		PC9
#define	LCD_RS_CLR	GPIOC->BRR=1<<8     //資料/指令		PC8	   
#define	LCD_WR_CLR	GPIOC->BRR=1<<7     //寫資料			PC7
#define	LCD_RD_CLR	GPIOC->BRR=1<<6     //讀資料			PC6  
*/

#define	LCD_CS_SET  GPIO_SetBits(GPIOC,GPIO_Pin_9)    //片選端口  		PC9
#define	LCD_RS_SET	GPIO_SetBits(GPIOC,GPIO_Pin_8)    //資料/指令 		PC8	   
#define	LCD_WR_SET	GPIO_SetBits(GPIOC,GPIO_Pin_7)   //寫資料			PC7
#define	LCD_RD_SET	GPIO_SetBits(GPIOC,GPIO_Pin_6)   //讀資料			PC6
								    
#define	LCD_CS_CLR  GPIO_ResetBits(GPIOC,GPIO_Pin_9)    //片選端口  		PC9
#define	LCD_RS_CLR	GPIO_ResetBits(GPIOC,GPIO_Pin_8)     //資料/指令		PC8	   
#define	LCD_WR_CLR	GPIO_ResetBits(GPIOC,GPIO_Pin_7)     //寫資料			PC7
#define	LCD_RD_CLR	GPIO_ResetBits(GPIOC,GPIO_Pin_6)    //讀資料			PC6  



//PB0~15,作為資料線
//#define DATAOUT(x) GPIOB->ODR=x; //資料輸出
//#define DATAIN     GPIOB->IDR;   //資料輸入	

#define DATAOUT(x) GPIO_Write(GPIOB,x);
#define DATAIN   GPIO_ReadInputData(GPIOB)
 
//
//掃描方向定義
#define L2R_U2D  0 //從左到右,從上到下
#define L2R_D2U  1 //從左到右,從下到上
#define R2L_U2D  2 //從右到左,從上到下
#define R2L_D2U  3 //從右到左,從下到上

#define U2D_L2R  4 //從上到下,從左到右
#define U2D_R2L  5 //從上到下,從右到左
#define D2U_L2R  6 //從下到上,從左到右
#define D2U_R2L  7 //從下到上,從右到左

#define DFT_SCAN_DIR  L2R_U2D  //預設的掃描方向
	 
//掃描方向定義
#define L2R_U2D  0 //從左到右,從上到下
#define L2R_D2U  1 //從左到右,從下到上
#define R2L_U2D  2 //從右到左,從上到下
#define R2L_D2U  3 //從右到左,從下到上

#define U2D_L2R  4 //從上到下,從左到右
#define U2D_R2L  5 //從上到下,從右到左
#define D2U_L2R  6 //從下到上,從左到右
#define D2U_R2L  7 //從下到上,從右到左	 

#define DFT_SCAN_DIR  L2R_U2D  //預設的掃描方向

//畫筆顔色
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000	  
#define BLUE         	 0x001F  
#define BRED             0XF81F
#define GRED 			 0XFFE0
#define GBLUE			 0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			 0XBC40 //棕色
#define BRRED 			 0XFC07 //棕紅色
#define GRAY  			 0X8430 //灰色
//GUI顔色

#define DARKBLUE      	 0X01CF	//深藍色
#define LIGHTBLUE      	 0X7D7C	//淺藍色  
#define GRAYBLUE       	 0X5458 //灰藍色
//以上三色為PANEL的顔色 
 
#define LIGHTGREEN     	 0X841F //淺綠色 
#define LGRAY 			 0XC618 //淺灰色(PANNEL),窗體背景色

#define LGRAYBLUE        0XA651 //淺灰藍色(中間層顔色)
#define LBBLUE           0X2B12 //淺棕藍色(選擇條目的反色)
	    															  
void LCD_Init(void);													   	//初始化
void LCD_DisplayOn(void);													//開顯示
void LCD_DisplayOff(void);													//關顯示
void LCD_Clear(u16 Color);	 												//清屏
void LCD_SetCursor(u16 Xpos, u16 Ypos);										//設定光标
void LCD_DrawPoint(u16 x,u16 y);											//畫點
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color);								//快速畫點
u16  LCD_ReadPoint(u16 x,u16 y); 											//讀點 
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r);					    			//畫圓
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);							//畫線
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);		   				//畫矩形
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);		   				//填充單色
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color);				//填充指定顔色
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode);						//顯示一個字元
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);  						//顯示一個數字
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode);				//顯示 數字
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p);		//顯示一個字元串,12/16字型

void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u16 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);		  
void LCD_Scan_Dir(u8 dir);									//設定屏掃描方向
void LCD_Display_Dir(u8 dir);								//設定螢幕顯示方向
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height);	//設定視窗	

//寫資料函數
#define LCD_WR_DATA(data){\
LCD_RS_SET;\
LCD_CS_CLR;\
DATAOUT(data);\
LCD_WR_CLR;\
LCD_WR_SET;\
LCD_CS_SET;\
} 
 					   																			 
//9320/9325 LCD寄存器  
#define R0             0x00
#define R1             0x01
#define R2             0x02
#define R3             0x03
#define R4             0x04
#define R5             0x05
#define R6             0x06
#define R7             0x07
#define R8             0x08
#define R9             0x09
#define R10            0x0A
#define R12            0x0C
#define R13            0x0D
#define R14            0x0E
#define R15            0x0F
#define R16            0x10
#define R17            0x11
#define R18            0x12
#define R19            0x13
#define R20            0x14
#define R21            0x15
#define R22            0x16
#define R23            0x17
#define R24            0x18
#define R25            0x19
#define R26            0x1A
#define R27            0x1B
#define R28            0x1C
#define R29            0x1D
#define R30            0x1E
#define R31            0x1F
#define R32            0x20
#define R33            0x21
#define R34            0x22
#define R36            0x24
#define R37            0x25
#define R40            0x28
#define R41            0x29
#define R43            0x2B
#define R45            0x2D
#define R48            0x30
#define R49            0x31
#define R50            0x32
#define R51            0x33
#define R52            0x34
#define R53            0x35
#define R54            0x36
#define R55            0x37
#define R56            0x38
#define R57            0x39
#define R59            0x3B
#define R60            0x3C
#define R61            0x3D
#define R62            0x3E
#define R63            0x3F
#define R64            0x40
#define R65            0x41
#define R66            0x42
#define R67            0x43
#define R68            0x44
#define R69            0x45
#define R70            0x46
#define R71            0x47
#define R72            0x48
#define R73            0x49
#define R74            0x4A
#define R75            0x4B
#define R76            0x4C
#define R77            0x4D
#define R78            0x4E
#define R79            0x4F
#define R80            0x50
#define R81            0x51
#define R82            0x52
#define R83            0x53
#define R96            0x60
#define R97            0x61
#define R106           0x6A
#define R118           0x76
#define R128           0x80
#define R129           0x81
#define R130           0x82
#define R131           0x83
#define R132           0x84
#define R133           0x85
#define R134           0x86
#define R135           0x87
#define R136           0x88
#define R137           0x89
#define R139           0x8B
#define R140           0x8C
#define R141           0x8D
#define R143           0x8F
#define R144           0x90
#define R145           0x91
#define R146           0x92
#define R147           0x93
#define R148           0x94
#define R149           0x95
#define R150           0x96
#define R151           0x97
#define R152           0x98
#define R153           0x99
#define R154           0x9A
#define R157           0x9D
#define R192           0xC0
#define R193           0xC1
#define R229           0xE5							  		 
#endif
           

後面我會一點點的總結有關tftlcd顯示的實用庫函數。。