📄 display.c
字号:
{
No = ((ISN/256)-0x00a1)*94+((ISN%256)-0x00a1);
ptr2 = &_RES_EDU_16X16_FONT_FON_sa;
}
else if(SYS_ISN == SYSTEM_ISN_JP)
{
No = ISN/256;
i = ISN%256;
if((No<0x81)||((No>0x9f)&&(No<0xE0))||(No>0xEF)){No = 0x60;}
else if((i<0x40)||(i==0x7f)||(i>0xfc)){No = 0x60;}
else
{
if(ISN<0xe000){No -= 0x81;}
else{No -= 0xc1;}
if(i<0x7f){i -= 0x40;}
else{i -= 0x41;}
No = No*188 + i;
}
ptr2 = &_RES_EDU_NEW_FONT_FON_sa;
}
addr = No*16;
ptr = addr + ptr2;
//提取字模数据
if(No < 8178)
{
for(i=0; i<16; i++) {ZiMo[i]= *ptr++;}
}
else
{
for(i=0; i<16; i++){ZiMo[i]=CURSOR[i];} //光标
}
//对显示的数据做必要的处理
for(i=0; i<16; i++)
{
ShuJu[i*5] = ZiMo[i]&0xE000;
ShuJu[i*5 + 1] = (ZiMo[i]<<3)&0xE000;
ShuJu[i*5 + 2] = (ZiMo[i]<<6)&0xE000;
ShuJu[i*5 + 3] = (ZiMo[i]<<9)&0xE000;
ShuJu[i*5 + 4] = (ZiMo[i]<<12)&0xE000;
}
Font_16x16(row, col, ShuJu, ForeColor, BackColor);
}
/*************************************************************************************************
函数功能:在任意位置显示任意大小的灰度图片
入口参数: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;
UINT16 *ptr;
UINT16 *BMP_P;
UINT16 X1;
UINT16 Y1;
X1 = height + X0 - 1; //结束行
Y1 = width/3 + Y0 -1; //结束列(第几个3列)
BMP_P = (unsigned int *)Addr;
j = ( height * width ) / 3; //计算数据量
LcdCMDWrite(0x0075); //First command set line address
LcdDatWrite(0x0010 + X0); //Start line(第几行)
LcdDatWrite(0x0010 + X1); //End line(第几行)
LcdCMDWrite(0x0015); //Second command set column address
LcdDatWrite(Y0); //Start column(第几个3列)
LcdDatWrite(Y1); //End column(第几个3列)
LcdCMDWrite(0x005C); //Data write
if(Mode == 0)
{
for(i=0; i<j; i++)
{
ptr = BMP_P + i;
LcdDatWrite(~*ptr);
}
}
else
{
for(i=0; i<j; i++)
{
ptr = BMP_P + i;
LcdDatWrite(*ptr);
}
}
}
#endif
#ifdef __NT7553E__
void Backup_LCD_RAM(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr)
{
UINT16 i, j, Y1, X1, AC;
UINT16 *p;
p = (unsigned int *)Addr;
Y1 = Y0 + width/3; //结束行
X1 = X0 + height; //结束列(第几个3列)
NT7553E_WINDOW(Y0, (Y1-1), X0, (X1-1),0);
for(i=X0;i<X1;i++)
{
for(j=Y0;j<Y1;j++)
{
NT7553E_DAT_RD(*p);
NT7553E_DAT_RD(*p);
p++;
AC = (i<<8)|j;
NT7553E_RXX_WR(R21, AC);
NT7553E_CMD_WR(R22);
}
}
}
/**********************************************************************************
函数功能:恢复之前备份过的LCD数据(用于窗口恢复)
入口参数:X0 - 起始行
:Y0 - 起始列(第几个3列)
:width - 宽度
:height - 高度
:Addr - 图片首地址
出口参数:None
函数说明:恢复窗口程序,将液晶屏幕上指定的数据备份到SRAM,以便以后恢复
修改时间:2008-7-29 12:46:49 by edu_xy
**********************************************************************************/
void Resume_LCD_RAM(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr)
{
UINT16 i, j, Y1, X1, AC;
UINT16 *p;
p = (unsigned int *)Addr;
Y1 = Y0 + width/3;
X1 = X0 + height;
NT7553E_WINDOW(Y0, (Y1-1), X0, (X1-1), 0);
for(i=X0;i<X1;i++)
{
for(j=Y0;j<Y1;j++)
{
NT7553E_DAT_WR(*p);
p++;
AC = (i<<8)|j;
NT7553E_RXX_WR(R21, AC);
NT7553E_CMD_WR(R22);
}
}
}
#else
/*****************************************************************************************
功能描述:显示"爱丁数码"的240*128点阵logo图片
备 注:字模以数组的形式,后期要作为资源添加到NorFlash
*****************************************************************************************/
/*
void DispPic(UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i,ii;
UINT16 *BMP_P;
UINT16 HuanCun[3];
UINT16 ShuJu[16];
LcdCMDWrite(0x0075); //Page address set
LcdDatWrite(0x0010); //From line16 to line143
LcdDatWrite(0x0010+0x007f); //0x7f+1=128
LcdCMDWrite(0x0015); //Column address set
LcdDatWrite(0x0002); //From column0 to column 79
LcdDatWrite(0x0002+0x004f); //(0x4f+1)*3=240
LcdCMDWrite(0x005C); //Entry Memory WriteTo7529 Mode
BMP_P = &logo[0];
for(i=0; i<640; i++)
{
for(ii=0; ii<3; ii++){HuanCun[ii]=*BMP_P++;}
ShuJu[0] = HuanCun[0]&0xE000;
ShuJu[1] = (HuanCun[0]<<3)&0xE000;
ShuJu[2] = (HuanCun[0]<<6)&0xE000;
ShuJu[3] = (HuanCun[0]<<9)&0xE000;
ShuJu[4] = (HuanCun[0]<<12)&0xE000;
ShuJu[5] = ((HuanCun[0]<<15&0xE000))|((HuanCun[1]>>1)&0xE000);
ShuJu[6] = (HuanCun[1]<<2)&0xE000;
ShuJu[7] = (HuanCun[1]<<5)&0xE000;
ShuJu[8] = (HuanCun[1]<<8)&0xE000;
ShuJu[9] = (HuanCun[1]<<11)&0xE000;
ShuJu[10] = ((HuanCun[1]<<14&0xE000))|((HuanCun[2]>>2)&0xE000);
ShuJu[11] = (HuanCun[2]<<1)&0xE000;
ShuJu[12] = (HuanCun[2]<<4)&0xE000;
ShuJu[13] = (HuanCun[2]<<7)&0xE000;
ShuJu[14] = (HuanCun[2]<<10)&0xE000;
ShuJu[15] = (HuanCun[2]<<13)&0xE000;
for(ii=0; ii<16; ii++) {Show1Word(ShuJu[ii], ForeColor, BackColor);}
}
}
//*/
/**********************************************************************************
函数功能:将液晶屏幕上指定的数据备份到SRAM
入口参数:X0 - 起始行
:Y0 - 起始列(第几个3列)
:width - 宽度
:height - 高度
:Addr - 图片首地址
出口参数:None
函数说明:开窗口前的数据备份程序,将液晶屏幕上指定的数据备份到SRAM,以便以后恢复
修改时间:2008-7-29 13:29:34 by edu_xy
**********************************************************************************/
void Backup_LCD_RAM(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr)
{
UINT16 i, j;
UINT16 *BMP_P;
UINT16 X1;
UINT16 Y1;
X1 = height + X0 - 1; //结束行
Y1 = width/3 + Y0 -1; //结束列(第几个3列)
BMP_P = (unsigned int *)Addr;
j = ( height * width ) / 3; //计算数据量
LcdCMDWrite(0x0075); //First Command - Set Line Address
LcdDatWrite(0x0010 + X0); //START Line(第几行)
LcdDatWrite(0x0010 + X1); //End Line(第几行)
LcdCMDWrite(0x0015); //Second Command - Set Column Address
LcdDatWrite(Y0); //Start Column(第几个3列)
LcdDatWrite(Y1); //End Column(第几个3列)
LcdCMDWrite(0x005D); //Data "Read"
X1 = LcdDATRead(); //根据PDF,读出来的第一位丢弃
for(i=0; i<j; i++)
{
*BMP_P = LcdDATRead(); //对液晶读取数据
BMP_P++;
}
}
/**********************************************************************************
函数功能:恢复之前备份过的LCD数据(用于窗口恢复)
入口参数:X0 - 起始行
:Y0 - 起始列(第几个3列)
:width - 宽度
:height - 高度
:Addr - 图片首地址
出口参数:None
函数说明:恢复窗口程序,将液晶屏幕上指定的数据备份到SRAM,以便以后恢复
修改时间:2008-7-29 12:46:49 by edu_xy
**********************************************************************************/
void Resume_LCD_RAM(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr)
{
UINT16 i, j;
UINT16 *BMP_P;
UINT16 X1;
UINT16 Y1;
X1 = height + X0 - 1; //结束行
Y1 = width/3 + Y0 -1; //结束列(第几个3列)
BMP_P = (unsigned int *)Addr;
j = ( height * width ) / 3; //计算数据量
LcdCMDWrite(0x0075); //First Command - Set Line Address
LcdDatWrite(0x0010 + X0); //START Line(第几行)
LcdDatWrite(0x0010 + X1); //End Line(第几行)
LcdCMDWrite(0x0015); //Second Command - Set Column Address
LcdDatWrite(Y0); //Start Column(第几个3列)
LcdDatWrite(Y1); //End Column(第几个3列)
LcdCMDWrite(0x005C); //Data "Write"
for(i=0; i<j; i++)
{
LcdDatWrite(*BMP_P); //对液晶中的的一个点写入信息
BMP_P++;
}
}
#endif
/***************************************************************************************************
功能描述:显示文本(汉字+ASCII码)
入口参数:row - 行(0~8)
:col - 列(0~41)
:*str- 要显示的字符串
:ForeColor - 前景色
:BackColor - 背景色
返 回 值:无
日 期:2008-5-20 15:55:04
注 释:用户按照规格输入行号,列号分别是1-10行,1-21列
***************************************************************************************************/
void Text_2_Screen_12(UINT16 row, UINT16 col, const void *str, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 i, ISN;
UINT16 *ptr = (UINT16 *)str;
i = 0;
while (ptr[i]!= '\0')
{
if (ptr[i]>=0x00A1) //国标码
{
ISN = ptr[i]*256;
i++;
ISN = ISN + ptr[i];
HZXS_12x12(row, col, ISN, ForeColor, BackColor);
col++;
}
else //ASCII码
{
YWXS_12x6(row, col, ptr[i], ForeColor, BackColor);
}
i++;
col++;
}
}
/***************************************************************************************************
函数功能:指定位置显示缩略图
入口参数:X0 - 起始行
:Y0 - 起始列(第几个3列)
:width - 原始宽度
:height - 原始高度
:Addr - 图片首地址
:Mode - 0(正常显示)/1(反色显示)
出口参数:None
修改时间:2008-12-24 15:01:54 by edu_xy
***************************************************************************************************/
void Show_One_Thumbnail(UINT16 X0, UINT16 Y0, UINT16 width, UINT16 height, UINT32 Addr, UINT16 Mode)
{
UINT16 i, j, k;
UINT16 *ptr;
UINT16 X1;
UINT16 Y1;
UINT16 dat, datA, datB, datC, dat1, dat2, dat3;
X1 = height/3 + X0 - 1; //结束行
Y1 = width/9 + Y0 -1; //结束列(第几个9列)
ptr = (unsigned int *)Addr;
j = ( height * width ) / 9; //计算数据量
LcdCMDWrite(0x0075); //First command set line address
LcdDatWrite(0x0010 + X0); //Start line(第几行)
LcdDatWrite(0x0010 + X1); //End line(第几行)
LcdCMDWrite(0x0015); //Second command set column address
LcdDatWrite(Y0); //Start column(第几个3列)
LcdDatWrite(Y1); //End column(第几个3列)
LcdCMDWrite(0x005C); //Data write
k = 0;
for(i=0; i<j; i+=3)
{
dat1 = *ptr >> 11;
dat2 = *ptr & 0x07FF;
dat2 = dat2 >> 6;
dat3 = *ptr & 0x001F;
datA = (dat1 + dat2 + dat3)/3;
datA = datA << 11;
ptr++;
dat1 = *ptr >> 11;
dat2 = *ptr & 0x07FF;
dat2 = dat2 >> 6;
dat3 = *ptr & 0x001F;
datB = (dat1 + dat2 + dat3)/3;
datB = datB << 6;
ptr++;
dat1 = *ptr >> 11;
dat2 = *ptr & 0x07FF;
dat2 = dat2 >> 6;
dat3 = *ptr & 0x001F;
datC = (dat1 + dat2 + dat3)/3;
ptr++;
dat = datA | datB | datC;
k++;
if(Mode == 0)
{
LcdDatWrite(~dat);
}
else
{
LcdDatWrite(dat);
}
if(k == (width/3))
{
k = 0;
ptr = ptr + width*2;
}
}
}
/*******************************************************************************
函数功能:显示在RAM中的图片数据,图片大小为72x45
入口参数:row 为12x6字模的行(0~8)
:
:
:
出口参数:None
修改时间:2008-8-6 8:14:44 AM by edu_chenyh
*******************************************************************************/
void DispWord_Pic(UINT16 row, UINT16 col, UINT16 length, UINT16 width, UINT32 ramadd)
{
UINT16 i, temp;
UINT16 *ptr;
row = row*14 + 0x10; //固定在12x12字模显示的0~8行
LcdCMDWrite(0x0075); //Page address set
LcdDatWrite(row); //From line16 to line143
LcdDatWrite(row+length-1); //71+1=72
LcdCMDWrite(0x0015); //Column address set
LcdDatWrite(col); //From column0 to column 79
LcdDatWrite(col-1+width/3); //(14+1)*3=45
LcdCMDWrite(0x005C); //Entry Memory WriteTo7529 Mode
ptr = (UINT16 *)ramadd;
temp = length*width/3;
for(i=0; i<temp; i++) // 72*45/3=1080
{
LcdDatWrite(~*ptr);
ptr++;
}
}
/******************************************************************************************************
函数功能:在指定的行列位置顯示字符(+汉字)串
入口參數:row -要顯示的汉字的行位置,由0开始
:column -要顯示的汉字的列位置,由0开始
:Addr -要顯示的字符串的起始位置
:EOT -结束标志符(此字符不顯示)
出口參數:地址
修改時間:2008-8-10 7:50:41 by edu_xy
******************************************************************************************************/
void DisplayString(UINT16 Lin, UINT16 Col, UINT32 Addr, UINT16 EOT, UINT16 ForeColor, UINT16 BackColor)
{
UINT16 ISN, temp;
UINT16 *p;
p = (UINT16 *)Addr;
temp = *p++;
while(temp != EOT)
{
if(temp >= 0x00A1)
{
if(Col >= 41) {Col = 0; Lin++;}
ISN = temp;
te
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -