📄 lcd.c
字号:
}
}
/**************************************************************************
函数名称: void DispEnter(u8 x, u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.25
函数功能说明:显示回车键图标
输入参数:x,y为显示位置
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DispEnter(u8 x, u8 y)
{
u8 ii,m;
u16 Sch1,Sch2;
u8 enter_temp[32];
ReadFontData(enter_temp,EnterKey,32);
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = x+(15-2*y-m)*160; //更新显示数据地址
Sch2 = 16*m; //共32个字节的点阵数据
for(ii=0;ii<16;ii++) //每个汉字为16列
{
Temp_LcdBuffer[Sch1+ii] = enter_temp[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
}
/**************************************************************************
函数名称: void DispBack(u8 x, u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.25
函数功能说明:显示退回键图标
输入参数:x,y为显示位置
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DispBack(u8 x, u8 y)
{
u8 ii,m;
u16 Sch1,Sch2;
u8 backtemp[32];
ReadFontData(backtemp,BackKey,32);
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = x+(15-2*y-m)*160; //更新显示数据地址
Sch2 = 16*m; //共32个字节的点阵数据
for(ii=0;ii<16;ii++) //每个汉字为16列
{
Temp_LcdBuffer[Sch1+ii] = backtemp[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
}
/**************************************************************************
函数名称: void FlushRec(y1,y2)
函数版本: 1.00
作者: ysh
创建日期: 2002.11.11
函数功能说明:刷新部分区域内的显示,从行y1到y2(包括y2)的数据刷新,列方向从0-159
输入参数:y1,y2,取值在0-7之间,并保证y1<=y2
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void FlushRec(u8 y1,u8 y2)
{
u8 ii,jj,m;
u16 Sch1;
for(ii=y1;ii<=y2;ii++) //在Y方向,从Y1开始到Y2结束,共Y2-Y1行
{
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = 160*(15-2*ii-m); //更新数据的地址
LcdGotoxy(0,15-2*ii-m);
S1D15E05_Command(DISPDATAWRITE);
for(jj=0;jj<160;jj++)
{
S1D15E05_Data(Temp_LcdBuffer[Sch1+jj]);//更新待显示数据
}
}
}
}
/**************************************************************************
函数名称: void LcdClreol(u8 x,u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2002.10.25
函数功能说明:清除LCD当前行中从x,y开始到行尾的显示内容
输入参数:x,y为起始坐标
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LcdClreol(u8 x,u8 y)
{
u8 ii,jj;
u16 Sch1;
for(ii=0;ii<2;ii++) //每行共为两页
{
Sch1 = 160*(15-2*y-ii); //更新数据的地址
LcdGotoxy(x,15-2*y-ii);
S1D15E05_Command(DISPDATAWRITE);
for(jj=x;jj<160;jj++)
{
S1D15E05_Data(0x0); //显示清零
Temp_LcdBuffer[Sch1+jj] = 0x0;
}
}
}
/**************************************************************************
函数名称: void LcdClreol(u8 x,u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2007.4.13
函数功能说明:清除LCD当前行的显示内容(黑底白字)
输入参数:y为行坐标
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LcdSeteol(u8 y)
{
u8 ii,jj;
u16 Sch1;
for(ii=0;ii<2;ii++) //每行共为两页
{
Sch1 = 160*(15-2*y-ii); //更新数据的地址
LcdGotoxy(16,15-2*y-ii);
S1D15E05_Command(DISPDATAWRITE);
for(jj=16;jj<128;jj++)
{
S1D15E05_Data(0xff); //显示清零
Temp_LcdBuffer[Sch1+jj] = 0xff;
}
}
}
/**************************************************************************
函数名称: void LcdClrBlock(u8 x1,u8 x2,u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2002.10.25
函数功能说明:清除LCD当前行中从x,y开始到y行尾的显示内容
输入参数:x1,y1为起始坐标,y为终止行坐标
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LcdClrBlock(u8 x1,u8 x2,u8 y)
{
u8 ii,jj;
u16 Sch1;
for(ii=0;ii<2;ii++) //每行共为两页
{
Sch1 = 160*(15-2*y-ii); //更新数据的地址
LcdGotoxy(x1,15-2*y-ii);
S1D15E05_Command(DISPDATAWRITE);
for(jj=x1;jj<x2;jj++)
{
S1D15E05_Data(0x0); //显示清零
Temp_LcdBuffer[Sch1+jj] = 0x0;
}
}
}
/**************************************************************************
函数名称: void LcdClreRow(u8 y1,u8 y2)
函数版本: 1.00
作者: ysh
创建日期: 2004.6.25
函数功能说明:清除LCD行中从y1,y2开始到行尾的显示内容,
输入参数:y1,y2为起始坐标
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LcdClreRow(u8 y1,u8 y2)
{
u8 ii,jj,m;
u16 Sch1;
for(ii=y1;ii<=y2;ii++) //在Y方向,从Y1开始到Y2结束,共Y2-Y1行
{
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = 160*(15-2*ii-m); //更新数据的地址
LcdGotoxy(0,15-2*ii-m);
S1D15E05_Command(DISPDATAWRITE);
for(jj=0;jj<160;jj++)
{
S1D15E05_Data(0x0); //更新待显示数据
Temp_LcdBuffer[Sch1+jj] = 0x0;
}
}
}
}
/**************************************************************************
函数名称: void fDispHZ16(QM,WM,x,y,attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.10.25
函数功能说明:用于取汉字的16*16字库及显示汉字字符
输入参数:QM,WM为汉字的区位码,x,y为显示起点坐标,x在0-159,y在0-7
attr为显示属性,决定是正写还是反写
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
**************************************************************************/
void fDispHZ16(u8 QM,u8 WM,u8 x,u8 y,u8 attr)
{
u8 ii,m,Sch2;
u16 Sch1;
u32 FValue,tempL;
u8 temp[32];
if(QM==0xAC && WM==0x42) //珺
{
ReadFontData(temp,jun,32);
for(ii=0;ii<32;ii++)
{
DispDotBuf[ii]=temp[ii];
}
}
else if(QM==0xFC && WM==0x87) //鼑
{
ReadFontData(temp,ding,32);
for(ii=0;ii<32;ii++)
{
DispDotBuf[ii]=temp[ii];
}
}
else
{
tempL = 96*16+OFFSETFONT; //前面有96个AscII码,占96*16个字节,且据要求偏移0x10000
FValue=(QM-161)*94+(WM-161);
#if 0
FValue=FValue*32+tempL; //汉字内码在字库中的偏移量
#else
FValue <<= 5;
FValue += tempL;
#endif
ReadFontData(DispDotBuf,FValue,32);//汉字点阵数据32个字节读取到DispDotBuf缓冲内 //need added
}
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = x+(15-2*y-m)*160; //更新显示数据地址
Sch2 = 16*m; //共32个字节的点阵数据
for(ii=0;ii<16;ii++) //每个汉字为16列
{
if(attr==NORVIEW) //正常显示汉字
{
Temp_LcdBuffer[Sch1+ii] = DispDotBuf[Sch2+ii]; //点阵数据取反放入缓冲区
}
else if(attr==REVVIEW) //反向显示汉字
{
Temp_LcdBuffer[Sch1+ii] = ~DispDotBuf[Sch2+ii];
}
}
}
}
/**************************************************************************
函数名称: void fDispAsc16(ascCode,x,y,attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.10.25
函数功能说明:用于取ASCII码的8*16字库及显示ASCII码字符
输入参数:ascCode为ASCII码的内码,x,y为显示起点坐标,attr为显示属性
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void fDispAsc16(u8 ascCode,u8 x,u8 y,u8 attr)
{
u8 ii,m,Sch2;
u16 Sch1;
u32 FValue;
FValue = (ascCode-32)*16+OFFSETFONT; //前面32个AscII码已删除了,且据要求偏移0x10000
ReadFontData(DispDotBuf,FValue,16); //AscII点阵数据在DataFlash的前几页内 //need added
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = x+(15-2*y-m)*160; //更新显示数据地址
Sch2 = 8*m; //共16个字节的点阵数据
for(ii=0;ii<8;ii++) //每个ASCII码为8列
{
if(attr==NORVIEW) //正常显示汉字
{
Temp_LcdBuffer[Sch1+ii] = DispDotBuf[ii+Sch2]; //点阵数据放入缓冲区
}
else if(attr==REVVIEW) //反向显示汉字
{
Temp_LcdBuffer[Sch1+ii] = ~DispDotBuf[ii+Sch2]; //点阵数据取反放入缓冲区
}
}
}
}
/**************************************************************************
函数名称: void LcdPrintf(str,x,y,attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.10.25
函数功能说明:用于显示Str指向的字符串中所有的字符,包括中文和ASCII码
输入参数:Str为指向字符串的指针,x,y为显示起点坐标,attr为显示属性
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LcdPrintf(char *str,u8 x,u8 y,u8 attr)
{
u8 i;
i = 0;
while(str[i]!=0) //当没有到字符串的结束标志0时
{
if((str[i] & 0x80) !=0) //该字符为汉字时
{
if(x>144) //在X方向上,超过144列就自动下移一行
{
y+=1;
x=0;
}
if(y>7) //超出范围就退出
{
break;
}
fDispHZ16(str[i],str[i+1],x,y,attr);//调用显示汉字函数
i+=2;
x+=16; //汉字占16列
}
else //是ASCII码时
{
if(x>152) //在X方向上,超过144列就自动下移一行
{
y+=1;
x=0;
}
if(y>7) //超出范围就退出
{
break;
}
fDispAsc16(str[i],x,y,attr); //调用显示ASCII码函数
i++;
x+=8; //ASCII码占8列
}
}
PositionX = x; //记录显示完字符串后的坐标值
PositionY = y;
}
/**************************************************************************
函数名称: void LeftDisplay(char *str,u8 attr,u8 choice,u8 CDMA)
函数版本: 1.00
作者: yht
创建日期: 2007.4.19
函数功能说明:在左角固定的位置写入汉字或CDMA信号量
输入参数:*str为汉字
attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
choice为汉字(HANZI)和CDMA信号量选择(SIGNAL)
CDMA为信号量强弱选择参数
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LeftDisplay(char *str,u8 attr,u8 choice,u8 CDMA)
{
u8 ii,jj;
u16 Sch1;
for(ii=14;ii<16;ii++) //在Y方向共16行
{
Sch1 = 160*ii; //在X方向共160列,变化一行就偏移160。
for(jj=0;jj<32;jj++)
{
Temp_LcdBuffer[Sch1+jj] = 0x0;//缓冲区清零
}
}
if(choice)
{
LcdPrintf(str,0,0,attr);
}
else
{
DispCDMA(0,0,CDMA);
}
}
/**************************************************************************
函数名称: void RightDisplay( char *str,u8 attr)
函数版本: 1.00
作者: yht
创建日期: 2007.4.19
函数功能说明:在右角固定的位置写入汉字
输入参数:*str为汉字
attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void RightDisplay( char *str,u8 attr)
{
u8 ii,jj;
u16 Sch1;
for(ii=14;ii<16;ii++) //在Y方向共16行
{
Sch1 = 160*ii; //在X方向共160列,变化一行就偏移160。
for(jj=128;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = 0x0;//缓冲区清零
}
}
LcdPrintf(str,128,0,attr);
}
/**************************************************************************
函数名称: void MenuDisplay(char *str ,u8 attr, u8 choice, u8 CDMA)
函数版本: 1.00
作者: yht
创建日期: 2007.4.19
函数功能说明:在左右角固定的四个位置写入汉字或CDMA信号量
输入参数:
*str为汉字
attr为汉字正反显示属性,可为 NORVIEW(正常显示字符)REVVIEW(反向显示字符)
choice为汉字(HANZI)和CDMA信号量选择(SIGNAL)
CDMA为信号量强弱选择参数
没有用到的参数可写为NULL
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void MenuDisplay( char *str ,u8 attr, u8 choice, u8 CDMA)
{
LeftDisplay(str,attr,choice,CDMA);
FlushRec(0,0);
}
/**************************************************************************
函数名称: void DispCursor(void)
函数版本: 1.00
作者: ysh
创建日期: 2002.11.10
函数功能说明:待输入数据的光标提示
输入参数:无
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -