查看: 1207|回复: 0
打印 上一主题 下一主题

LCD滚动显示实现

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-21 21:59:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


/*
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;
        }


}







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表