📄 text.c
字号:
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的中8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+8, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的右8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+16, y, CharColor);
}
}
pbuf++;
y++;
}
}
Rect RectText={0, 0, 240, 320};//文字显示区域
//设置文字显示区域
void SetRectText(u16 x, u16 y, u16 w, u16 h)
{
RectText.x=x;
RectText.y=y;
RectText.w=w;
RectText.h=h;
}
#define RECT_XMAX (RectText.x+RectText.w)
#define RECT_YMAX (RectText.y+RectText.h)
#define START_X RectText.x
#define START_Y RectText.y
/************************************************************
函数名:LCD写字符串函数8*16ASCII,16*16汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
*p 指向要写的字符串
返回值:无
增加显示区域判断,所以使用是应该先设置显示区域
*************************************************************/
void LCD_WriteString16(uint16 x, uint16 y, uint16 CharColor, char* p)
{
u8 dat;
for(;*p!=0;p++)
{
if(( (u8)*p&0x80)==0)//英文
{
if(*p=='\r')//回车
{
x=START_X;
continue;
}
if(*p=='\n')//换行
{
y+=16;
if(y > RECT_YMAX-16)//超过行显示
y=START_Y;
continue;
}
dat=*p-0x20;
if(x > RECT_XMAX-8)//不够写1个字符就移到下一行
{
x=START_X;
y+=16;
if(y > RECT_YMAX-16)
y=START_Y;
}
LCDWriteEN(x, y, CharColor, dat);
x+=8;
}
else//中文
{
if(x > RECT_XMAX-16)//不够写1个字符就移到下一行
{
x=START_X;
y+=16;
if(y > RECT_YMAX-16)
y=START_Y;
}
LCDWriteCN(x, y, CharColor, (u8*)p);
x+=16;
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, char* p, uint8 font)
{
if(font==16)
LCD_WriteString16(x, y, CharColor, p);
else //if(font==24)
LCD_WriteString24(x, y, CharColor, p);
}
/************************************************************
函数名:LCD写字符串函数16*24ASCII,24*24汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
*p 指向要写的字符串
返回值:无
*************************************************************/
void LCD_WriteString24(uint16 x, uint16 y, uint16 CharColor, char* p)
{
u8 dat;
for(; *p!=0; p++)
{
if(( (u8)*p&0x80)==0)//英文
{
if(*p=='\r')//回车
{
x=START_X;
continue;
}
else if(*p=='\n')//换行
{
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
continue;
}
else if(*p=='\1') //自定义图标.上
dat='~'-' '+1;
else if(*p=='\2') //自定义图标.下
dat='~'-' '+2;
else if(*p=='\3') //自定义图标.左
dat='~'-' '+3;
else if(*p=='\4') //自定义图标.右
dat='~'-' '+4;
// else if(*p=='\\') //自定义图标
// {
// p++;
// if(*p=='U') //自定义图标.上
// dat='~'-' '+1;
// else if(*p=='D') //自定义图标.下
// dat='~'-' '+2;
// else if(*p=='L') //自定义图标.左
// dat='~'-' '+3;
// else// if(*p=='R') //自定义图标.右
// dat='~'-' '+4;
// }
else //其它正常字符
dat=*p-0x20;
if(x > RECT_XMAX-16)//不够写1个字符就移到下一行
{
x=START_X;
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
}
LCDWriteEN24(x, y, CharColor, dat);
x+=16;
}
else//中文
{
if(x > RECT_XMAX-24)//不够写1个字符就移到下一行
{
x=START_X;
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
}
LCDWriteCN24(x, y, CharColor, (u8*)p);
x+=24;
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;
//address=0x3fe40+16UL*ASCII;
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 );
}
/*********************************************************
函数名: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 );
}
/*********************************************************
函数名: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 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -