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

📄 display.c

📁 台湾联咏科技NT7553E液晶资料、驱动、工具等。
💻 C
📖 第 1 页 / 共 5 页
字号:
	UINT16 i,j,gray,dot16,dummy;
	UINT16 ZiMo80[80];

	if(H%3==0)
	{
		NT7553E_WINDOW(H/3, (H/3+5), V, (V+15), 1);
		for(i=0;i<16;i++)
		{
			dot16 = ZiMo[i];
			for(j=0;j<5;j++)
			{
				gray = ((((dot16&0x8000)==0)?FG:BG)<<11);
				gray |= ((((dot16&0x4000)==0)?FG:BG)<<6);
				gray |= (((dot16&0x2000)==0)?FG:BG);
				ZiMo80[i*5+j] = gray;
				dot16<<=3;
			}
		}

		for(i=0;i<16;i++)
		{
			dummy = H % 3;
			for(j=0;j<dummy;j++)
			{
				NT7553E_DAT_WR(0x0000);
			}
			for(j=0;j<5;j++)
			{
				gray = ZiMo80[i*5+j];
				NT7553E_DAT_WR(gray);
			}
			dummy = 3 - (H % 3);
			for(j=0;j<dummy;j++)
			{
				NT7553E_DAT_WR(0x0000);
			}
		}
	}
	else
	{
		__FONT16_16__(ZiMo, H, V, FG, BG);
	}
}

void HZ16_ALL(void)
{
	UINT16 i,j,*p;

	p = &_RES_EDU_16X16_FONT_FON_sa;
	for(i=0;i<9;i++)
	{
		for(j=0;j<20;j++)
		{
			__FONT16_16__(p, j*18, i*18, 31, 0);
			p+=16;
		}
	}
}

void HZ16_ALL_HWM(void)
{
	UINT16 i,j,*p;

	p = &_RES_EDU_16X16_FONT_FON_sa;
	for(i=0;i<9;i++)
	{
		for(j=0;j<20;j++)
		{
			__FONT16_16_HWM__(p, j*18, i*18, 31, 0);
			p+=16;
		}
	}
}

void HZ8_ALL(void)
{
	UINT16 i,j,*p;

	p = &_RES_EDU_16X8_FONT_FON_sa;
	for(i=0;i<9;i++)
	{
		for(j=0;j<40;j++)
		{
			__FONT16_8__(p, j*9, i*18, 31, 0);
			p+=8;
		}
	}
}

void HZ12_ALL(void)
{
	UINT16 i,j;
	UINT16 *p;

	p = &_RES_EDU_12X12_FONT_FON_sa;
	for(i=0;i<11;i++)
	{
		for(j=0;j<26;j++)
		{
			__FONT_12_12__(p,j*12,i*14,31,0);
			p+=9;
		}
	}
}

void HZ6_ALL(void)
{
	UINT16 i,j,*p;

	p = &_RES_EDU_12X6_FONT_FON_sa;
	for(i=0;i<11;i++)
	{
		for(j=0;j<53;j++)
		{
			__FONT_12_6__(p, j*6, i*14, 31, 0);
			p+=6;
		}
	}
}

void NT7553E_CT(void)
{
	UINT16 ct,key;

	NT7553E_SR_RD(ct);
	ct &=0x00ff;

	while(1)
	{
		key = getkey();

		if(key==KEY_ENTER){break;}
		else if(key==KEY_DOWNARROW)
		{
			if(ct>0x30){ct--;}
			NT7553E_RXX_WR(R04,(ct|0x0100));
		}
		else if(key==KEY_UPARROW)
		{
			if(ct<0x7f){ct++;}
			NT7553E_RXX_WR(R04,(ct|0x0100));
		}
	}
}

void NT7553E_TEST(void)
{
	UINT16 ID;

	while(1)
	{
		NT7553E_RST();
		NT7553E_CMD_WR(R00);
		NT7553E_DAT_RD(ID);
		if(ID==0x7553){break;}
		else{;}
	}

	NT7553E_INITIAL(0x0155);

	SYS_ISN = SYSTEM_ISN_CN;
	while (1)
	{
		NT7553E_BLACK();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_GRAY32();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		Text_2_Screen_12(0, 1, "这是我的第一行文字!This is my 1st word!", 31, 0);
		Text_2_Screen_12(1, 1, "这是我的第二行文字!This is my 2nd word!", 31, 0);
		Text_2_Screen_16(2, 1, "这是我的第三行文字!This is my 3rd word!", 31, 0);
		Text_2_Screen_16(3, 1, "这是我的第四行文字!This is my 4th word!", 31, 0);
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		Rectangle(0, 159, 0, 319);
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		HZ16_ALL();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		HZ16_ALL_HWM();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		HZ8_ALL();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		HZ12_ALL();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}

		NT7553E_WHITE();
		HZ6_ALL();
		ID = GetAnyKey();
		if(KEY_F12==ID){NT7553E_CT();}
		else if(KEY_ESC==ID){break;}


//
//		NT7553E_H_BAR();
//		Delay(1000);
//
//		NT7553E_V_BAR();
//		Delay(1000);

//		NT7553E_SNOW();
//		Delay(100);

	}
}

#endif

/***************************************************************************************
函数功能:软件复位ST7529
入口参数:None
出口参数:None
修改时间:2008-7-30 11:05:38 by edu_xy
		:2008-11-7 09:39:40 by edu_xy 液晶"RST"脚由"IOD15"改为"IOD11"
***************************************************************************************/
void ST7529_Rst(void)
{
	*P_IOD_Dir |= 0x0800;
	*P_IOD_Attrib |= 0x0800;
	*P_IOD_Data &= 0xF7FF;		//IOD11(RES) Output Low
	DelayTime();
	*P_IOD_Data |= 0x0800;		//IOD11(RES) Output High
	DelayTime();
}

/***************************************************************************************
函数功能:初始化ST7529,软件复位
入口参数:None
出口参数:None
修改时间:2008-7-28 12:01:31 by edu_xy
***************************************************************************************/
void ST7529_Init(UINT16 Light, UINT16 Frequency)
{
	UINT16 V0, vpr6_8, vpr0_5;

	ST7529_Rst();				//ST7529 Resrt

	//基本设置
	LcdCMDWrite(0x0030);		//Ext = 0,基本指令集
	LcdCMDWrite(0x0094);		//Sleep Out
	LcdCMDWrite(0x00D1);		//OSC On
	LcdCMDWrite(0x0020);		//Power Control Set
	LcdDatWrite(0x0008);		//打开倍压电路
	DelayTime();				//根据PDF范例,倍压电路需要首先打开并延时1ms
	LcdCMDWrite(0x0020);		//Power Control Set
	LcdDatWrite(0x000B);		//同时打开倍压电路VB,参考电压发生电路VR,偏压电路VF

	//亮度设置
	LcdCMDWrite(0x0081);		//开始设置电压微调, Vop=14.0V
	if(Light == -1)				//默认值
	{
		LcdDatWrite(0x0009);	//vpr[5:0](0x00~0x3f) 每级是0.04 伏
		LcdDatWrite(0x0004);	//vpr[8:6](0x00~0x07) vpr[8:0]=(5~410), 410=0x19a=110 011010B(共有406级电压调节)
	}
	else						//用户自定义
	{
		V0 = 235 + Light * 6;	//V0 = a + ( VPR[8:6]VPR[5:0]) x b
		vpr6_8 = V0 >> 6;
		vpr0_5 = V0 << 10;
		vpr0_5 = vpr0_5 >> 10;
		LcdDatWrite(vpr0_5);
		LcdDatWrite(vpr6_8);
	}

	//显示控制
	LcdCMDWrite(0x00CA);		//控制显示指令,在打开显示后不能变动
	LcdDatWrite(0x0004);		//CL=X2,2分频,经证实这里的参数用(0x04)2分频较好,屏幕更亮
	LcdDatWrite(0x0023);		//Duty=128+0x10 ,Duty设为1/144 (COM0->COM144 N/4-1)
	LcdDatWrite(0x0000);		//设置几行为一帧
	LcdCMDWrite(0x00a6);		//设置RAM中数据为正常显示
	LcdCMDWrite(0x00BB);		//控制COM反转指令
	LcdDatWrite(0x0001);		//设置COM扫描次序为0-79,159-80
	LcdCMDWrite(0x00BC);		//控制DATA扫描次序指令
	LcdDatWrite(0x0000);		//设置DATA扫描次序为0-254
	LcdDatWrite(0x0000);		//设置RGB的排列顺序
	LcdDatWrite(0x0001);		//设置32级灰度2B3P模式
	LcdCMDWrite(0x00A7);		//反色显示

	//时钟频率(OSC Frequency),倍压频率,偏压设置,这段设置让显示灰度图片的效果好过以前...
	LcdCMDWrite(0x0031);		//Ext = 1,扩展指令集
	LcdCMDWrite(0x0032);		//控制附加电路设置
	if(Frequency == -1)			//默认值
	{
		LcdDatWrite(0x0000);	//设置时钟频率为12.7KHz,即默认值
	}
	else
	{
		LcdDatWrite(Frequency);	//用户自定义晶振频率
	}
	LcdDatWrite(0x0000);		//Booster Efficiency = 03 ,现在改为0x00,设置倍压电容的频率为3KHz
	LcdDatWrite(0x0000);		//偏压 = 1/14

	//设置WEIGHTING
	LcdCMDWrite(0x22);			//WEIGHTING
	LcdDatWrite(0x03);			//WEIGHTING VALUE
	LcdDatWrite(0x03);			//EDGE VALUE
	LcdDatWrite(0x02);			//ENABLE FLAG
	LcdCMDWrite(0x34);			//Dithering Off
	//ReadEEPROM();				//Read EEPROM Flow
	LcdCMDWrite(0x30);			//Ext = 0 基本指令集
	LcdCMDWrite(0xAF);			//Display On
}

/******************************************************************************************
函数说明:液晶亮度适时显示设置 调节液晶电压范围: 13V--14.92V (3.6+0.04*235)--(3.6+0.04*283)
	     共分9个级别 每个级别0.24V  变压最小单位是0.04V  0.24/0.04=6
	     进度条总长度:144 每格长18 共8格
入口参数:lightStep 0--8
修改时间:2008-11-27 15:49:09 edu_lj
******************************************************************************************/
void LightUpdate( unsigned int number)
{
	unsigned int vpr0_5;
	unsigned int vpr6_8;
	unsigned int V0;
	unsigned int num, key, num1;
	char fullpath[40] = "A:\\SYSTEM\\SET.INI";

    num = number - '0';
    LcdClear(0);
    ModuleName(" 亮  度  调  节 ");
    Text_2_Screen_12( 3,  12, "当前亮度值", 31, 0);
    Rectangle( 65,  87,  53,  201);//画矩形
    Subscript("[←→]调节亮度  [Enter]保存  [ESC]返回");

begin:
    DispASCII( 3,  23, (num+'0'), 0);//显示当前亮度值
    RectangleClr( 66,  18,  86,  (18+6*num), 1);//黑色填充 三列为一个单位所以是18/3=6
    RectangleClr( 66,  (18+6*num),  86,  66, 0);//白色填充

    key = GetAnyKey();
    if(key == KEY_LEFTARROW)// ←
    {
    	if(num == 0)
    	{
    		Alarm(0);
    		goto begin;
    	}
    	num--;
    }
    else if(key == KEY_RIGHTARROW)// →
    {
    	if(num == 8)
    	{
    		Alarm(0);
    		goto begin;
    	}
    	num++;
    }
    else if(key == KEY_ENTER)//保持
    {
    	RevisedProfile("液晶亮度", (num+'0'), fullpath, 0);
		Save_set();
		return;
    }
    else if(key == KEY_ESC) {return;}
    else
    {
    	Alarm(0);
    	goto begin;
    }
    num1 = num;
	V0 = 235 + num1 * 6;	// V0 = a + ( VPR[8:6]VPR[5:0]) x b
    vpr6_8 = V0 >> 6;
    vpr0_5 = V0 << 10;
    vpr0_5 = vpr0_5 >> 10;
   	LcdCMDWrite(0x0030);	// Ext = 0
    LcdCMDWrite(0x0081);	//Electronic Control,Vop=14.0V
	LcdDatWrite(vpr0_5);
	LcdDatWrite(vpr6_8);
    goto begin;
}

/******************************************************************************************
函数说明:液晶亮度适时显示设置
入口参数:设置屏幕亮度值currentStep
出口参数:None
修改时间:2008-11-27 15:49:48 edu_lj
******************************************************************************************/
void FreqUpdate(unsigned int number)
{
	unsigned int num, key;
	char fullpath[40] = "A:\\SYSTEM\\SET.INI";

    num = number - '0';
    LcdClear(0);
    ModuleName("刷 新 频 率 调 节");//标题
    Text_2_Screen_12(3,  12, "当前频率值", 31, 0);
    Rectangle(65, 87, 53, 201);//画矩形
    Subscript("[←→] 调节频率  [Enter]保存  [ESC]返回");

begin:
    DispASCII(3,  23, (num+'0'), 0);//显示当前频率值
    RectangleClr(66, 18, 86, (18+6*num), 1);//黑色填充 三列为一个单位所以是18/3=6
    RectangleClr(66, (18+6*num), 86, 66, 0);//白色填充

    key = GetAnyKey();
    if(key == KEY_LEFTARROW)// ←
    {
    	if(num == 0)
    	{
    		Alarm(0);
    		goto begin;
    	}
    	num--;
    }
    else if(key == KEY_RIGHTARROW)// →
    {
    	if(num == 8)
    	{
    		Alarm(0);
    		goto begin;
    	}
    	num++;
    }
    else if(key == KEY_ENTER)//保持
    {
    	RevisedProfile("刷新频率", (num+'0'), fullpath, 0);
		Save_set();
		return;
    }
    else if(key == KEY_ESC) return;
    else
    {
    	Alarm(0);
    	goto begin;
    }
	LcdCMDWrite(0x31);	//Ext = 1
	LcdCMDWrite(0x32);	//Analog Circuit Set
	LcdDatWrite(num);	//OSC Frequency 晶振频率
	LcdDatWrite(0x00);	//Booster Efficiency=00
	LcdDatWrite(0x00);
	LcdCMDWrite(0x30);	//Ext = 0 基本指令集
	LcdCMDWrite(0xAF);	//Display On
    goto begin;
}

#ifdef __NT7553E__

/***************************************************************************************

⌨️ 快捷键说明

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