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

📄 display.c

📁 台湾联咏科技NT7553E液晶资料、驱动、工具等。
💻 C
📖 第 1 页 / 共 5 页
字号:

	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 + -