/*
lcd在一个区域动态显示字符
x y 在lcd显示的开始位置
arer_size显示区域可以显示的字符数
str需要显示的字符
str_size 需要显示的字符大小
displace 显示的位置,初始化为0,此函数需要定时扫描,才可以显示滚动
hz 为真表示是汉字,汉字一次滚动两个字符
*/
void LcdDislayInArea(uint8_t x,uint8_t y,u8*str,u8 arer_size,u8 str_size,u8 *displace,bool hz)
{
u8 buf[12];
u8 i,s_place;
memset(buf,0x20,12);
buf[arer_size]=0;
if(str_size<=arer_size)
{
memcpy(buf,str,str_size);
}else if(
(displace[0]!=0)&&
(displace[0]!=(arer_size+str_size))
)
{
if(displace[0]<=arer_size)
{
for(i=(arer_size-displace[0]);i<arer_size;i++)
{
buf=*str++;
}
}else
{
for(i=0;i<arer_size;i++)
{
s_place=displace[0]-arer_size+i;
if(s_place>=str_size)
{
break;
}
buf=str[s_place];
}
}
}
if(false==hz)
{
V_LcdWriteStr(Num612[0],x,y,6,(u8*)buf);
}
else
{
LcdPrintHzStr(x,y,(u16*)buf,arer_size>>1);
}
displace[0]++;
if(true==hz)
{
displace[0]++;
if(displace[0]%2)
{
displace[0]++;
}
}
if(displace[0]>=(arer_size+str_size))
{
displace[0]=0;
}
}
|
|