📄 display.c
字号:
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 + -