任全会,黄根岭
(郑州铁路职业技术学院,河南 郑州 450052)
系统设计总体框图如图1所示,在系统上电后,FPGA将首先对系统进行初始化操作,在初始化操作中最重要的是寄存器的复位,显示开关的控制,功能设置以及对显示屏幕进行清屏。之后通过显示控制模块对LCD进行显示的控制。显示控制模块主要负责在LCD显示多行字符时进行换行操作,在用户指定数据在屏幕的指定显示位置时设置该位置所对应的RAM的值,以及在图像显示时进行的ROM地址重映射算法,和对LCD显示区对应RAM进行的写入操作。其中的数据分别来自中英文字符模块、动态数据模块以及图像数据模块。对此模块的设计,主体结构以状态机来实现[1]。
选用的晶振频率为50MHz,但是系统需要小于13.9kHz的时钟频率,需要设计一个分频器对其进行分频。控制LCD模块和FPGA的模块需要使用同一个时钟信号。模块如图2所示。
图1 系统设计总体框图
图2 时钟模块
设计采用访问RAM的方式对英文字符进行调用。显示控制模块在每一个时钟信号来的时候输出一个地址,这个地址在每一个时钟信号过后都自动加1,而这个地址则作为RAM的输入地址。相应的RAM返回给显示控制模块所对应的数据。模块设计流程图如图3所示。
图3 写入数据模块设计示意图(字符)
而RAM在设计的时候采用函数的方式,函数将负责自动辨识用户输入的英文符号,并将其转换为对应数据。若想改变显示的内容只需要改变进程中每一行末尾char_to_integer函数括号中的内容即可。
首先设定DDRAM值,利用计数器COUNTER,每写一个 RAM状态,COUNTER自动加1。经过转换后的COUNTER就是写入数据模块的RAM的输入地址。COUNTER的连续加1,RAM中的数据会输出到屏幕相应的位置。需要显示的一组数据就能显示在LCD显示屏上。相应的程序流程图4所示。
图4 显示控制模块设计流程图(字符)
动态数据的显示则是根据输入的变化,将其反应到写入数据模块的RAM中,使其反馈对应的数据。同时每进行一个写RAM状态后,便跳入设置DDRAM状态,将DDRAM值始终设为同一个,即屏幕上的同一位置,之后再次进入写RAM状态,如此循环,就可以看到数据的不断变化。由于显示的基本原理相同,但是显示的内容却有千万种,因此在程序的编写上也会有无数种方式[2]。基于这种原因,这里只用一个简单的0到15的计数器来做说明。
图5 动态数据部分设计流程图
在显示控制模块中,每过1个时钟信号,模块就会读取一次外部的数据,并把数据输入模块处理。主要工作室把外部数据分解为每一位上的十进制数据。同时输出信号到输入显示RAM,并调用返回的数据在屏幕上显示。同时,每次显示的时候,屏幕上显示的位置会自动重置,确保每次显示都能覆盖上次的显示,也就实现了动态数据的更新显示。
字符显示整体模块的功能包括任意中文字符及英文字符在12864-12屏幕上的任意位置的显示,同时还要显示动态数据的变动。这里的动态数据为一个0到15的计数器。字符显示整体模块的BLOCKDIAGRAM如图6所示。
初始化部分的QUARTUSII部分仿真结果如图7所示:
图6 图像显示整体示意图
图7 初始化部分仿真示结果
3.1.1 中文字符的显示
在屏幕的第一行显示“郑铁学院”4个汉字。
3.1.2 英文字符的测试
在屏幕的第二、第三行显示“Helloworld!”和“Current:”,这几个英文字符和标点。
3.1.3 动态显示的测试
在屏幕的第三行的“Current:”之后根据0到15的计数器的输入变化,显示0到15的两位十进制数字。在LCD显示如图8所示:
图8 显示结果3.2 结论
在字符显示部分,字符的显示速度较快。在12.5 kHz的时钟驱动下,平均显示一次内容的时间为毫秒级别。由于在设计时充分考虑了程序的易用性,更改文本在屏幕的显示位置只需在程序对应的SETDDRAM的部分中修改需要的数据即可。而对于文本的变更,特别是英文字符,只需在输入数据RAM的模块中按顺序键入需要显示的文本即可。对于中文则需要对照中文字符表来操作[3]。
在图片显示时,需要的操作时间比较长,平均显示一副图片大约需要大于半秒,不到1秒的时间。因此如果要做动画显示,则响应时间过长,大于0.08秒。但是在单幅图片的显示上,12864-12显示的图片较为清晰,对比度较高。
[1]黄亮,杨景常.基于SOPC的TFT触摸屏显示系统设计[J].液晶与显示,2009,26(3):718 -722.
[2]赵擎天,尉广军,姚义.基于SOPC的多路并行同步数字信号采集系统设计[J].军械工程学院学报,2010,32(7):96-99.
[3]陈珍,高波,范叶敦.基于SOPC的复合信号幅频测试仪[J].电子技术应用,2010,36(11):20 -22.