📄 display.c
字号:
i = 0;
while (ptr[i]!= '\0')
{
if (ptr[i]>=0x00A1) //国标码
{
ISN = ptr[i]*256;
i++;
ISN = ISN + ptr[i];
HZXS_16x16(row, col/2, ISN, ForeColor, BackColor);
col++;
}
else //ASCII码
{
YWXS_16x8(row, col, ptr[i], ForeColor, BackColor);
}
i++;
col++;
}
}
/*************************************************************************************************
函数功能:在任意位置显示任意大小的灰度图片
入口参数:X0 - 起始行
:Y0 - 起始列(第几个3列)
:width - 宽度
:height - 高度
:Addr - 图片首地址
:Mode - 0(正常显示)/1(反色显示)
出口参数:None
修改时间:2008-8-5 8:57:36 by edu_xy
*************************************************************************************************/
void Show_One_Picture(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr, UINT16 Mode)
{
UINT16 i,j,Y1,X1,g;
UINT16 *ptr;
ptr = (UINT16 *)Addr;
Y1 = Y0 + width/3;
X1 = X0 + height;
NT7553E_WINDOW(Y0/3, Y1-1, X0, (X1-1), 0);
if(Mode==0)
{
for(i=X0; i<X1; i++)
{
for(j=Y0;j<Y1;j++)
{
g = ~(*ptr);
NT7553E_3DOT(j, i, g);
ptr++;
}
}
}
else
{
for(i=X0; i<X1; i++)
{
for(j=Y0;j<Y1;j++)
{
g = *ptr;
NT7553E_3DOT(j, i, g);
ptr++;
}
}
}
}
#else
/***************************************************************************************
函数功能:2B3P模式,在液晶屏ST7529上显示1个Word处理好的数据。
入口参数:int Data - 处理好的48个Word的数据的一个
:ForeColor - 前景色
:BackColor - 背景色
函数说明:|D15|D14|D13|D12|D11|D10| D9| D8| D7| D6| D5| D4| D3| D2| D1| D0|
:| P0| P0| P0| P0| P0| P1| P1| P1| P1| P1| X | P2| P2| P2| P2| P2|
:"X"are dummy bits, which are ignored for display.
修改时间:2008-7-24 12:12:03 by edu_xy
***************************************************************************************/
void Show1Word(UINT16 Data, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 Gray_Scle;//写入的灰度数据
if((ForeColor == 31)&&(BackColor == 0))
{
if(Data == 0xE000) {LcdDatWrite(0xFFFF);} //全 = 1
else if(Data == 0xC000) {LcdDatWrite(0xFFC0);} //高中位 = 1
else if(Data == 0xA000) {LcdDatWrite(0xF81F);} //高低位 = 1
else if(Data == 0x8000) {LcdDatWrite(0xF800);} //最高位 = 1
else if(Data == 0x6000) {LcdDatWrite(0x07DF);} //中高位 = 1
else if(Data == 0x4000) {LcdDatWrite(0x07C0);} //中间位 = 1
else if(Data == 0x2000) {LcdDatWrite(0x001F);} //最低位 = 1
else LcdDatWrite(0x0000); //全 = 0
}
else
{
if(Data == 0xE000) //全 = 1
{
Gray_Scle = (ForeColor<<11)|(ForeColor<<6)|(ForeColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0xC000) //高中位 = 1
{
Gray_Scle = (ForeColor<<11)|(ForeColor<<6)|(BackColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0xA000) //高低位 = 1
{
Gray_Scle = (ForeColor<<11)|(BackColor<<6)|(ForeColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0x8000) //最高位 = 1
{
Gray_Scle = (ForeColor<<11)|(BackColor<<6)|(BackColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0x6000) //中低位 = 1
{
Gray_Scle = (BackColor<<11)|(ForeColor<<6)|(ForeColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0x4000) //中间位 = 1
{
Gray_Scle = (BackColor<<11)|(ForeColor<<6)|(BackColor);
LcdDatWrite(Gray_Scle);
}
else if(Data == 0x2000) //最低位 = 1
{
Gray_Scle = (BackColor<<11)|(BackColor<<6)|(ForeColor);
LcdDatWrite(Gray_Scle);
}
else //全 = 0
{
Gray_Scle = (BackColor<<11)|(BackColor<<6)|(BackColor);
LcdDatWrite(Gray_Scle);
}
}
}
/********************************************************************************************
函数功能:在液晶屏上显示1个12x6的ASCII码点阵。
输入参数:row - 行
:col - 列
:pattern - 字模数据的首地址
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-25 15:35:04 by edu_xy
********************************************************************************************/
void Font_12x6(UINT16 row, UINT16 col, UINT16 *pattern, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 *Data, i;
Data = pattern;
LcdCMDWrite(0x75); //Page address set
LcdDatWrite(row); //From line10 to line143
LcdDatWrite(row + 11); //11+1=12行
LcdCMDWrite(0x15); //Column address set
LcdDatWrite(col); //From column0 to column 79
LcdDatWrite(col+1); //3*(1+1)=6列
LcdCMDWrite(0x5C); //Entry Memory WriteTo7529 Mode
for(i=0; i<24; i++) //12行 每行6点 每行写2个word 共2*12=24个word
{
Show1Word(*Data++, ForeColor, BackColor); //显示1个word的字模数据
}
}
/********************************************************************************************
函数功能:设定显示位置,并将准备好的1个16x8的ASCII码字模送到LCD显示
输入参数:row - 行
:col - 列
:pattern - 字模数据的首地址
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-25 15:36:43 by edu_xy
********************************************************************************************/
void Font_16x8(UINT16 row, UINT16 col, UINT16 *pattern, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 *Data, i;
Data = pattern;
LcdCMDWrite(0x75); //Page address set
LcdDatWrite(row); //From line10 to line143
LcdDatWrite(row + 15); //15+1=16行
LcdCMDWrite(0x15); //Column address set
LcdDatWrite(col); //From column0 to column 79
LcdDatWrite(col + 2); //3*(2+1)=9列
LcdCMDWrite(0x5C); //Entry Memory WriteTo7529 Mode
for(i=0; i<48; i++) //16行 每行9点(8点有用) 每行写3个word 共3*16=48个word
{
Show1Word(*Data++, ForeColor, BackColor); //显示1个word的字模数据
}
}
/********************************************************************************************
函数功能:设定显示位置,并将准备好的12x12点阵的汉字字模数据送到LCD显示
入口参数:row - 行
:col - 列
:*pattern - 字模数据的首地址
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-25 15:30:23 by edu_xy
********************************************************************************************/
void Font12x12(UINT16 row, UINT16 col, UINT16 *pattern, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 *dat, i; // TO display 12page of 12*12 chinese
dat = pattern;
LcdCMDWrite(0x75); //Page address set
LcdDatWrite(row); //From line10 to line143
LcdDatWrite(row + 11);
LcdCMDWrite(0x15); //Column address set
LcdDatWrite(col); //From column0 to column 79
LcdDatWrite(col + 3);
LcdCMDWrite(0x5C); //Entry Memory WriteTo7529 Mode
for (i=0; i<48; i++)
{
Show1Word(*dat++, ForeColor, BackColor); //显示一个Word(3个像素)的数据
}
}
/*********************************************************************************************
函数功能:设定显示位置,并将准备好的16x16点阵的汉字字模数据送到LCD显示
输入参数:row - 行
:col - 列
:pattern - 字模数据的首地址
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-24 15:30:23 by edu_xy
*********************************************************************************************/
void Font_16x16(UINT16 row, UINT16 col, UINT16 *pattern, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 *Data,i;
Data = pattern;
LcdCMDWrite(0x75); //Page address set
LcdDatWrite(row); //From line10 to line143
LcdDatWrite(row + 15); //15+1=16行
LcdCMDWrite(0x15); //Column address set
LcdDatWrite(col); //From column0 to column 79
LcdDatWrite(col + 4); //3*(4+1)=15列
LcdCMDWrite(0x5C); //Entry Memory WriteTo7529 Mode
for(i=0; i<80; i++)
{
Show1Word(*Data++, BackColor, ForeColor); //显示1个word的字模数据
}
}
/***************************************************************************************
函数功能:显示一个12*6的ASCII码字符(每字符16行*9列)
入口参数:row - 行(0~8)
:col - 列(0~41)
:ISN - 要显示英文字符的ASCII码
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-25 9:06:36 by edu_xy
***************************************************************************************/
void YWXS_12x6(UINT16 row, UINT16 col, UINT16 ISN, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i;
UINT16 ZiMo[6];
UINT16 ShuJu[24];
UINT32 No;//字符集中的第几个
UINT32 addr;
UINT16 *ptr;
UINT16 *ptr2;
row = row*14 + 0x10;
col *= 2;
No = ISN;
addr = No*6;
ptr2 = &_RES_EDU_12X6_FONT_FON_sa;
ptr = addr + ptr2;
for(i=0; i<6; i++)
{
ZiMo[i]= *ptr++;
}
for(i=0; i<6; i++)
{
ShuJu[i*4+0] = ZiMo[i]&0xE000;
ShuJu[i*4+1] = (ZiMo[i]<<3)&0xE000;
ShuJu[i*4+2] = (ZiMo[i]<<8)&0xE000;
ShuJu[i*4+3] = (ZiMo[i]<<11)&0xE000;
}
Font_12x6(row, col, ShuJu, ForeColor, BackColor);
}
/****************************************************************************************
函数功能:以不同的方式显示汉字,每个汉字占2列。
入口参数:row - 汉字显示的行(0~8);
:col - 汉字显示的起始列(0~41);
:ISN - 要显示的汉字的内码;
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
修改时间:2008-7-25 14:02:01 by edu_xy
****************************************************************************************/
void HZXS_12x12(UINT16 row, UINT16 col, UINT16 ISN, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i;
UINT32 No;
UINT16 ZiMo[9];
UINT16 ShuJu[48];
UINT16 *ptr;
UINT32 ptr1;
UINT16 *ptr2;
row = row*14 + 0x0010;
col = col*2;
if(ISN == 0xAB98) {ISN = 0xAFE4;}//珮
else if(ISN == 0xE946) {ISN = 0xAFE5;}//镕
//定位字模位置,每个12x12点阵的字模占9个word
No = ((ISN/256)-0x00a1)*94+((ISN%256)-0x00a1);
ptr1 = No*9; //获得偏移量信息,每字9个word
ptr2 = &_RES_EDU_12X12_FONT_FON_sa;
ptr = ptr1 + ptr2; //妈的还必须这么写了,因为要跨bank
for (i=0; i<9; i++) {ZiMo[i] = *ptr++;}
//显示12x12点阵汉字前,先将9个word转换成48个word的数组,以供16位液晶显示
ShuJu[0] = ZiMo[0]&0xE000;
ShuJu[1] = (ZiMo[0]<<3)&0xE000;
ShuJu[2] = (ZiMo[0]<<6)&0xE000;
ShuJu[3] = (ZiMo[0]<<9)&0xE000;
ShuJu[4] = (ZiMo[0]<<12)&0xE000;
ShuJu[5] = ((ZiMo[0]<<15&0xE000))|((ZiMo[1]>>1)&0xE000);
ShuJu[6] = (ZiMo[1]<<2)&0xE000;
ShuJu[7] = (ZiMo[1]<<5)&0xE000;
ShuJu[8] = (ZiMo[1]<<8)&0xE000;
ShuJu[9] = (ZiMo[1]<<11)&0xE000;
ShuJu[10] = ((ZiMo[1]<<14&0xE000))|((ZiMo[2]>>2)&0xE000);
ShuJu[11] = (ZiMo[2]<<1)&0xE000;
ShuJu[12] = (ZiMo[2]<<4)&0xE000;
ShuJu[13] = (ZiMo[2]<<7)&0xE000;
ShuJu[14] = (ZiMo[2]<<10)&0xE000;
ShuJu[15] = (ZiMo[2]<<13)&0xE000;
ShuJu[16] = ZiMo[3]&0xE000;
ShuJu[17] = (ZiMo[3]<<3)&0xE000;
ShuJu[18] = (ZiMo[3]<<6)&0xE000;
ShuJu[19] = (ZiMo[3]<<9)&0xE000;
ShuJu[20] = (ZiMo[3]<<12)&0xE000;
ShuJu[21] = ((ZiMo[3]<<15&0xE000))|((ZiMo[4]>>1)&0xE000);
ShuJu[22] = (ZiMo[4]<<2)&0xE000;
ShuJu[23] = (ZiMo[4]<<5)&0xE000;
ShuJu[24] = (ZiMo[4]<<8)&0xE000;
ShuJu[25] = (ZiMo[4]<<11)&0xE000;
ShuJu[26] = ((ZiMo[4]<<14&0xE000))|((ZiMo[5]>>2)&0xE000);
ShuJu[27] = (ZiMo[5]<<1)&0xE000;
ShuJu[28] = (ZiMo[5]<<4)&0xE000;
ShuJu[29] = (ZiMo[5]<<7)&0xE000;
ShuJu[30] = (ZiMo[5]<<10)&0xE000;
ShuJu[31] = (ZiMo[5]<<13)&0xE000;
ShuJu[32] = ZiMo[6]&0xE000;
ShuJu[33] = (ZiMo[6]<<3)&0xE000;
ShuJu[34] = (ZiMo[6]<<6)&0xE000;
ShuJu[35] = (ZiMo[6]<<9)&0xE000;
ShuJu[36] = (ZiMo[6]<<12)&0xE000;
ShuJu[37] = ((ZiMo[6]<<15&0xE000))|((ZiMo[7]>>1)&0xE000);
ShuJu[38] = (ZiMo[7]<<2)&0xE000;
ShuJu[39] = (ZiMo[7]<<5)&0xE000;
ShuJu[40] = (ZiMo[7]<<8)&0xE000;
ShuJu[41] = (ZiMo[7]<<11)&0xE000;
ShuJu[42] = ((ZiMo[7]<<14&0xE000))|((ZiMo[8]>>2)&0xE000);
ShuJu[43] = (ZiMo[8]<<1)&0xE000;
ShuJu[44] = (ZiMo[8]<<4)&0xE000;
ShuJu[45] = (ZiMo[8]<<7)&0xE000;
ShuJu[46] = (ZiMo[8]<<10)&0xE000;
ShuJu[47] = (ZiMo[8]<<13)&0xE000;
Font12x12(row, col, ShuJu, ForeColor, BackColor); //显示12x12点阵汉字
}
/***************************************************************************************
函数功能:显示一个16*8的ASCII码字符(每字符16行*9列)
入口参数:row - 行(0~6)
:col - 列(0~27)
:ISN - 要显示英文字符的ASCII码
:ForeColor - 前景色
:BackColor - 背景色
函数说明:16x8点阵的字模显示比较特殊,因为液晶当成16x9处理(列必为3的倍数)
:也就是每行显示3个3点,每行的最后一个点,处理成空白
修改时间:2008-7-25 9:06:36 by edu_xy
***************************************************************************************/
void YWXS_16x8(UINT16 row, UINT16 col, UINT16 ISN, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i;
UINT16 ZiMo[8];
UINT16 ShuJu[48];
UINT32 No;//字符集中的第几个
UINT32 addr;
UINT16 *ptr;
UINT16 *ptr2;
row = row*18+0x0010;
col = col*3+1;
No = ISN;
addr = No*8;
ptr2 = &_RES_EDU_16X8_FONT_FON_sa;
ptr = addr + ptr2;
for(i=0; i<8; i++)
{
ZiMo[i]= *ptr++;
}
for(i=0; i<8; i++)
{
ShuJu[i*6+0] = ZiMo[i]&0xE000;
ShuJu[i*6+1] = (ZiMo[i]<<3)&0xE000;
ShuJu[i*6+2] = (ZiMo[i]<<6)&0xC000; //注意这里,这里忽略了第三个点
ShuJu[i*6+3] = (ZiMo[i]<<8)&0xE000; //这里补上对忽略的点的处理
ShuJu[i*6+4] = (ZiMo[i]<<11)&0xE000;
ShuJu[i*6+5] = ZiMo[i]<<14;
}
Font_16x8(row, col, ShuJu, ForeColor, BackColor);
}
/***************************************************************************************
函数功能: 16X16点阵的汉字显示。
入口参数:row - 行(0~6)
:col - 列(0~13)
:ISN - 汉字内码
:ForeColor - 前景色
:BackColor - 背景色
出口参数:None
函数说明:输入的行的标号与液晶实际行的对应,则用户输入的行数为0-7而液晶的是0x10-(130+0x10)
:输入的列的标号与液晶实际列的对应,则用户输入的列数为0-13而液晶的是0-84
修改时间:2008-7-25 15:33:38 by edu_xy
****************************************************************************************/
void HZXS_16x16(UINT16 row, UINT16 col, UINT16 ISN, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i;
UINT16 ZiMo[16];
UINT16 ShuJu[80];
UINT32 No;//字符集中的第几个字=区*94+位
UINT32 addr;
UINT16 *ptr;
UINT16 *ptr2;
row = row*18 + 0x0010 + 4;
col = col*6 + 1;
//定位字模数据,每个16x16点阵的字模占16个word
if(SYS_ISN == SYSTEM_ISN_CN)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -