本次测试是准备做一个多功能时钟,没有去购买数码管,而是准备使用现成的LCD显示屏。现有的显示屏是192*64点阵的,起初准备使用32*48点阵的字库来作时钟显示,但没有找到合适的字库文件,最后用一个字模软件生成了24*48点阵的ASCII字库,但测试时不能正常显示,整个屏幕全部显示杂乱无章的字符,调试了两天都没有解决问题,加上这个字库字形不美观,上下均有很多空白,实际有效部分只有24*32点阵,最后决定自己制作一个小字符集字库。
从网上找到一个可以生成自定义点阵的字模软件:
软件的界面如下:
我没有找到直接生成点阵字库的方法,只好手工按图上的点阵写数据。因为图上的点阵比较多,辨认起来容易错位,我只好用笔尺来确定位置,之后又用手机支架来确定行列位置:
最后才想起来直接用窗口遮挡的方式,将需要的图形显示出来:
我生成一个字符的点阵数据便测试效果,开始几个都能正常显示,如下图:
但在增加到第8个字符时,显示便出现异常,屏幕上竟然会显示出许多多余的杂乱字符来:
反复测试后发现只要注释掉其中的一个字符点阵数据时,程序运行就正常,多于7个字符的点阵数据就不能正常运行,说明点阵数据的数组过大会直接影响到程序正常运行。
我计算了一下,一个字符的点阵数据是120字节,那么7个字符的数据是840字节,若是数组增加到960个字节时,程序就不能正常运行,写屏幕的操作便会无端增加了循环。我百思不得其解,难道说数组定义的过大难道会影响到程序运行时循环变量么?
为了解决问题,我无奈只好将数组拆分,每7个字符点阵数据定义成一个数组,我需要使用大约18个字符,于是便拆分成三个数组:
然后在写操作的程序中根据需要分别调用不同的数组:
可是问题又出现了,代码中出现了调用第三个数组时,尽管没有实际运行到这行代码,显示屏的写操作又乱了,其他部位又充满了杂乱的字符,只有将调用第三个数组的代码注释掉,屏幕的写操作才恢复正常。为了解决这个问题,我尝试将写第三个数组的操作代码另外独立出一个函数,但写操作仍然又乱了。我考虑会不会不光是单个数组的长度有限制,总得数据区域也会不会超出了,于是我将暂时不用的汉字字符集注释掉,测试仍然不解决问题,况且从编译结果看,内存占用还少得很:
下面是我测试项目的压缩包,看看哪位大佬能够解释这个现象:
Mytest1.X.rar
(367.91 KB)
|