#include "stm32f10x_lib.h"
#include "SysTick_Delay.h"
#include "9325TP.h"
#include "GB1616.h"
#include "GB3232.h"
#include "8x16.h"
/****************************************************************
函数名称: 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 ,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 ,Data_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_LCD_SET ; //数据模式
GPIO_Write(LCD_DATA_PORT ,Dat>>8) ; //高八位
//GPIOE->ODR = Dat>>8 ;
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-要使用的数据代码
返回值 : 无
*****************************************************************/
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,unsigned 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
功 能: 清屏
参 数: 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 - 要显示的字符
For_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 = Font8x16[c][i];
for(j = 0 ;j < 8 ;j++)
{
if((m&0x80)==0x80)
{
Write_LCD_Data_U16(For_Color);
}
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 c[2], unsigned int For_Color,unsigned int Back_Color)
{
unsigned 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_16[k].Index[0]==c[0]) && (GB_16[k].Index[1]==c[1]) )
{
for(i = 0;i < 32;i++)
{
m = GB_16[k].Msk[i];
for(j = 0;j < 8;j++)
{
if((m&0x80)==0x80)
Write_LCD_Data_U16(For_Color);
else
Write_LCD_Data_U16(Back_Color);
m<<=1;
}
}
}
}
}
/****************************************************************
函数名称: LCD_PutGB3232
功 能: 显示32x32的汉字
参 数: x - 起始x坐标
y - 起始y坐标
c - 要显示的汉字
For_Color - 前景颜色
Back_Color - 背景颜色
返回值 : 无
*****************************************************************/
void LCD_PutGB3232(unsigned int x, unsigned int y, unsigned char c[2], 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_32[k].Index[0]==c[0]) && (GB_32[k].Index[1]==c[1]) )
{
for(i = 0;i < 128;i++)
{
m = GB_32[k].Msk[i];
for(j = 0;j < 8;j++)
{
if((m&0x80)==0x80)
Write_LCD_Data_U16(For_Color);
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 char *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_PutGB1616_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) ;