中级会员
- 积分
- 368
- 金钱
- 368
- 注册时间
- 2018-8-31
- 在线时间
- 115 小时
|
发表于 2019-8-10 11:16:26
|
显示全部楼层
感谢分享,你说的BUG也不是大问题,加个参数控制一下就好了,滚动效果就出来了,哈哈
void LCD_RoRoshow(u16 y,u8 *str,u8 size,u8 mode,u8 speed)- /**************************************************************************
- 函数功能:滚动显示
- 入口参数:y坐标0~319;m显示字数1~4087; speed 滚动速度;
- 返回 值:无
- **************************************************************************/
- void LCD_RoRoshow(u16 y,u8 *str,u8 size,u8 mode,u8 speed)
- {
- static u16 n=0,n0=0;
- static u8 Show_Flag1=1,Show_Flag2=0;
- static int x;
- u8 *strbuff;
- u8 bHZ=0; //是否为字符/汉字
- u16 Tolnum=0,numchar=0,numHZ=0;
-
- strbuff=str; //备用
- x=lcddev.width-1;
-
- if(Show_Flag1)
- {
- while(*str != 0)//数据未结束
- {
- if(!bHZ)
- {
- if(*str>0x80) bHZ=1;//中文
- else //字符
- {
-
- LCD_ShowChar(x-n,y,*str,size,mode);//有效部分写入
- str++;
- x+=size/2; //字符,为全字的一半
- numchar++;
- }
- }else//中文
- {
- bHZ=0;//有汉字库
- Show_Font(x-n,y,str,size,mode); //显示这个汉字,空心显示
- str+=2;
- x+=size;//下一个汉字偏移
- delay_ms(speed);
- numHZ++;
- }
- }
-
- n++;
- Tolnum=size/2*numchar+size*numHZ;
- numchar=0;
- numHZ=0;
- x=lcddev.width-1;
- if(n>(x+Tolnum)) {n=0; Show_Flag1=0; Show_Flag2=1;} //n>239+8倍数 移出屏幕
- }
-
- // if(n==(Tolnum+size*10)) Show_Flag2=1; //间隔10个字位再次显示
-
- str=strbuff;
-
- if(Show_Flag2)
- {
- while(*str != 0)//数据未结束
- {
- if(!bHZ)
- {
- if(*str>0x80) bHZ=1;//中文
- else //字符
- {
-
- LCD_ShowChar(x-n0,y,*str,size,mode);//有效部分写入
- str++;
- x+=size/2; //字符,为全字的一半
- numchar++;
- }
- }else//中文
- {
- bHZ=0;//有汉字库
- Show_Font(x-n0,y,str,size,mode); //显示这个汉字,空心显示
- str+=2;
- x+=size;//下一个汉字偏移
- delay_ms(speed);
- numHZ++;
- }
- }
-
- n0++;
- Tolnum=size/2*numchar+size*numHZ;
- numchar=0;
- numHZ=0;
- x=lcddev.width-1;
- if(n0>(x+Tolnum)) {n0=0; Show_Flag2=0;Show_Flag1=1; } //n>239+8倍数 移出屏幕
- }
-
- // if(n0==(Tolnum+size*10)) Show_Flag1=1; //间隔10个字位再次显示
-
- //str=strbuff;
- }
复制代码 |
|