RGB LCD字符和图片显示
目录
一.实验任务
本节的实验任务是通过启明星开发板上的 RGB TFT-LCD 接口,在正点原子的 RGB LCD 液晶屏的左上角位置从上到下依次显示图片以及 4 个汉字“正点原子”。其中每个汉字的大小为 32*32,图片的大小为100*100。
二.模块设计
2.1整体模块设计
由于本实验中用到的clk_div、rd_id、lcd_dirver和lcd显示彩条实验中的完全一致,这里就不再做赘述。唯一不同的是lcd_display模块,因为这里要显示的lcd_data不同于彩条实验。故整体的模块设计如下。
2.2字符图片的取模
字模:将一个确定大小的文字转换成0/1矩阵,0代表背景像素(对该像素点给背景颜色),1代表字符像素(对该像素点给自定义字符颜色),如下图所示。
“正点原子”该四个字的取模需要用到取模软件“PCtoLCD2002”
图片像素数据的获取通过 “PicToLCD ”软件获得,转换为.coe格式文件保存即可。
2.3ROM IP核的创建
因为图片大小为100X100,采用RGB888模式,故每个一共有10000个像素点,每个像素点有24位,所占内存大小是100x100x24bit=0.23Mbit,该芯片RAM容量为4.9Mbit,完全够用。
2.4LCD显示模块设计
本实验中只需要根据lcd上的x,y坐标来确定像素数据值,无需用到lcd的长和宽的信息。
2.5绘制lcd_display波形图
2.5.1整体波形图
设计图片显示起始坐标为(10,10),长和宽位100;
设计字符显示起始坐标为(10,120),长为32,宽为128,因为一个字的大小为32X32,四个字横着排成一排宽就从32变为32X4=128。
2.5.2显示图片波形图
由于图片起始坐标为(10,10)所以当y坐标到10,x坐标到10就要将该坐标像素值传到lcd屏幕中,但是 rom从地址中读数据有一个clk的延迟,将该数据传递给lcd还有一个clk的延迟,因此当x坐标到8的时候就要开始进行读rom操作,这样经过两个clk的延迟才能保证x坐标到10的时候能正常显示图片。所以rom_addr在第十行(x=8~108)的时候从0累加到100,到第11行(x=8~108)的时候从100累加到109,依次类推,直到第十行第十列累加到999,方可将所有存储数据传递出去。
从modelsim仿真波形中可以看出与设计相符。但这里需要注意的是当显示到(109,109)的位置时,有一段位置状态,这是因为我们存储图片大小为100X100,即共10000个,存储到rom中就是占用了(0~9999)地址,因此10000为未知状态。
2.5.3显示字符波形图
char是用来存储字符字模的二维数组,大小是32X128,由上面2.5.1可知当运行到第120行第十列,即(10,120)时,开始显示字符信息,但是由于传送数据有一个clk的延迟,故需要提前一排开始判断char中的字模是0还是1,如果是1,就对该点像素赋值为字符颜色,如果为0,就对该像素赋值为背景颜色。
由于上面我们对字符取模时采用的是高位在前,因此在(9,120)处判断的是char[0][127]而非char[0][0]。
由上面波形图可以看出,当位于第120行和第121行的时候,pixel_data的值都为e0ffff(这是在代码中定义的背景颜色) ,这和上图中所取的字模矩阵的值一致(上图中第一行和第二行的值全为0,代表全给背景色)。
当运行到第150行也就是倒数第二行时, 由上面二维字模表可以得出最后24个像素点的字模是0000_0010_0000_0000_0000_0000,故倒数第二行倒数第18个像素点(pixel_xpos=137-17=120)为1 ,应该给字符颜色ff0000(这是在代码中定义的字符颜色)。表现在波形图中就是pixel_ypos=150,pixel_xpos=120的时候pixel_data=ff0000。
三.板级验证
原文地址:https://blog.csdn.net/mengsheng12/article/details/140438904
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!