⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 台湾联咏科技NT7553E液晶资料、驱动、工具等。
💻 C
📖 第 1 页 / 共 5 页
字号:
	{
		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 + -