📄 text.c
字号:
/******************************************************************************
QQ: 958664258
21IC用户名:banhushui
交流平台:http://blog.21ic.com/user1/5817/index.html
淘宝店铺:http://shop58559908.taobao.com
旺旺:半壶水电子
编译器版本:MDK3.5
******************************************************************************/
#include "..\APP\includes.h"
/*
24*24阵列Y-->>X变换
[BYTE0] [BYTE3].......
D7 D7
D6 D6
. .
. .
D1 D1
D0 D0
[BYTE1] [BYTE4]
D7 D7
D6 D6
. .
. .
D1 D1
D0 D0
[BYTE2] [BYTE5]
D7 D7
D6 D6
. .
. .
D1 D1
D0 D0
--------------------------------->>
[BYTE0] [BYTE1] [BYTE2]
D7D6..D1D0 D7D6..D1D0 D7D6..D1D0
[BYTE3] [BYTE4] [BYTE5]
D7D6..D1D0 D7D6..D1D0 D7D6..D1D0
.
.
.
*/
//void MODY24(uint8 * p)
//{
// uint8 buf[72];
// uint8 i, j;
// uint8 temp;
// uint8 ix, iy;
// uint16 xy;
//
// memset(buf, 0, 72);
// ix=0;iy=0;
// for(j=0; j<72; j++)
// {
// temp=p[j];
// for(i=0; i<8; i++)
// {
// xy=24*iy+ix;
// if(isBit8(temp, 7-i))
// {
// SetBit8(buf[xy/8], 7-(xy%8));
// }
// iy++;
// }
//
// if(iy==24)
// {
// iy=0;
// ix++;//iy变化24次ix才变化1次
// }
// }
//
// memcpy(p, buf, 72);
//}
/*
//将8*8 Y方向阵列做 X方向转换
void MODY8(uint8 * p)
{
uint8 buf[8];
uint8 i, j;
uint8 temp;
memset(buf, 0, 8);
for (j = 0; j < 8; j++)
{
temp=p[j];
for (i = 0; i < 8; i++)
{
buf[i] <<= 1;
if(isBit8(temp, i))
//SetBit8(buf[i], 7-j);
SetBit8(buf[i], 0);
}
}
memcpy(p, buf, 8);
}
//将8*16 Y方向阵列做 X方向转换(用于8*16 ASCII)
void MODY16(uint8 * p)
{
MODY8(p);
MODY8(p+8);
}
//将16*16 Y方向阵列做 X方向转换(主要用于16*16 汉字)
void MODY32(uint8 * p)
{uint8 temp[16];
//uint8 i;
MODY8(p);
MODY8(p+8);
memcpy(temp, p, 16);
//p[0]=temp[0];
p[1]=temp[8];
p[2]=temp[1];
p[3]=temp[9];
p[4]=temp[2];
p[5]=temp[10];
p[6]=temp[3];
p[7]=temp[11];
p[8]=temp[4];
p[9]=temp[12];
p[10]=temp[5];
p[11]=temp[13];
p[12]=temp[6];
p[13]=temp[14];
p[14]=temp[7];
p[15]=temp[15];
MODY8(p+16);
MODY8(p+24);
memcpy(temp, p+16, 16);
//p[16]=temp[0];
p[17]=temp[8];
p[18]=temp[1];
p[19]=temp[9];
p[20]=temp[2];
p[21]=temp[10];
p[22]=temp[3];
p[23]=temp[11];
p[24]=temp[4];
p[25]=temp[12];
p[26]=temp[5];
p[27]=temp[13];
p[28]=temp[6];
p[29]=temp[14];
p[30]=temp[7];
p[31]=temp[15];
}
*/
/****************************************************************
函数名:LCD写1个8*16 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/8个ASCII字符,竖向能显示20行
返回值:无
注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteEN(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
u8* pbuf;
u8 buf[16];
u16 ix, iy;
//GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
GetASCIICode(buf, ASCIICode, 16);//取这个字符的显示代码
pbuf = buf;
for(iy=0; iy<16; iy++)//写16行
{
for(ix=0; ix<8; ix++)//写1行中的8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
y++;
}
}
void LCDWriteEN16(u16 x, u16 y, u8 ASCIICode, u16 CharColor, u16 bkColor)
{
u8* pbuf;
u8 buf[16];
u16 ix, iy;
//GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
GetASCIICode(buf, ASCIICode, 16);//取这个字符的显示代码
pbuf = buf;
for(iy=0; iy<16; iy++)//写16行
{
for(ix=0; ix<8; ix++)//写1行中的8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
DrawPixel(x+ix, y, bkColor);
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*24 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无
注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteEN24(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
u8* pbuf;
u8 buf[48];
u16 ix, iy;
//GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
GetASCIICode(buf, ASCIICode, 24);//取这个字符的显示代码
pbuf = buf;
for(iy=0; iy<24; iy++)//写24行
{
for(ix=0; ix<8; ix++)//写1行中的8列
{
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++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示30个ASCII字符,竖向能显示20行
返回值:无
注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteCN(u16 x, u16 y, u16 CharColor, u8 *p)
{
u8* pbuf;
u8 buf[32];
u16 ix, iy;
GetChineseCode(buf, p);//取这个字符的显示代码
pbuf = buf;
for(iy=0; iy<16; iy++)//写16行
{
for(ix=0; ix<8; ix++)//写1行中的左8列
{
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++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无
注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteCN24(u16 x, u16 y, u16 CharColor, u8 *p)
{
u8* pbuf;
u8 buf[72];
u16 ix, iy;
GetChineseCode24(buf, p);//取这个字符的显示代码
//MODY24(buf);
pbuf = buf;
for(iy=0; iy<24; iy++)//写24行
{
for(ix=0; ix<8; ix++)//写1行中的左8列
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -