📄 lcd.c
字号:
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DispCursor(void)
{
u8 ii,Temp;
CursorBit = !CursorBit; //反复将光标标志取反
Temp = CursorBit;
LcdGotoxy(PositionX,14-2*PositionY); //根据显示完字符串后的坐标值确定光标位置
S1D15E05_Command(DISPDATAWRITE);
for(ii=0;ii<8;ii++) //显示光标,一个光标占8列
{
XBYTE[WR_D15E05] = Temp;
}
}
/**************************************************************************
函数名称: void LogonPic(void)
函数版本: 1.00
作者: ysh
创建日期: 2002.11.10
函数功能说明:开机后的启动画面
输入参数:无
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void LogonPic(void)
{
u8 ii,jj,tt;
u16 Sch1,kk;
u32 TempSch1;
TempSch1 = PICTUREDATA-2560; //确定全幅图片点阵数据的起始地址
ReadFontData(PicBuf,TempSch1,2560); //取出2560个字节到显示缓冲
kk =0;
for(ii=0;ii<16;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
OpenLcd();
for(tt=0;tt<15;tt++)
{
TempSch1 = PICTUREDATA+104*tt; //确定部分图片点阵数据的起始地址
ReadFontData(PicBuf,TempSch1,104); //取出104个字节到显示缓冲
kk =0;
for(ii=5;ii<9;ii++)
{
Sch1 = 160*(15-ii);
for(jj=28;jj<54;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
FlushRec(2,4); //循环显示更新数据以达到动画效果
delay_ms(20);
}
}
/**************************************************************************
函数名称: void LogonPic(void)
函数版本: 1.00
作者: ysh
创建日期: 2002.11.10
函数功能说明:显示优特LOGO及电脑钥匙图标
输入参数:无
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:把原来lcd.c中的logo数组写到了flash中,这里是从flash中把它读出来
***************************************************************************/
void LogonPic_1E(void)
{
u8 ii,jj,tt;
u16 Sch1,kk;
ReadFontData(PicBuf,Logo1,2560); //取出2560个字节到显示缓冲
kk = 0;
for(ii=0;ii<16;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
OpenLcd();
for(tt=0;tt<3;tt++)
{
ReadFontData(PicBuf,Logo4,640);
kk =0;
for(ii=0;ii<4;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
FlushRec(0,2); //循环显示更新数据以达到动画效果
delay_ms(100);
ReadFontData(PicBuf,Logo3,640);
kk =0;
for(ii=0;ii<4;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
FlushRec(0,2); //循环显示更新数据以达到动画效果
delay_ms(100);
ReadFontData(PicBuf,Logo2,640);
kk =0;
for(ii=0;ii<4;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
FlushRec(0,2); //循环显示更新数据以达到动画效果
delay_ms(100);
ReadFontData(PicBuf,Logo1,640);
kk =0;
for(ii=0;ii<4;ii++)
{
Sch1 = 160*(15-ii);
for(jj=0;jj<160;jj++)
{
Temp_LcdBuffer[Sch1+jj] = PicBuf[kk];
kk++;
}
}
FlushRec(0,2); //循环显示更新数据以达到动画效果
delay_ms(100);
}
}
//====================增值服务函数==================================//
/**************************************************************************
函数名称: u16 HEX_TO_BCD(u16 hexnumber)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:把十六进制数换算成十进制数,最大到9999.
输入参数:hexnumber十六进制数,
输出参数:无
返回值: 返回值为整型.
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
u32 HEX_TO_BCD(u16 hexnumber)
{
u32 bcdnumber1;
u16 bcdnumber2;
u16 bcdnumber3;
u16 bcdnumber4;
u16 temp;
u32 temp1;
bcdnumber1=hexnumber/10000;
temp=hexnumber%10000;
bcdnumber2=temp/1000;
temp%=1000;
bcdnumber3=temp/100;
temp%=100;
bcdnumber4=temp/10;
temp%=10;
temp1=temp+(bcdnumber4<<=4)+(bcdnumber3<<=8)+(bcdnumber2<<=12)+(bcdnumber1<<=16);
return(temp1);
}
/**************************************************************************
函数名称: u8 BCD_TO_ASC(u8 InputData)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:BCD变成ASC码
输入参数:InputData BCD数,
输出参数:无
返回值: 返回值为BCD.
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
u8 BCD_TO_ASC(u8 InputData)
{
InputData&=0x0f;
InputData=InputData+0x30;
return(InputData);
}
/**************************************************************************
函数名称: void fDispQuickNum(u16 InputData,u8 x,u8 y,u8 attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:供通讯使用,即时显示一个整数,最大到999.输入的十六进制数,显示的是BCD十进制数.
输入参数:InputData 输入的十六进制数
输出参数:无
返回值:
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void fDispQuickNum(u16 InputData,u8 x,u8 y,u8 attr)
{
u8 TempDataH,TempDataL,TempData,ii;
u32 ttt=0;
ii = 0;
if(InputData ==0)
LcdClrBlock(x,x+40,y);
if(InputData > 9999)
{
ttt = HEX_TO_BCD(InputData);
DispBCDBuf[ii]=BCD_TO_ASC(ttt>>16);
ii++;
InputData = ttt;
TempDataL = InputData&0x00ff;
TempDataH = (InputData&0xff00)>>8;
TempData=TempDataH;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataH);
ii++;
TempData=TempDataL;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataL);
ii++;
DispBCDBuf[ii]=0;
}
else if(InputData > 99)
{
InputData = HEX_TO_BCD(InputData);
TempDataL = InputData&0x00ff;
TempDataH = (InputData&0xff00)>>8;
TempData=TempDataH;
TempData>>=4;
if(TempData!=0)
{
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
}
DispBCDBuf[ii]=BCD_TO_ASC(TempDataH);
ii++;
TempData=TempDataL;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataL);
ii++;
DispBCDBuf[ii]=0;
}
else
{
InputData = HEX_TO_BCD(InputData);
TempData=InputData;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(InputData);
ii++;
DispBCDBuf[ii]=0;
}
ii++;
DispBCDBuf[ii]=0;
LcdPrintf(DispBCDBuf,x,y,attr);
FlushRec(y,y);
}
/**************************************************************************
函数名称: void fDispIntNum(u16 InputData,u8 x,u8 y,u8 attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:显示一个整数,最大到999.输入的十六进制数,显示的是BCD十进制数.
输入参数:InputData 输入的十六进制数
输出参数:无
返回值:
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void fDispIntNum(u16 InputData,u8 x,u8 y,u8 attr)
{
u8 TempDataH,TempDataL,TempData,ii;
u32 ttt=0;
ii = 0;
if(InputData > 9999)
{
ttt = HEX_TO_BCD(InputData);
DispBCDBuf[ii]=BCD_TO_ASC(ttt>>16);
ii++;
InputData = ttt;
TempDataL = InputData&0x00ff;
TempDataH = (InputData&0xff00)>>8;
TempData=TempDataH;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataH);
ii++;
TempData=TempDataL;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataL);
ii++;
DispBCDBuf[ii]=0;
}
else if(InputData > 99)
{
InputData = HEX_TO_BCD(InputData);
TempDataL = InputData&0x00ff;
TempDataH = (InputData&0xff00)>>8;
TempData=TempDataH;
TempData>>=4;
if(TempData!=0)
{
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
}
DispBCDBuf[ii]=BCD_TO_ASC(TempDataH);
ii++;
TempData=TempDataL;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(TempDataL);
ii++;
DispBCDBuf[ii]=0;
}
else
{
InputData = HEX_TO_BCD(InputData);
TempData=InputData;
TempData>>=4;
DispBCDBuf[ii]=BCD_TO_ASC(TempData);
ii++;
DispBCDBuf[ii]=BCD_TO_ASC(InputData);
ii++;
DispBCDBuf[ii]=0;
}
ii++;
DispBCDBuf[ii]=0;
LcdPrintf(DispBCDBuf,x,y,attr);
}
/**************************************************************************
函数名称: void fDispCharHex(u8 InputData,u8 x,u8 y,u8 attr)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:显示一个整数,最大到255.输入的十制数,显示的是十六进制数.
输入参数:InputData 输入的十进制数,x范围为0-159,y为0-7
输出参数:无
返回值:
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void fDispCharHex(u8 InputData,u8 x,u8 y,u8 attr)
{
u8 TempH,TempL,iii;
iii = 0;
TempH=(InputData>>4) & 0x0f;
TempL=InputData & 0x0f;
if(TempH<0x0a)
{
TempH=TempH+0x30;
}
else
{
TempH=TempH+0x37; //add #'A'-0x0a;
}
if(TempL<0x0a)
{
TempL=TempL+0x30;
}
else
{
TempL=TempL+0x37; //add #'A'-0x0a;
}
DispBCDBuf[iii]=TempH;
iii++;
DispBCDBuf[iii]=TempL;
iii++;
DispBCDBuf[iii]=0;
LcdPrintf(DispBCDBuf,x,y,attr);
}
/**************************************************************************
函数名称: void fDrawHorLine(x1,x2,y)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:画线函数,水平线在一行字符的中间(占用一行字符空间)
输入参数:x1,x2为线的起点和终点的x方向坐标在0~153,y为本行的y方向坐标0~7
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void fDrawHorLine(u8 x1,u8 x2,u8 y)
{
u8 iii;
for(iii=x1;iii<x2;iii+=8) //线字符同ASCII码一样占8列
{
fDispAsc16(0xcd,iii,y,NORVIEW);//显示线字符,连续即为一条水平直线
}
}
/**************************************************************************
函数名称: void fShowArrow(x,y,SpecialChar)
函数版本: 1.00
作者: ysh
创建日期: 2002.12.10
函数功能说明:显示特殊字符的专用函数
输入参数:x,y为起始点坐标,SpecialChar特殊字符标志,其中
LEFTARROW表示左箭头
RIHGTARROW表示右箭头
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
增加标注:y-x的跨度为7
***************************************************************************/
void fShowArrow(u8 x,u8 y,u8 SpecialChar)
{
switch(SpecialChar)
{
case LEFTARROW://左箭头标志
{
fDispAsc16(0xd0,x,y,NORVIEW);
}break;
case RIGHTARROW://右箭头标志
{
fDispAsc16(0xd1,x,y,NORVIEW);
}break;
default : break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -