📄 display.c
字号:
函数功能:清除(或反色)屏幕上的一个矩形区域。
入口参数: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 + -