OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3976|回复: 8

希望显示的字符底色和背景色相同,在线求大神帮忙解决

[复制链接]

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-12-6
在线时间
5 小时
发表于 2015-8-18 14:27:08 | 显示全部楼层 |阅读模式
5金钱



昨天采用叠加显示的方式,可以使显示的静态文字及字符底色和背景色相同,今天显示RTC实时时间时,遇到新的问题了,采用叠加方式显示时数字会重叠,因此我采用每次显示前先填充底色再重新显示的方式显示,这样显示的结果如上图所示,有乱码?求助大家,有没有更好的方式使显示的动态文字背景和屏幕背景相同啊?
//显示数字,高位为0,则不显示
//x,y :起点坐标 
//len :数字的位数
//size:字体大小
//color:颜色
//num:数值(0~4294967295); 
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
{          
 u8 t,temp;
 u8 enshow=0;        
 for(t=0;t<len;t++)
 {
  temp=(num/LCD_Pow(10,len-t-1))%10;
  if(enshow==0&&t<(len-1))
  {
   if(temp==0)
   {
    LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
    continue;
   }else enshow=1;
    
  }
   LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
 }
}
//显示数字,高位为0,还是显示
//x,y:起点坐标
//num:数值(0~999999999); 
//len:长度(即要显示的位数)
//size:字体大小
//mode:
//[7]:0,不填充;1,填充0.
//[6:1]:保留
//[0]:0,非叠加显示;1,叠加显示.
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)

 u8 t,temp;
 u8 enshow=0;        
 for(t=0;t<len;t++)
 {
  temp=(num/LCD_Pow(10,len-t-1))%10;
  if(enshow==0&&t<(len-1))
  {
   if(temp==0)
   {
    if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01); 
    else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01); 
     continue;
   }else enshow=1;
    
  }
   LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01);
 }
}

最佳答案

查看完整内容[请看2#楼]

回复【8楼】正点原子: --------------------------------- 解决了, POINT_COLOR=WHITE;  //文字白色 BACK_COLOR=BLACK;  //黑色背景    每次显示都这样设置一下肯定不会错。 6804显示任意大小图片的程序还是帮忙弄一下啊,我做了个初样样机,手上就这个屏,还有一个奇美LQ035NC111 3.5寸的屏 搞定一个就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-12-6
在线时间
5 小时
 楼主| 发表于 2015-8-18 14:27:09 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
解决了, POINT_COLOR=WHITE;  //文字白色
BACK_COLOR=BLACK;  //黑色背景    每次显示都这样设置一下肯定不会错。
6804显示任意大小图片的程序还是帮忙弄一下啊,我做了个初样样机,手上就这个屏,还有一个奇美LQ035NC111 3.5寸的屏 搞定一个就可以了
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-18 14:48:43 | 显示全部楼层
看起来不像是乱码,而是底色没有擦全。
有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-12-6
在线时间
5 小时
 楼主| 发表于 2015-8-18 15:05:12 | 显示全部楼层
回复【2楼】dragon7799:
---------------------------------
而且先擦除,再显示会有跳动,正常的方法应该还是直接显示要显示的类容,就是字和屏幕分开显示,不知道怎么改好
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-18 16:42:44 | 显示全部楼层
回复【3楼】小蚂蚁:
---------------------------------
在Windows程序设计中,一般是采用双缓冲技术消除频繁重画导致的闪屏问题。另外再加上区域重绘,避免大范围重绘等。更高级的直接利用底层驱动了。

不过,说到咱这块板子,能想到的方法,如果你要比较完美,而且将来支持图片形式的底图,那么就需要稍微麻烦点,采用类似双缓冲的技术。具体做法:
1、获取要显示的字符涉及的范围区域坐标
2、将该范围当前背景颜色点阵缓存
3、将当前要显示的字符笔划涉及的点在颜色点阵缓存中对应位置改为前景色
4、扫描点阵缓存中的每个点,如果与屏幕上对应的颜色不同,则重画该点。
有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-12-6
在线时间
5 小时
 楼主| 发表于 2015-8-18 18:41:15 | 显示全部楼层
继续期待回复
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 20:11:00 | 显示全部楼层
楼主这个真心没难度。。。
自己调试下吧。
我们综合实验的时钟界面,怎么做的?参考下了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-12-6
在线时间
5 小时
 楼主| 发表于 2015-8-18 22:35:25 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我的综合实验程序烧写进去都不正常啊,上次发图片给你了,6804  3.5寸屏,只显示一半,而且显示的是乱码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 23:04:34 | 显示全部楼层
回复【7楼】小蚂蚁:
---------------------------------
不用进去,看代码也可以。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 18:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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