#ifndef __LCD_H
#define __LCD_H		
#include "common.h"	 
#include "stdlib.h"

//////////////////////////////////////////////////////////////////////////////////	 
//extern SRAM_HandleTypeDef LCDSRAM_Handler;    //SRAM句柄(用于控制LCD)

//LCD驱动参数
extern  u16  lcd_id;         //LCD ID
extern  u8   dir_flag;       //横屏还是竖屏控制：0，竖屏；1，横屏。	
extern  u16  lcd_width;      //LCD 宽度
extern  u16  lcd_height;     //LCD 高度
extern  u16	 write_gramcmd;	 //写gram指令
extern	u16  setxcmd;		     //设置x坐标指令
extern	u16  setycmd;		     //设置y坐标指令	 

//LCD的画笔颜色和背景色	   
extern u16  BRUSH_COLOR;//默认红色    
extern u16  BACK_COLOR; //背景颜色.默认为白色


//////////////////////////////////////////////////////////////////////////////////	 
//-----------------LCD背光端口定义---------------- 
//#define	LCD_BACK PFout(10)  //LCD背光    	PF10 	    

//A12作为数据命令区分线  设置时STM32内部会右移一位对齐	    
#define  CMD_BASE     ((u32)(0x6C000000 | 0x00001FFE))
#define  DATA_BASE    ((u32)(0x6C000000 | 0x00002000))

#define LCD_CMD       ( * (u16 *) CMD_BASE )
#define LCD_DATA      ( * (u16 *) DATA_BASE)
	 
//扫描方向定义
#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  WHITE        0xFFFF
#define  BLACK        0x0000	
#define  RED          0xF800
#define  GREEN        0x07E0
#define  BLUE         0x001F 
#define  BRED         0XF81F
#define  GRED 			  0XFFE0
#define  GBLUE			  0X07FF
#define  BROWN 			  0XBC40  
#define  BRRED 			  0XFC07  
#define  GRAY  			  0X8430  
#define  MAGENTA      0xF81F
#define  CYAN         0x7FFF
#define  YELLOW       0xFFE0

	    			
void LCD_WriteReg(u16 LCD_Reg, u16 LCD_Value);
u16 LCD_ReadReg(u16 LCD_Reg);
void LCD_WriteGRAM(void);

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_Color_DrawPoint(u16 x,u16 y,u16 color);	//颜色画点
u16  LCD_GetPoint(u16 x,u16 y); 								  //读点 

void LCD_Open_Window(u16 X0,u16 Y0,u16 width,u16 height); 	
void Set_Scan_Direction(u8 direction);					 
void Set_Display_Mode(u8 mode);						 
void ClearLine(u16 Line,u16 size,u16 color);

void LCD_Fill_onecolor(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);		//填充单个颜色
void LCD_Draw_Picture(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color);		//填充指定颜色
void LCD_DisplayChar(u16 x,u16 y,u8 word,u8 size);						      //显示一个字符
void LCD_DisplayString(u16 x,u16 y,u8 size,u8 *p);		           //显示一个12/16/24字体字符串
void LCD_DisplayString_color(u16 x,u16 y,u8 size,u8 *p,u16 brushcolor,u16 backcolor); //显示一个12/16/24字体自定义颜色的字符串
void LCD_DisplayNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode);				//显示 数字
void LCD_DisplayNum_color(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode,u16 brushcolor,u16 backcolor); //显示自定义颜色数字	  	   																			 
void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s);	
void Gui_DrawFont_GBK24(u16 x, u16 y, u16 fc, u16 bc, u8 *s);
void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color);
#endif  
	 
	 



