📄 dc.c
字号:
}
/************************************************************
函数名:LCD写字符串函数8*16ASCII,16*16汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
*p 指向要写的字符串
返回值:无
*************************************************************/
void LCD_WriteString16(uint16 x, uint16 y, uint16 CharColor, uint8* p)
{
u8 dat;
for(;*p!=0;p++)
{
if((*p&0x80)==0)//英文
{
if(*p=='\r')//回车
{
x=0;
continue;
}
if(*p=='\n')//换行
{
y+=16;
if(y > YMAX-16)
y=0;
continue;
}
dat=*p-0x20;
if(x > XMAX-8)//不够写1个字符就移到下一行
{
x=0;
y+=16;
if(y > YMAX-16)
y=0;
}
LCDWriteEN(x, y, CharColor, dat);
x+=8;
}
else//中文
{
if(x > XMAX-16)//不够写1个字符就移到下一行
{
x=0;
y+=16;
if(y > YMAX-16)
y=0;
}
LCDWriteCN(x, y, CharColor, (u8*)p);
x+=16;
p++;
}
}
}
void LCD_WriteString(uint16 x, uint16 y, uint16 CharColor, uint8* p, uint8 font)
{
if(font==16)
LCD_WriteString16(x, y, CharColor, p);
else //if(font==24)
LCD_WriteString24(x, y, CharColor, p);
}
/************************************************************
函数名:LCD写字符串函数8*16ASCII,24*24汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
*p 指向要写的字符串
返回值:无
*************************************************************/
void LCD_WriteString24(uint16 x, uint16 y, uint16 CharColor, uint8* p)
{
u8 dat;
for(;*p!=0;p++)
{
if((*p&0x80)==0)//英文
{
if(*p=='\r')//回车
{
x=0;
continue;
}
if(*p=='\n')//换行
{
y+=24;
if(y > YMAX-24)
y=0;
continue;
}
dat=*p-0x20;
if(x > XMAX-16)//不够写1个字符就移到下一行
{
x=0;
y+=24;
if(y > YMAX-24)
y=0;
}
LCDWriteEN24(x, y, CharColor, dat);
x+=16;
}
else//中文
{
if(x > XMAX-24)//不够写1个字符就移到下一行
{
x=0;
y+=24;
if(y > YMAX-24)
y=0;
}
LCDWriteCN24(x, y, CharColor, (u8*)p);
x+=24;
p++;
}
}
}
/*********************************************************
函数名:SPI取ASCII码子程序
输入参数:u8 ASCII 输入的ASCII码,如'A'
BaseAddr 基址 即ASCII显示代码在FLASH中的启示位置
返回值:无
说明:输入一个ASCII码,取得它在SPI FLASH中的16Byte显示代码
并将其存放到一个16byte的ASCII显示缓冲CharBuffer[]中
**********************************************************/
//void GetASCIICode(u8* buf, u8 ASCII)
void GetASCIICode(u8* buf, u8 ASCII, u8 dot)
//{uint32 address;
// u8 len;
//
// if(dot==16)
// address=0x40000+16UL*ASCII, len=16;
// else if(dot==24)
// address=0xBB000+48UL*ASCII, len=48;
// else
// address=0, len=0;
//
//// Read_Flash_Page ( address, len, buf );
//}
{
uint8* address;
address=(uint8*)EZK;
address+=(uint32)ASCII*16;
memcpy(buf, address, 16);
}
/*********************************************************
函数名:SPI中文显示码子程序
输入参数:u16 ASCII 输入的中文,如"我"
BaseAddr 基地 即显示代码在FLASH中的起始位置
返回值:无
说明:输入一个中文,取得它在SPI FLASH中的32Byte显示代码
并将其存放到一个32byte的显示缓冲ChineseBuffer[]
**********************************************************/
void GetChineseCode(u8* dot, u8 *p)
//{//uchar m;
// //uint8 dot[32];
// uint32 address;
//
// //address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
// address=32UL*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) );
// //address+=HZK_FlashAddress;
//// Read_Flash_Page ( address, 32, dot );
//}
{uint8 *hz;
uint8 hz_f=0;
int i=0;
for(hz=(uint8 *)PHZ;*hz!='\0';hz+=2)
{
if( *p==*hz && *(p+1)==*(hz+1) )
{
hz_f=1;
break;
}
else
i++;
}
if(hz_f==0)
return;
hz=(uint8 *)HZK;
hz+=(uint32)i*32;
memcpy(dot, hz, 32);
}
/*********************************************************
函数名:SPI中文显示码子程序
输入参数:u16 ASCII 输入的中文,如"我"
BaseAddr 基地 即显示代码在FLASH中的起始位置
返回值:无
说明:输入一个中文,取得它在SPI FLASH中的32Byte显示代码
并将其存放到一个32byte的显示缓冲ChineseBuffer[]
**********************************************************/
void GetChineseCode24(u8* dot, u8 *p)
{//uchar m;
//uint8 dot[32];
uint32 address;
//address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
address=72UL*( ((*p)-15-0xa1)*94 + ((*(p+1))-0xa1) );
address+=0x41000;
// Read_Flash_Page ( address, 72, dot );
}
/*----------------------------------------------------------------------
调用该成员函数用指定的固体色填充矩形
x: 矩形左上角的X逻辑坐标。
y: 矩形左上角的Y逻辑坐标。
Width: 指定矩形的宽度。
Height: 指定矩形的高度。
Color: 填充颜色
----------------------------------------------------------------------*/
void FillSolidRect(u16 x, u16 y, u16 Width, u16 Height, u16 Color)
{uint32 i;
LCD_WR_CmdPar(0x20, x);//起始X坐标
LCD_WR_CmdPar(0x21, y);//起始Y坐标
LCD_WR_CmdPar(0x0050, x);//水平 GRAM起始位置
LCD_WR_CmdPar(0x0051, x+Width-1);//水平GRAM终止位置
LCD_WR_CmdPar(0x0052, y);//垂直GRAM起始位置
LCD_WR_CmdPar(0x0053, y+Height-1);//垂直GRAM终止位置
LCD_WR_Cmd(0x0022);//开始读/写
for(i=0; i<(u32)Width*Height; i++)
{
LCD_WR_DATA(Color);
}
}
u16 BG_COLOR=GREY; //全局的背景色,此变量是为了增加运行速度而设置的
u16 LCD_SET_Color(u16 color_front, u16 color_back, unsigned char Alpha)
{
unsigned char R0,G0,B0,R1,G1,B1,newR,newG,newB;
R0=(color_back>>11)&0x1f;
G0=(color_back>>5)&0x3f;
B0=(color_back&0x1f);
R1=(color_front>>11)&0x1f;
G1=(color_front>>5)&0x3f;
B1=(color_front&0x1f);
newR= (R0*(255-Alpha)+R1*Alpha)/255; // Alpha取值范围从0到255
newG= (G0*(255-Alpha)+G1*Alpha)/255; // Alpha取值范围从0到255
newB= (B0*(255-Alpha)+B1*Alpha)/255; // Alpha取值范围从0到255
return RGB565(newR,newG,newB);
}
void TFTHLine(u16 x,u16 y,u16 len, u16 color,u8 cover)
{u16 i,tmp_rd,new_color;
for(i=0;i<len;i++)
{
LCD_WR_Cmd(0x0020);//x
LCD_WR_DATA(x+i);
LCD_WR_Cmd(0x0021);//y
LCD_WR_DATA(y);
LCD_WR_Cmd(0x0022);
if(cover==0)
{
LCD_WR_DATA(color);
}
else
{
//tmp_rd=LCD_Read();
tmp_rd=LCD_ReadPixel(x+i, y);
if(tmp_rd!=BG_COLOR)
{
new_color=LCD_SET_Color(tmp_rd,color,150);
}
else
{
new_color=color;
}
LCD_WR_Cmd(0x0020);//x
LCD_WR_DATA(x+i);
LCD_WR_Cmd(0x0021);//y
LCD_WR_DATA(y);
LCD_WR_Cmd(0x0022);
LCD_WR_DATA(new_color);
}
}
}
/**************************************************************
** 函数名:TFTRectFill
** 功能:填充矩形
** 注意事项:
***************************************************************/
void TFTRectFill(u16 x0, u16 y0, u16 x1, u16 y1, u16 color,u8 cv)
{
u16 i,cnt,len;
len=x1-x0;
cnt=y1-y0;
for(i=0;i<cnt;i++)
{
TFTHLine(x0,y0+i,len,color,cv);
}
}
/*
写入1块图片
下面是利用GRAM窗体高速写入
x
y
w
h
pbuf
*/
void LCD_WriteBlock(u16 x, u16 y, u16 w, u16 h, u16 *pbuf)
{u32 i;
LCD_WR_CmdPar(0x20, x);//起始X坐标
LCD_WR_CmdPar(0x21, y);//起始Y坐标
LCD_WR_CmdPar(0x0050, x);//水平 GRAM起始位置
LCD_WR_CmdPar(0x0051, x+w-1);//水平GRAM终止位置
LCD_WR_CmdPar(0x0052, y);//垂直GRAM起始位置
LCD_WR_CmdPar(0x0053, y+h-1);//垂直GRAM终止位置
LCD_WR_Cmd(0x0022);//开始读/写
for(i=0; i<(u32)w*h; i++)
{
LCD_WR_DATA(*pbuf++);
}
}
void LCD_ReadBlock(u16 x, u16 y, u16 w, u16 h, u16 *pbuf)
{u16 ix,iy;
for(iy=0; iy<h; iy++)
{
for(ix=0; ix<w; ix++)
{
*pbuf++=LCD_ReadPixel(x+ix, y+iy);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -