📄 lcd.c
字号:
/**************************************************************************
函数名称: void ShowPowerVolume(u8 PowerPoint,u8 x,u8 y)
函数版本: 1.00
作者: ysh
创建日期: 2002.01.07
函数功能说明:显示电池电量状态
输入参数:x,y为起始点坐标,PowerPoint为电池电量各种状态,从0~12,0为空,12为满
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void ShowPowerVolume(u8 PowerPoint,u8 x,u8 y)
{
u8 TempStatus[4];
ReadFontData(&TempStatus[0],BatteryStatus + PowerPoint*4,1);
ReadFontData(&TempStatus[1],BatteryStatus + PowerPoint*4+1,1);
ReadFontData(&TempStatus[2],BatteryStatus + PowerPoint*4+2,1);
ReadFontData(&TempStatus[3],BatteryStatus + PowerPoint*4+3,1);
fDispHZ16(TempStatus[0],TempStatus[1],x,y,NORVIEW);
fDispHZ16(TempStatus[2],TempStatus[3],x+16,y,NORVIEW);
}
/**************************************************************************
函数名称: void DrawLine(x1,y1,x2,y2)
函数版本: 1.00
作者: ysh
创建日期: 2003.01.07
函数功能说明:在LCD屏上两点之间划一条直线
输入参数:(x1,y1)为起始坐标点,(x2,y2)为结束坐标点
在x方向取值在0-160之间,y方向在0-128之间
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
增加批注:此划线程序在划斜线时只能实现45度角,即x和y步距只能一样
***************************************************************************/
void DrawLine(u8 x1,u8 y1,u8 x2,u8 y2)
{
u8 ii,jj,linetemp[8];
ReadFontData(linetemp,LineChar,8);
if(y1==y2)
{
for(ii=x1;ii<x2;ii++)
{
Temp_LcdBuffer[ii+(15-y1/8)*160] |= linetemp[y1%8];
}
}
else if(x1==x2)
{
for(ii=y1;ii<y2;ii+=8)
{
if(ii+8 > y2)
{
for(jj=ii;jj<y2;jj++)
{
Temp_LcdBuffer[x1+(15-jj/8)*160] |= linetemp[jj%8];
}
}
else
{
Temp_LcdBuffer[x1+(15-ii/8)*160] |= 0xff;
}
}
}
else
{
jj = y1;
for(ii=x1;ii<x2;ii++)
{
Temp_LcdBuffer[ii+(15-jj/8)*160] |= linetemp[jj%8];
if(jj<y2)
{
jj++;
}
}
}
}
/**************************************************************************
函数名称: void DrawSquare(x1,y1,x2,y2)
函数版本: 1.00
作者: ysh
创建日期: 2003.01.07
函数功能说明:在LCD屏上两点之间划一个矩形
输入参数:(x1,y1)为起始坐标点,(x2,y2)为结束坐标点
在x方向取值在0-160之间,y方向在0-128之间
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DrawSquare(u8 x1,u8 y1,u8 x2,u8 y2)
{
DrawLine(x1,y1,x2,y1);
DrawLine(x1,y1,x1,y2);
DrawLine(x1,y2,x2,y2);
DrawLine(x2,y1,x2,y2);
}
/**************************************************************************
函数名称: void DevideByte(u8 DispChar,u16 GrayClass)
函数版本: 1.00
作者: ysh
创建日期: 2003.02.07
函数功能说明:将单个字节按灰度等级将各位转换为对应的两位,即两个字节。
输入参数:DispChar为待转换的字节,GrayClass为灰度等级,取值范围在0x00~0x04之间。
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DevideByte(u16 GrayClass)
{
u8 temp;
u16 kk;
#if 0
GrayVal.DataAdd_I = 0x00;
for(temp = 0x01; temp != 0x0 ; temp <<= 1)
{
if(temp&DispChar)
{
GrayVal.DataAdd_I |= GrayClass;
}
GrayClass <<= 2;
}
#else
for(kk = 0 ; kk < 2560 ; kk++)
{
GrayVal.DataAdd_I = 0x00;
for(temp = 0x01; temp != 0x0 ; temp <<= 1)
{
if(temp&Temp_LcdBuffer[kk])
{
GrayVal.DataAdd_I |= GrayClass;
}
GrayClass <<= 2;
}
Temp_LcdBuffer_Gray[2*kk] = GrayVal.DataAdd_I >> 8;
Temp_LcdBuffer_Gray[2*kk+1] = GrayVal.DataAdd_I;
}
#endif
}
/**************************************************************************
函数名称: void ViewScrollText(void)
函数版本: 1.00
作者: ysh
创建日期: 2003.02.07
函数功能说明:滚屏显示程序
输入参数:无
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void ViewScrollText(void)
{
delay_ms(10);
S1D15E05_Command(SETAREASCROLL); //屏幕局部滚动设置(17)
S1D15E05_Data(0x01); //向上滚动
S1D15E05_Data(0x0);
S1D15E05_Data(0x80);
S1D15E05_Data(0x00);
S1D15E05_Data(0x80);
delay_ms(10);
}
/**************************************************************************
函数名称: void Disp_Bmp(u8 x, u8 y,u8 BMP_CLASS)
函数版本: 1.00
作者: ysh
创建日期: 2007.4.4
函数功能说明:表图标显示
输入参数: x,y为图片显示坐标
BMP_CLASS为表图片选择:Disp_Play_Bmp表播放,Disp_Pause_Bmp表暂停,Disp_Stop_Bmp表停止,
Disp_PlayHole_Bmp表空心播放,Disp_PauseHole_Bmp表空心暂停,Disp_StopHole_Bmp表空心停止
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void Disp_Bmp(u8 x, u8 y,u8 BMP_CLASS)
{
u8 ii,m;
u16 Sch1,Sch2;
u8 TempBuf[33];
u8 temp[32];
switch(BMP_CLASS)
{
case Disp_Play_Bmp:
{
ReadFontData(temp,play,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_Pause_Bmp:
{
ReadFontData(temp,pause,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_Stop_Bmp:
{
ReadFontData(temp,stop,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_PlayHole_Bmp:
{
ReadFontData(temp,play_new,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_PauseHole_Bmp:
{
ReadFontData(temp,pause_new,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_StopHole_Bmp:
{
ReadFontData(temp,stop_new,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_Charge1_Bmp:
{
ReadFontData(temp,charge1,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
case Disp_Charge2_Bmp:
{
ReadFontData(temp,charge2,32);
for(ii=0;ii<32;ii++)
{
TempBuf[ii]=temp[ii];
}
}break;
default:
return;
}
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] = TempBuf[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
}
/**************************************************************************
函数名称: void ShowPower(u8 PowerPoint)
函数版本: 1.00
作者: yht
创建日期: 2007.04.19
函数功能说明:在右上角显示电池电量
输入参数: PowerPoint为电池电量各种状态,从0~12,0为空,12为满
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void ShowPower(u8 PowerPoint)
{
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;//缓冲区清零
}
}
if(PowerPoint>12)
{
ShowPowerVolume(12,128,0);
}
else
{
ShowPowerVolume(PowerPoint,128,0);
}
FlushRec(0,0);
}
/**************************************************************************
函数名称: void DispCDMA(u8 x, u8 y,u8 quality)
函数版本: 1.00
作者: ysh
创建日期: 2007.4.4
函数功能说明:CDMA信号量显示图标
输入参数: x,y为图片显示坐标
quality为表图片选择:信号量分0-5级
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DispCDMA(u8 x, u8 y,u8 quality)
{
u8 ii,m;
u16 Sch1,Sch2;
u8 LQItemp[32];
if(quality==0)
{
ReadFontData(LQItemp,LQI0,32);
}
else if(quality==1)
{
ReadFontData(LQItemp,LQI1,32);
}
else if(quality==2)
{
ReadFontData(LQItemp,LQI2,32);
}
else if(quality==3)
{
ReadFontData(LQItemp,LQI3,32);
}
else if(quality==4)
{
ReadFontData(LQItemp,LQI4,32);
}
else if(quality==5)
{
ReadFontData(LQItemp,LQI5,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] = LQItemp[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
}
void DisPowerNew(u8 PowerValue)
{
u8 ii,m;
u16 Sch1,Sch2;
u8 TempBuf[48];
if(PowerValue>12)
{
PowerValue=12;
}
ReadFontData(TempBuf,BatteryAddress+PowerValue*48,48);
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = 136+(15-m)*160; //更新显示数据地址
Sch2 = 24*m; //共24个字节的点阵数据
for(ii=0;ii<24;ii++) //电池图标为24列,即一个半字
{
Temp_LcdBuffer[Sch1+ii] = TempBuf[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
FlushRec(0,0);
}
/**************************************************************************
函数名称: void DisplayArrow(u8 x, u8 y,u8 direction,u8 attr)
函数版本: 1.00
作者: yht
创建日期: 2007.05.23
函数功能说明:显示左右箭头
输入参数: direction 为 RIGHT_DIRT 显示右箭头
LEFT_DIRT 显示左箭头
BOTH_DIRT 显示左右箭头
attr为显示属性
NORVIEW 正显数据
REVVIEW 反显数据
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void DisplayArrow(u8 x, u8 y,u8 direction,u8 attr)
{
u8 ii,m;
u16 Sch1,Sch2;
ReadFontData(PicBuf,ArrowAddress + 64*direction,64);
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = x+(15-2*y-m)*160; //更新显示数据地址
Sch2 = 32*m; //共24个字节的点阵数据
for(ii=0;ii<32;ii++) //电池图标为24列,即一个半字
{
if(attr==NORVIEW)
Temp_LcdBuffer[Sch1+ii] = PicBuf[Sch2+ii];
else if(attr==REVVIEW)
Temp_LcdBuffer[Sch1+ii] = ~PicBuf[Sch2+ii];//点阵数据取反放入缓冲区
}
}
//FlushRec(y,y);
}
/**************************************************************************
函数名称: void Display_Icon(u8 icon)
函数版本: 1.00
作者: yht
创建日期: 2007.06.28
函数功能说明:显示CDMA、UT-NET、IRDA左上角图标
输入参数: icon 为 CDMA_Icon 显示CDMA Icon
UT_NET_Icon 显示UT_NET Icon
IRDA_Icon 显示IRDA Icon
输出参数:无
返回值: 无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空
更新后的上述资源:空
***************************************************************************/
void Display_Icon(u8 icon)
{
u8 ii,m,k;
u16 Sch1,Sch2;
if(icon == 0)
{
k = 23;
ReadFontData(PicBuf,Icon_Address,46);
}
else if(icon == 1)
{
k = 29;
ReadFontData(PicBuf,Icon_Address+46,58);
}
else if(icon == 2)
{
k = 21;
ReadFontData(PicBuf,Icon_Address+46+58,42);
}
for(m=0;m<2;m++) //每行共为两页
{
Sch1 = (15-m)*160; //更新显示数据地址
Sch2 = k*m; //共24个字节的点阵数据
for(ii=0;ii<29;ii++)
{
Temp_LcdBuffer[Sch1+ii] = 0;//点阵数据取反放入缓冲区
}
for(ii=0;ii<k;ii++)
{
Temp_LcdBuffer[Sch1+ii] = PicBuf[Sch2+ii]; //点阵数据取反放入缓冲区
}
}
FlushRec(0,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -