在VGA 上显示英文字符、汉字等效果,其方法与在单片机中使用字符液晶显示一样,也是通过字符点阵原理实现。而在VGA 显示中,处理点阵数据稍显复杂,一般设计思路是首先通过字模软件将要显示的字符进行取模操作,得到用“1”和“0”表示亮、灭(显示与不显示)关系组成的十六进制数据,然后再将字模数据存储于“LPM_ROM”模块中,在VGA 正确时序控制下,依次读取ROM 内的字模数据,对液晶屏对应像素点实现亮、灭控制,从而实现正确的显示效果。
本节以在VGA 上显示“四川师范大学成都学院”10 个汉字为例,详细介绍VGA 汉字显示的基本方法。
1. 字模提取
字模提取是利用字模提取软件实现的,这里采用的是“PCtoLCD2002”字模软件。它能实现对不同字体,不同格式的文字,图片等进行取模,并且能方便地输出C51、A51或者各种格式的16 进制字模。操作非常简单方便,图5.6 所示为软件界面。
图5.6 PCtoLCD2002 软件界面
在图5.6 中,在“模式”菜单中设置为“字符模式”;打开“选项”菜单,对取模的格式进行设置,如图5.7 所示。
图5.7 设置字模选项
在图5.7 中,设置点阵格式为“阴码”,即用“1”表示显示,“0”不显示;取模方向为“顺向”(高位在前);取模方式为“逐列式”,其余为默认即可。
在图5.6 中可以改变字体和点阵大小,此处设置点阵大小为64×64,然后在“输入文字转换内容”处输入要提取字模的内容,如“四川师范大学成都学院”,然后单击图5.6中的生存字模选项,软件显示界面如图5.8 所示。
在图5.8 中单击“保存字模”完成字模数据的存储,这样就得到了相应汉字的字模数据。仔细研究该数据组成结构,不难发现,按照这样的格式取模,每个汉字所占数据大小为64×64 bit,在这些数据中,连续4 个字节表示1 列的字模数据。
图5.8 生成字模结果
2. 生成MIF 文件
为了能将汉字字模数据存储在ROM 中,前文介绍过必须将数据转换为MIF 文件或者Hex 文件格式,对于MIF 文件的生成方法有很多,对于数据量小的时候可以采用手动输入,但是对于像文字、图片的取模数据,由于数据量非常庞大,手动输入不太可能。这里介绍由韩斌老师设计的一个自动生成MIF 文件的软件的使用方法,即“C2Mif”软件。该软件使用非常方便,尤其对这种字模或图片取模数据,转换为MIF 格式,使用简单。由于该软件只能识别“,”“;”“0x”“{”“}”、空格、回车这些字符,因此对于字模软件生成的字模文本文件中的其他注释部分以及文件头都需要手动删除,才能进行“C2Mif”软件的转换。
打开刚刚生成的字模文件,如图5.9 所示,然后将图中的文件头和注释部分内容全部删除,然后保存文件,这样就可以通过“C2Mif”软件进行转换生成MIF 文件。
图5.9 编辑生成的字模文件
启动“C2Mif”软件,如图5.10 所示。
图5.10 C2Mif 软件
在图5.10 中单击“打开”菜单,选择前面生成并且修改好的字模文件,并设置数据格式为默认16 进制,数据位宽在下拉框中选择64 位数据格式,设置完成后单击“C2Mif一键转换”,即可生成MIF 文件,如图5.11 所示。
图5.11 生成MIF 文件(www.xing528.com)
此时,在计算机桌面便生成了名为“CrazyBingo.mif”的文件,可以将该文件重命名为其他名字,此时可以用记事本打开如图5.12 所示。
因为字模取模采用“逐列式”,且点阵大小为64×64,所以该MIF 文件内容数据位宽为64,表示每个汉字1 列的数据,因此要表示一个汉字需要用64 个存储深度来存储数据。该示例总共将要显示的汉字为10 个,因此,存储深度为640。在定制LPM_ROM 时,需要注意这两个参数。
图5.12 生成的MIF 文件
3. 定制LPM_ROM
参考前文中定制LPM_ROM 的设计方法,完成该字模数据存储器ROM 的定制,注意数据位宽需要设置为64 位,数据深度设置为1 024,其余设置如前文所述。
4. 定制PLL
为了设计简单,在该项目中需要用到25 MHz 的VGA 驱动时钟,因此,这里可以调用PLL 宏功能模块实现将50 MHz 分频为25 MHz,向VGA 时序模块,VGA 显示模块和LPM_ROM 模块提供时钟信号。关于PLL 的定制方法参考前文,此处不再重述。
5. VGA 时序模块
将【代码5.1】的VGA 时序模块“VGA_SYNC.v”代码稍加修改,原因是需要将该模块的时钟从原来的50 MHz 输入,改变为由PLL 直接提供的25 MHz 时钟输入,因此,需要将【代码5.1】中的二分频电路代码删除,同时把输入端口“CLK_50MHz”改为“LCK”即可。
6. VGA 汉字显示控制模块
该模块的主要功能是如何产生准确的ROM 存储器的地址以及如何将ROM 点阵数据准确对应到显示器的文字显示区。该模块设计见【代码5.5】。
【代码5.5】VGA 汉字显示控制模块
在该代码中第16 行,确定了该10 个汉字显示的区域为第208 行至271 行的所有列(0 到640 列)。字符的第一列共64 位,存在存储器的地址位addr0 的地方,第二列存在addr1 的地方。所以深度为640。当从存储器中取数的时候,扫描屏幕的一行,对应存储器中一列。例如:显示字符的第一行,访问的存储器依次为addr0,rom_data[63];addr1,rom_data[63];addr2,rom_data[63];…;addr639,rom_data[63]。
7. 顶层设计
完成上述各个模块设计后,将各模块文件拷贝到新工程文件中,建立工程,完成顶层文件设计。可以采用原理图和文本两种方式实现,其中图5.13 是原理图设计方式完成的顶层设计,【代码5.6】是采用文本方式完成的顶层设计代码。
图5.13 顶层设计原理图
【代码5.6】VGA 汉字显示顶层设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。