编程技术分享平台

网站首页 > 技术教程 正文

用写缓存法可以解决文字闪烁,还可以实线很多效果 #STC8H

xnh888 2024-10-26 16:38:26 技术教程 38 ℃ 0 评论

在前面介绍画画函数的几期视频中,曾多次将不同的图案同时画进缓存数组里,而那些图案并没有出现闪烁的现象。既然如此,能否将文字也用同样的方法解决闪烁的问题?接下来就验证一下这个猜想。

·第一种方法:解决学符闪烁。前面介绍过的显示文字和图片的函数都是将字库里的数据通过写数据指令直接发送给屏幕的显存。把文字也像画画一样写进缓存数组GRAM,就需要将向屏幕显存写数据的指令改成向缓存数组赋值,最后再一次性发送给屏幕显存。

具体的改法:这里用显示函数里的显示一个字符的函数OLED_ShowBMP为例子。在Q里有时候用右键跳转来查看函数信息,会弹出没发现信息的错误提示。多数是因为Q在安装之后输出设置里的浏览信息的选项GRAM默认是没有被勾选的,只要按照提示的操作把它勾上,然后将程序工程整体编译一下,只要不是代码错误等其他原因就都可以顺利跳转到目标函数内容了。

先将这个函数复制一份,为了区分写屏幕和写缓存的功能,在函数名ShowBMP前面添加一个大写字母G。接下来修改负值的部分。

·首先是显示六乘八字符的地方,再向屏幕显存直接发送数据的OLED_ShowBMP函数的位置写一行GRAM,y乘以一二八加x加i等于六乘八字库的字母数据。

·然后把写数据指令OLED_ShowBMP以及定位语句OLED_ShowBMP都删除掉就可以了。

·在显示八乘十六字符的地方进行同样的修改。因为八乘十六的字符占了屏幕的两行,所以向缓存数组GRAM赋值的时候也要在xy和xy加一两行分两次赋值。

·最后把两组set position和right bite也都删除掉。

这样这个函数就修改完成了。

下面在演示函数里调用一下修改后的OLED_ShowBMP,即是OLED_ShowBMP在屏幕的第第零行的第八列、第二十列和第三十二列三个位置分别显示三个字符,OLED_ShowBMP字体大小为十二。看一下结果,怎么是黑屏?不用紧张,这是因为要显示的字符现在正待在缓存数组里,还需要运行一下刷新屏幕的函数OLED_ShowBMP才可以显示出来。

再试一下,三个字母已经出现在屏幕上了。现在在演示函数里写一段动态画斜线的代码,然后将刚才这几行代码放进这段动态画线的循环里面编译下载,可以看到即便画的线跟显示的字符有重叠,二者也都没有出现闪烁的现象。实验成功了!

接下来的几个显示函数改起来就很容易了,因为显示字符串的函数Showstring和显示数字的函数Shownumber都是调用Show差函数来实现显示的,所以只需要把函数里面所有的Showchar都改成GShowchar就可以了。

紧接着的显示汉字的函数Showchinese,还有显示图片的函数Showbmp,修改过程也跟修改Showchar一样,把rightbite语句都替换成给Gram复值的语句,每一行都要替换,千万不要漏掉,并且去掉定位语句setposition就可以了。显示图片的函数也进行同样的修改。

最后不要忘记给函数明理加上g,现在实验一下修改的成果。在动态划线的循环里用刚刚修改过的几个函数显示一下字符串数字、汉字还有图片,字符串就用一段拼音数字就写一个六六六。

显示汉字的函数之后会介绍一种可以像Showchar和Showstring函数一样直接输入汉字就可以显示出来的方法,图片就用之前被余弦函数曲线摸过的那条鱼编译下载,发现这条鱼在瑟瑟发抖。检查一下代码,原来是显示图片的语句,函数明写成了不带g的,加上g之后再看一下,可以看到所有写缓存版本的显示函数显示的内容都没有发生闪烁了。

到这里把字符写进缓存数组的方法同样也解决了文字闪烁的问题。在接下来的视频里还可以对这些显示函数进行更多的改动,从而实现更多的效果。感谢观看,欢迎来评论区交流。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表