1、/=9325TP.h=/ /*- 9325TP 驱动器 TFT 驱动程序 -*/ #ifndef _9325TP_H #define _9325TP_H #include “stm32f10x_lib.h“ /* LCD color */ #define White 0xFFFF #define Black 0x0000 #define Blue 0x001F #define Blue2 0x051F #define Red 0xF800 #define Magenta 0xF81F #define Green 0x07E0 #define Cyan 0x7FFF #define Yellow
2、 0xFFE0 /* LCD COMMAND */ #define WINDOW_XADDR_START 0x50 / Horizontal Start Address Set #define WINDOW_XADDR_END 0x51 / Horizontal End Address Set #define WINDOW_YADDR_START 0x52 / Vertical Start Address Set #define WINDOW_YADDR_END 0x53 / Vertical End Address Set #define GRAM_XADDR 0x20 / GRAM Hor
3、izontal Address Set #define GRAM_YADDR 0x21 / GRAM Vertical Address Set #define GRAMWR 0x22 / memory write /* LCD CONTROL PORT */ #define LCD_CONTROL_PORT GPIOD #define CS_LCD GPIO_Pin_10 #define RS_LCD GPIO_Pin_11 #define RW_LCD GPIO_Pin_12 #define RD_LCD GPIO_Pin_13 #define RST_LCD GPIO_Pin_14 #de
4、fine LCD_CONTROL_PIN CS_LCD | RS_LCD | RW_LCD | RD_LCD | RST_LCD /* LCD DATA PORT */ #define LCD_DATA_PORT GPIOE #define RST_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RST_LCD) #define RST_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RST_LCD) #define CS_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,CS_LCD) #define
5、 CS_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,CS_LCD) #define RS_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RS_LCD) #define RS_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RS_LCD) #define RW_LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RW_LCD) #define RW_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RW_LCD) #define RD_
6、LCD_SET GPIO_SetBits(LCD_CONTROL_PORT ,RD_LCD) #define RD_LCD_CLR GPIO_ResetBits(LCD_CONTROL_PORT ,RD_LCD) /* Line Direction */ #define Vertical 0x00 #define Horizontal 0x01 extern void Init_LCD_9325TP(void) ; extern void Write_LCD_Cmd(unsigned int Data_H ,unsigned int Data_L) ; extern void Write_LC
7、D_Data(unsigned int Data_H ,unsigned int Data_L) ; extern void Write_LCD_Data_U16(unsigned int Dat) ; extern void Init_LCD_Data(unsigned int x ,unsigned int y) ; extern void Clear_Screen(unsigned int Back_Color) ; /用指定的颜色刷屏 extern void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsig
8、ned int y1) ; /设定起始坐标 extern void LCD_PutChar8x16(unsigned int x, unsigned int y, unsigned char c, unsigned int For_Color, unsigned int Back_Color) ; /显示一个 8X16 的字符 extern void LCD_PutGB1616(unsigned int x, unsigned int y, unsigned char c2, unsigned int For_Color,unsigned int Back_Color) ; /显示一个 16X
9、16的汉字 extern void LCD_PutGB3232(unsigned int x, unsigned int y, unsigned char c2, unsigned int For_Color,unsigned int Back_Color) ; /显示一个 32X32的汉字 extern void LCD_PutString(unsigned int x, unsigned int y, unsigned char *s, unsigned int For_Color, unsigned int Back_Color) ; /显示一串 16X16 的字符串 extern vo
10、id LCD_PutGB1616_String(unsigned int x ,unsigned int y ,unsigned char *s , unsigned int For_Color ,unsigned int Back_Color) ; /显示一串16X16 的汉字 extern void LCD_DrawLine(unsigned short x ,unsigned short y ,unsigned short length , unsigned char Direction ,unsigned int color) ; /画一条直线 extern void LCD_Draw
11、Rect(unsigned short x ,unsigned short y ,unsigned short Width , unsigned short Height ,unsigned int color) ; /画一个矩形 void LCD_DrawCircle(unsigned short XPos ,unsigned short Ypos ,unsigned short Radius , unsigned int color) ; /画一个圆 extern void Show_Photo(unsigned int x0 ,unsigned int y0 ,unsigned int
12、x ,unsigned int y , const unsigned char *p) ; /显示一张图片 extern void u32tostr(unsigned long dat,unsigned char *str) ; /将整型转换为字符串 #endif /* 9325TP_H */ /=/ /=9325TP.c=/ #include “stm32f10x_lib.h“ #include “SysTick_Delay.h“ #include “9325TP.h“ #include “GB1616.h“ #include “GB3232.h“ #include “8x16.h“ /*
13、函数名称 : Write_LCD_Cmd 功 能 : 向 LCD 写入命令 参 数 : Data_H - 16 位数据的高八位 Data_L - 16 位数据的低八位 返回值 : 无 */ void Write_LCD_Cmd(unsigned int Data_H ,unsigned int Data_L) CS_LCD_CLR ; /使能片选信号 RS_LCD_CLR ; /命令模式 GPIO_Write(LCD_DATA_PORT ,Data_H) ; /高八位 RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 GPIO_Write(LCD_DATA_PORT
14、,Data_L) ; RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 CS_LCD_SET ; /结束片选信号 /* 函数名称 : Write_LCD_Data 功 能 : 向 LCD 写入数据 参 数 : Data_H - 16 位数据的高八位 Data_L - 16 位数据的低八位 返回值 : 无 */ void Write_LCD_Data(unsigned int Data_H ,unsigned int Data_L) CS_LCD_CLR ; /使能片选信号 RS_LCD_SET ; /数据模式 GPIO_Write(LCD_DATA_PORT ,Dat
15、a_H) ; /高八位 RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 GPIO_Write(LCD_DATA_PORT ,Data_L) ; /低八位 RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 CS_LCD_SET ; /结束片选信号 /* 函数名称 : Write_LCD_Data_U16 功 能 : 向 LCD 写入 16 位的数据 参 数 : Dat - 要写入 的数据 返回值 : 无 */ void Write_LCD_Data_U16(unsigned int Dat) CS_LCD_CLR ; /使能片选信号 RS_L
16、CD_SET ; /数据模式 GPIO_Write(LCD_DATA_PORT ,Dat8) ; /高八位 /GPIOE-ODR = Dat8 ; RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 GPIO_Write(LCD_DATA_PORT ,Dat) ; /低八位 /GPIOE-ODR = Dat ; RW_LCD_CLR ; /写使能 RW_LCD_SET ; /关闭写使能 CS_LCD_SET ; /结束片选信号 /* 函数名称 : Init_LCD_Data 功 能 : 初始化 LCD 写入方法 参 数 : x-要使用的命令代码 y-要使用的数据代码 返
17、回值 : 无 */ void Init_LCD_Data(unsigned int x ,unsigned int y) Write_LCD_Cmd(0x0000,x) ; Write_LCD_Data_U16(y) ; /* 函数名称 : LCD_SetPos 功 能 : 定义显示窗体 参 数 : x0 - 窗体中 X 坐标中较小者 x1 - 窗体中 X 坐标中较大者 y0 - 窗体中 Y 坐标中较小者 y1 - 窗体中 Y 坐标中较大者 返回值 : 无 */ void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,un
18、signed int y1) Init_LCD_Data(WINDOW_XADDR_START,x0); Init_LCD_Data(WINDOW_XADDR_END,x1); Init_LCD_Data(WINDOW_YADDR_START,y0); Init_LCD_Data(WINDOW_YADDR_END,y1); Init_LCD_Data(GRAM_XADDR,x0); Init_LCD_Data(GRAM_YADDR,y0); Write_LCD_Cmd(0x0000,0x0022); /LCD_WriteCMD(GRAMWR); /* 函数名称 : Clear_Screen 功
19、 能 : 清屏 参 数 : Back_Color - 清屏后的背景颜色 返回值 : 无 */ void Clear_Screen(unsigned int Back_Color) unsigned int i ,j ; LCD_SetPos(0,240,0,320) ; for(i = 0 ;i 325 ;i+) for(j = 0 ;j 240 ;j+) Write_LCD_Data_U16(Back_Color) ; /* 函数名称 : LCD_PutChar8x16 功 能 : 显示 8x16 的字符 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 c - 要显示 的字符 F
20、or_Color - 前景颜色 Back_Color - 背景颜色 返回值 : 无 */ void LCD_PutChar8x16(unsigned int x, unsigned int y, unsigned char c, unsigned int For_Color, unsigned int Back_Color) unsigned char i,j; unsigned char m ; c -= 32; LCD_SetPos(x,x+8-1,y,y+16-1); for(i = 0 ;i 16 ;i+) m = Font8x16ci; for(j = 0 ;j 8 ;j+) if(
21、m else Write_LCD_Data_U16(Back_Color); m=1; /* 函数名称 : LCD_PutGB1616 功 能 : 显示 16x16 的汉字 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 c - 要显示的汉字 For_Color - 前景颜色 Back_Color - 背景颜色 返回值 : 无 */ void LCD_PutGB1616(unsigned int x, unsigned int y, unsigned char c2, unsigned int For_Color,unsigned int Back_Color) unsigned
22、int i, j, k ; unsigned int m ; LCD_SetPos(x ,x+16-1 ,y ,y+16-1) ; for (k = 0;k 25;k+) /25 表示自建汉字库中的汉字个数,采用循环查询 if( (GB_16k.Index0=c0) i 32;i+) m = GB_16k.Mski; for(j = 0;j 8;j+) if(m else Write_LCD_Data_U16(Back_Color); m=1; /* 函数名称 : LCD_PutGB3232 功 能 : 显示 32x32 的汉字 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 c
23、- 要显示的汉字 For_Color - 前景颜色 Back_Color - 背景颜色 返回值 : 无 */ void LCD_PutGB3232(unsigned int x, unsigned int y, unsigned char c2, unsigned int For_Color,unsigned int Back_Color) unsigned int i, j, k ; unsigned int m ; LCD_SetPos(x ,x+32-1 ,y ,y+32-1) ; for (k = 0;k 2;k+) /25 表示自建汉字库中的汉字个数,采用循环查询 if( (GB_3
24、2k.Index0=c0) i 128;i+) m = GB_32k.Mski; for(j = 0;j 8;j+) if(m else Write_LCD_Data_U16(Back_Color); m=1; /* 函数名称 : LCD_PutString 功 能 : 显示 32x32 的字符串 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 s - 要显示的字符串 For_Color - 前景颜色 Back_Color - 背景颜色 返回值 : 无 */ void LCD_PutString(unsigned int x, unsigned int y, unsigned ch
25、ar *s, unsigned int For_Color, unsigned int Back_Color) unsigned char i = 0 ; while(*s) LCD_PutChar8x16(x+i*8,y,*s,For_Color,Back_Color); s+ ; i+ ; /* 函数名称 : LCD_PutGB1616_String 功 能 : 显示 16x16 的汉字串 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 s - 要显示的汉字符串 For_Color - 前景颜色 Back_Color - 背景颜色 返回值 : 无 */ void LCD_Put
26、GB1616_String(unsigned int x ,unsigned int y ,unsigned char *s ,unsigned int For_Color ,unsigned int Back_Color) unsigned char i = 0 ; while(*s) LCD_PutGB1616(x+i*8 ,y ,(unsigned char *)s ,For_Color ,Back_Color) ; s += 2 ; i += 2 ; /* 函数名称 : Show_Photo 功 能 : 显示图片 参 数 : x0 - 起始 x 坐标 y0 - 起始 y 坐标 x -
27、图片宽 y - 图片长 pic 要显示的图片数组 返回值 : 无 */ void Show_Photo(unsigned int x0 ,unsigned int y0 ,unsigned int x ,unsigned int y ,const unsigned char pic) unsigned int j; unsigned int i; unsigned long s=0; LCD_SetPos(x0,x0+x-1,y0,y0+y-1); for (i=0;iy-1;i+) for (j=0;jx-1;j+) Write_LCD_Data(pic2*s,pic2*s+1); s+ ;
28、 /* 函数名称 : LCD_DrawLine 功 能 : 画直线 参 数 : x - 起始 x 坐标 y - 起始 y 坐标 length - 直线长度 (长度超过边框将被截掉 ) Direction - 直线方向 (Horizontal or Vertical color - 直线颜色 返回值 : 无 */ void LCD_DrawLine(unsigned short x ,unsigned short y ,unsigned short length , unsigned char Direction ,unsigned int color) unsigned char i; if(
29、Direction = Horizontal) if( (x+length) 240) /检查是否超出边框 LCD_SetPos(x ,x+length ,y ,y) ; for(i = 0 ;i length ;i+) Write_LCD_Data_U16(color) ; else LCD_SetPos(x ,240 ,y ,y) ; for(i = 0 ;i (240-x) ;i+) Write_LCD_Data_U16(color) ; else if(Direction = Vertical) if(y+length 320) /检查是否超出边框 LCD_SetPos(x ,x ,y ,y+length) ; for(i = 0 ;i length ;i+) Write_LCD_Data_U16(color) ; else