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

📄 display.c

📁 台湾联咏科技NT7553E液晶资料、驱动、工具等。
💻 C
📖 第 1 页 / 共 5 页
字号:
函数功能:清除(或反色)屏幕上的一个矩形区域。
入口参数:X0 - 起始行
		:Y0 - 起始(第几个3)列
		:X1 - 结束行
		:Y1 - 结束(第几个3)列
		:MODE - 0(高亮清屏)/1(反色清屏)
出口参数:None
修改时间:2008-7-25 8:15:50 by edu_xy
***************************************************************************************/
void RectangleClr(UINT16 X0, UINT16 Y0, UINT16 X1, UINT16 Y1, UINT16 MODE)
{
	UINT16 H,V,gray,AC;

	NT7553E_WINDOW(Y0, Y1, X0, X1, 0);

	gray = (MODE==0)?0x0000:0xffdf;

	for(H=Y0;H<=Y1;H++)
	{
		for(V=X0;V<=X1;V++)
		{
			AC = (V<<8)|H;
			NT7553E_RXX_WR(R21,AC);
			NT7553E_RXX_WR(R22,gray);
		}
	}
}

/*******************************************************************************
函数功能:擦除1行上的若干个字符
输入参数:row--要擦出字符的行位置;
		:c0 --要擦出字符的起始列位置;
		:c1 --要擦出字符的结束列位置。
修改时间:2008-10-4 13:10:48 PM by edu_xy
*******************************************************************************/
void Clr_12_Line(UINT16 row, UINT16 c0, UINT16 c1,UINT16 gray)
{
	UINT16 x0,x1,y0,y1;

	x0 = row * 14;
	x1 = x0 + 14;
	y0 = c0 * 2;
	y1 = c1 * 2;
	RectangleClr(x0, y0, x1, y1, gray);
}

/*******************************************************************************
函数功能:清屏幕部分"行"
入口参数:startrow	- 起始行
		:endrow		- 结束行
		:mode		- 0清空/1反色
出口参数:None
函数说明:起始行<=结束行
修改时间:2008-08-06 8:14:44 edu_chenyh
		:2008-12-29 9:12:30 edu_xy (起始行可等于结束行)
*******************************************************************************/
void LcdPartClear(UINT16 StartRow, UINT16 EndRow, UINT16 mode)
{
	UINT16 i,gray;

	gray = (mode==0)?0:31;

	for(i=StartRow;i<=EndRow;i++)
	{
		Clr_12_Line(i, 0, 0x35, gray);
	}

}

#else
/***************************************************************************************
函数功能:清除屏幕内容。
入口参数:mode - 0(清屏)/1(反色清屏)
出口参数:None
修改时间:2008-7-30 8:14:44 AM by edu_xy
***************************************************************************************/
void LcdClear(UINT16 mode)
{
	UINT16 i;

	LcdCMDWrite(0x0075);					//First	command set line address
	LcdDatWrite(0x0010);					//START LINE
	LcdDatWrite(0x0010 + 0x007f);			//0x7f+1=128, END LINE, 143, 143-16=127,(0~127)共128行
	LcdCMDWrite(0x0015);					//Second COMMAND SET COLUMN ADDRESS
	LcdDatWrite(0x0000);					//START COLUMN
	LcdDatWrite(0x0000 + 0x0054);			//(0x54+1)*3=255, END COLUMN, 84, 0~84, 85*3=255个点一行
	LcdCMDWrite(0x005C);					//DATA WRITE

	//2B3P模式,1个Word数据3个像素,(255*128)/3=10080
	if(mode == 0)
	{
		for(i=0; i<10880; i++){ LcdDatWrite(0x0000); }
	}
	else
	{
		for(i=0; i<10880; i++){ LcdDatWrite(0xFFFF); }
	}
}

/***************************************************************************************
函数功能:清除(或反色)屏幕上的一个矩形区域。
入口参数:X0 - 起始行
		:Y0 - 起始(第几个3)列
		:X1 - 结束行
		:Y1 - 结束(第几个3)列
		:MODE - 0(高亮清屏)/1(反色清屏)
出口参数:None
修改时间:2008-7-25 8:15:50 by edu_xy
***************************************************************************************/
void RectangleClr(UINT16 X0, UINT16 Y0, UINT16 X1, UINT16 Y1, UINT16 MODE)
{
	UINT16 i, j, xlenth, ylenth, data;

	if(MODE == 0) {data = 0x0000;}
	else {data = 0xFFFF;}

	xlenth = Y1-Y0+1;				//得到行上应写入的word数(1word=3点)
	ylenth = X1-X0+1;				//得到应写入的行数

	LcdCMDWrite(0x0075);			//THIRD COMMAND SET LINE ADDRESS
	LcdDatWrite(0x0010 + X0);		//START LINE(第几行)
	LcdDatWrite(0x0010 + X1);		//END LINE(第几行)

	LcdCMDWrite(0x0015);			//THIRD COMMAND SET COLUMN ADDRESS
	LcdDatWrite(Y0);				//START COLUMN(第几个3列)
	LcdDatWrite(Y1);				//END COLUMN(第几个3列)
	LcdCMDWrite(0x005C);			//DATA WRITE

	for(i=0; i<ylenth; i++)
	{
		for (j=0; j<xlenth; j++)
		{
			LcdDatWrite(data);		//对液晶中的的一个点写入信息
		}
	}
}


/*******************************************************************************
函数功能:擦除1行上的若干个字符
输入参数:row--要擦出字符的行位置;
		:c0 --要擦出字符的起始列位置;
		:c1 --要擦出字符的结束列位置。
修改时间:2008-10-4 13:10:48 PM by edu_xy
*******************************************************************************/
void ClrLine(UINT16 row, UINT16 c0, UINT16 c1)
{
	UINT16 x0, x1, y0, y1;

	x0 = row * 14;
	x1 = (row + 1) * 14 - 1;
	y0 = c0 * 2;
	y1 = c1 * 2 + 1;
	RectangleClr(x0, y0, x1, y1, 0);
}

/*******************************************************************************
函数功能:清屏幕部分"行"
入口参数:startrow	- 起始行
		:endrow		- 结束行
		:mode		- 0清空/1反色
出口参数:None
函数说明:起始行<=结束行
修改时间:2008-08-06 8:14:44 edu_chenyh
		:2008-12-29 9:12:30 edu_xy (起始行可等于结束行)
*******************************************************************************/
void LcdPartClear(UINT16 StartRow, UINT16 EndRow, UINT16 mode)
{
	UINT16 i, temp;

    StartRow = StartRow*14 + 0x10;
    EndRow = EndRow*14 + 0x10 + 13;
	LcdCMDWrite(0x0075);				//THIRD	COMMAND SET LINE ADDRESS
	LcdDatWrite(StartRow);				//START LINE
	LcdDatWrite(EndRow);				//0x7f+1=128, End line, 143, 143-16=127,(0~127)共128行
	LcdCMDWrite(0x0015);				//THIRD	COMMAND SET COLUMN ADDRESS
	LcdDatWrite(0x0000);				//START COLUMN
	LcdDatWrite(0x0000 + 0x0054);		//(0x54+1)*3=255, END COLUMN, 84, 0~84, 85*3=255个点一行
	LcdCMDWrite(0x005C);				//DATA WRITE

	temp = 85 * (EndRow - StartRow + 1);//计算数据量

	//2B3P模式,1个Word数据3个像素
	if(mode == 0) { for(i=0; i<temp; i++) { LcdDatWrite(0x0000); } }
	else { for(i=0; i<temp; i++) { LcdDatWrite(0xffff); } }
}

#endif

#ifdef __NT7553E__

void Horizontal_Line(UINT16 y, UINT16 x0, UINT16 x1, UINT16 Gray)
{
	UINT16 i;

	NT7553E_WINDOW(0x00,0x83,0x00,0xa1,0);

	if(x1<x0)
	{
		i = x1;
		x1 = x0;
		x0 = i;
	}

	for(i=x0; i<=x1; i++)
	{
		NT7553E_DOT(i, y, Gray);
	}
}

void Vertical_Line(UINT16 x, UINT16 y0, UINT16 y1, UINT16 Gray)
{
	UINT16 i;

	NT7553E_WINDOW(0x00,0x83,0x00,0xa1,0);

	if(y1<y0)
	{
		i = y1;
		y1 = y0;
		y0 = i;
	}

	for(i=y0; i<=y1; i++)
	{
		NT7553E_DOT(x, i, Gray);
	}
}

/*******************************************************************************
函数功能:在屏幕上画一个矩形框
入口参数:x0,y0 - 起点坐标(x0为水平坐标,y0为垂直坐标)
		:x1,y1 - 终点坐标(x1为水平坐标,y1为垂直坐标)
出口参数:None
*******************************************************************************/
void Box(UINT16 x0,UINT16 y0,UINT16 x1,UINT16 y1)
{
	Vertical_Line(x0, y0, y1, 31);		//竖线 [左]
	Vertical_Line(x1, y0, y1, 31);		//竖线 [右]
	Horizontal_Line(y0, x0, x1, 31);	//横线 [上]
	Horizontal_Line(y1, x0, x1, 31);	//横线 [下]
}

#else
/***********************************************************************************************
功能描述:显示一条横线[---]
入口参数:y - 水平线所在行(0~127)
		:x0 - 水平线起始列(0~254)
		:x1 - 水平线结束列(0~254)
		:Gray - 灰度值(0~31)
出口参数:None
函数说明:注意,起始列x0 < 结束列x1
修改时间:2008-12-27 14:06:56 by edu_xy
***********************************************************************************************/
void Horizontal_Line(UINT16 y, UINT16 x0, UINT16 x1, UINT16 Gray)
{
	UINT16 i, j;

	j = y + 16;
	for(i=x0; i<=x1; i++)
	{
		PutPoint(i, j, Gray*8);
	}
}

/*********************************************************************************************
功能描述:显示一条竖线[ | ]
入口参数:x - 竖直线所在列(0~254)
		:y0 - 竖直线起始行(0~127)
		:y1 - 竖直线结束行(0~127)
		:Gray - 灰度值(0~31)
出口参数:None
函数说明:注意,起始行y0 < 结束行y1
修改时间:2008-12-27 14:06:07 by edu_xy
*********************************************************************************************/
void Vertical_Line(UINT16 x, UINT16 y0, UINT16 y1, UINT16 Gray)
{
	UINT16 i, y_0, y_1;

	y_0 = y0 + 16;
	y_1 = y1 + 16;

	for(i=y_0; i<=y_1; i++)
	{
		PutPoint(x, i, Gray*8);
	}
}

//画语音波形用,暂时保留
void Vertical_Line1(unsigned int y0, unsigned int x0, unsigned int x1)
{
	int i, temp;

	if (x1 <= x0) {temp = x1; x1 = x0; x0 = temp;}
	for(i = x0; i <= x1; i++)
	{
		PutPoint(y0, i, 0x00f8);
	}
}

#endif

/*********************************************************************************************
功能描述:显示一个矩形
入口参数:x0 - 起始行(0~127)
		:x1 - 结束行(0~127)
		:y0 - 起始列(0~255)
		:y1 - 结束列(0~255)
出口参数:None
修改时间:2008-12-27 14:07:58 edu_xy
*********************************************************************************************/
void Rectangle(UINT16 X0, UINT16 X1, UINT16 Y0, UINT16 Y1)
{
	Vertical_Line(Y0, X0, X1, 31);		//竖线 [左]
	Vertical_Line(Y1, X0, X1, 31);		//竖线 [右]
	Horizontal_Line(X0, Y0, Y1, 31);	//横线 [上]
	Horizontal_Line(X1, Y0, Y1, 31);	//横线 [下]
}

#ifdef __NT7553E__

/***************************************************************************************
函数功能:显示一个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 ASCII, UINT16 ForeColor, UINT16 BackColor)
{
	UINT32 offset;
	UINT16 *ptr;

	offset = ASCII*6;

	ptr = &_RES_EDU_12X6_FONT_FON_sa;
	ptr+=offset;

	__FONT_12_6__(ptr, (col*6), (row*14), 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 No;
	UINT32 offset;
	UINT16 *ptr;

	if(ISN == 0xAB98) {ISN = 0xAFE4;}//珮
	else if(ISN == 0xE946) {ISN = 0xAFE5;}//镕

	No = ((ISN>>8)-0x00a1)*94+((ISN&0x00ff)-0x00a1);//定位字模位置,每个12x12点阵的字模占9个word
	offset = No*9;

	ptr = &_RES_EDU_12X12_FONT_FON_sa;
	ptr+=offset;

	__FONT_12_12__(ptr,(col*6),(row*14),ForeColor,BackColor);

}

/***************************************************************************************
函数功能:显示一个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)
{
	UINT32 offset;
	UINT16 *ptr;

	offset = ISN<<3;
	ptr = &_RES_EDU_16X8_FONT_FON_sa;
	ptr += offset;

	__FONT16_8__(ptr, (col*9), (row*18), 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)
{
	UINT32 No;//字符集中的第几个字=区*94+位
	UINT32 offset;
	UINT16 *ptr;

	//定位字模数据,每个16x16点阵的字模占16个word
	if(SYS_ISN == SYSTEM_ISN_CN)
	{
		No = ISN/256;
		ISN%=256;
		if((No<0xa1)||(No==0xff)||(ISN<0xa1)||(ISN==0xff)){No = 0x66;}
		else{No = (No-0x00a1)*94+(ISN-0x00a1);}
		ptr = &_RES_EDU_16X16_FONT_FON_sa;
	}
	else if(SYS_ISN == SYSTEM_ISN_JP)
	{
		No = ISN/256;
		offset = ISN%256;
		if((No<0x81)||((No>0x9f)&&(No<0xE0))||(No>0xEF)){No = 0x60;}
		else if((offset<0x40)||(offset==0x7f)||(offset>0xfc)){No = 0x60;}
		else
		{
			if(ISN<0xe000){No -= 0x81;}
			else{No -= 0xc1;}

			if(offset<0x7f){offset -= 0x40;}
			else{offset -= 0x41;}

			No = No*188 + offset;
		}
		ptr = &_RES_EDU_NEW_FONT_FON_sa;
	}

	offset = No*16;
	ptr += offset;

	__FONT16_16__(ptr, (col*18), (row*18), ForeColor, BackColor);

}

/***************************************************************************************************
功能描述:显示文本(汉字+ASCII码)
入口参数:row - 行(0~8)
		:col - 列(0~41)
		:*str- 要显示的字符串
		:ForeColor - 前景色
		:BackColor - 背景色
返 回 值:无
日    期:2008-5-20 15:55:04
注    释:用户按照规格输入行号,列号分别是1-10行,1-21列
***************************************************************************************************/
void Text_2_Screen_16(UINT16 row, UINT16 col, const void *str, UINT16 ForeColor, UINT16 BackColor)
{
	UINT16 i, ISN;
	UINT16 *ptr = (UINT16 *)str;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -