图形 LCD 面板 3 - 图形
让我们研究一下生成图形视频数据的 3 种方法。
本文引用地址:栅格化位图
在 LCD 上显示图形的经典(且简单)方法是将光栅化位图数据保存到 RAM 中。
我们将在这里使用一个 blockram。
我们在这里显示一个 128x32 像素的小位图(非常适合 4Kbits 块内存):
// Use a blockram to hold the graphical data wire [7:0] BitmapData; blockram_8x512 RAM_bitmap(.clk(clk), .rd_adr({CounterY[4:0],CounterX[4:1]}), .data_out(BitmapData)); // Let's say we need 4 bits at a time wire [3:0] LCD_Bitmap4 = CounterX[0] ? BitmapData[3:0] : BitmapData[7:4]; // Display the data into a chessboard pattern wire [3:0] LCD_BitmapChessboard = (CounterY[5] ^ CounterX[5]) ? 4'b000 : LCD_Bitmap4 ^ {4{CounterY[5]}};
上面未显示RAM的写入方式。最简单的方法是将其视为ROM(RAM内容是配置的一部分,在运行时不会改变)。
下面是一个微距镜头:
光栅化位图的缺点是需要足够大的 RAM 来保存位图的每个像素的状态。 使用内部 RAM的成本很高,因此通常使用外部RAM。
现在,让我们探索更多创建图形的原始方法。
曲线 y=F(x)
假设我们想要显示一个 y=F(x) 波形,就像正弦波一样。这出乎意料地容易做到。 我们将“Y”值保存到一个块函数中,并通过读取RAM并将这些值与“CounterY”(当前行号)进行比较来逐行生成图片。
// We assume CounterX and CounterY are available: // CounterX is the pixel number of the current line // CounterY is the line number // We use a RAM to hold the "Y" values // Y=F(CounterX) wire [7:0] RAM_Y_value; blockram_8x512 RAM_FXY(.clk(clk), .rd_adr(CounterX), .data_out(RAM_Y_value)); // check for equality between the "Y" values and "CounterY" reg grcpeq1; always @(posedge clk) grcpeq1 <= (RAM_Y_value==CounterY); reg grcpeq2; always @(posedge clk) grcpeq2 <= grcpeq1; // check for "greater-than" between the "Y" values and "CounterY" reg grcp1; always @(posedge clk) grcp1 <= (RAM_Y_value>CounterY); reg grcp2; always @(posedge clk) grcp2 <= grcp1; // display a pixel if equality, or if "CounterY" is between 2 successive "Y" values wire FXpix= grcpeq2 | (grcp1 ^ grcp2);
以下是使用 F(x)=cos(x*2*pi/480)*sin(x*2*pi/480*4) 的结果:
旋转缩放
Rotozoom 是显示具有线性几何变形的位图的有效方法。 特别是,这允许轻松旋转和缩放图片。在下面的实现中,我们在屏幕上显示一个旋转的棋盘图案。
reg [15:0] X0, Y0, X1, Y1;always @(posedge clk)if(Vsync) begin X0 <= 0; Y0 <= 0; X1 <= 0; Y1 <= 0;end else if(Hsync) begin X0 <= X1 - 100; Y0 <= Y1 + 400; X1 <= X1 - 100; Y1 <= Y1 + 400;end elsebegin X0 <= X0 + 400; Y0 <= Y0 + 100;end // Display a chessboard pattern by XOR'ing the MSB of X and Y counters // You could also display a rotozoomed bitmap by feeding X and Y to a bitmap in a RAM wire rotozoom_pix = X0[15] ^ Y0[15];
这被简化了,因为增量值是固定的(400 和 100 以上)。 您可能希望在实际实现中改变它们。 通过改变系数,您可以旋转和缩放棋盘。
这是与上一个波形混合的结果:
然后,您可以将其与一些文本混合在一起......
文章来源于:电子产品世界 原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关文章
一文详解示波器的触发功能(上)(2023-03-31)
一文详解示波器的触发功能(上);示波器是以图形方式显示变化的电压信号的电子测量仪器,通常是一个或多个信号随时间变化的二维图像,被誉为“电子工程师的眼睛”。如果要稳定观察、显示示波器波形,捕获......
常见电气字母图形符号、实用仪器仪表、实物接线彩图(2024-09-25 18:30:32)
常见电气字母图形符号、实用仪器仪表、实物......
新的宝马抬头显示器将跨越挡风玻璃的整个宽度(2024-07-09)
视觉显示屏的放置位置肯定有助于驾驶员将视线保持在道路上。清晰可辨意味着与现有图形相比,它需要更少的注意力来理解,而现有图形在阳光直射下几乎不可见。
宝马表示,所有乘客的新媒体和娱乐功能将在适当的时候详细介绍,以及Neue......
处理数字示波器测量问题(2023-06-26)
MS/s 采样率的奈奎斯特频率。
因为图 1 是非动画图形,所以混叠波形看起来具有稳定的触发,但实际上并非如此。触发电平设置为零伏,正斜率和无混叠波形显示正确的触发电平。混叠......
处理数字示波器测量问题(2023-03-16)
条较低的迹线是应用了插值的混叠信号。混叠迹线的 FFT 在 100 MHz 处有一个频率峰值。请注意,FFT 迹线在 250 MHz 处被截断,这是 500 MS/s 采样率的奈奎斯特频率。因为图 1 是非动画图形......
比家长专业!比老师高效!阿尔法蛋AI词典笔T20自主学习天花板(2023-03-01)
专业。一些家长也想着请教老师,但是远水解不了近火,很难真正帮到孩子。那孩子的学习怎么办呢?阿尔法蛋AI词典笔T20就可以完美解决,比家长专业,比老师高效,妥妥的自学天花板工具。本文引用地址:T20比家长专业在哪......
微软自曝花数亿美元为OpenAI组装超算开发ChatGPT 使用数万个英伟达芯片(2023-03-14)
助开发爆火的聊天机器人ChatGPT。这台超算使用了数万个图形A100,这使得能够训练越来越强大的AI模型。本文引用地址:试图训练越来越大的AI模型,这些模型正在吸收更多的数据,学习越来越多的参数,这些参数是AI系统......
用示波器检测VCD机波形(2022-12-21)
故障的原发部位。
测试VCD机电路中的信号波形时,要注意有些波形在VCD机处于暂停状态时仍可测量,有些则必须在VCD机处于播放状态时才能测量。本文给出的一些关键点的正常波形,主要是在新科超级VCD(SVD201MP......
直击29届光亚展,智谋纪AI照明懂你之光引燃全场(2024-06-17)
出出展厅的客流,都被AIBBS大数据监测及分析子系统清晰记录,并形成了可视化图形在展厅外墙大屏上播放。这一功能可以让商家轻松掌握店铺客流平峰变化、商品热度等等经营必备大数据,让线......
基于SVPWM以及实际MCU定时器输出脉冲的中心对齐模式(2024-08-19)
汇总到单个模块方便后续调用,后接的逆变桥与电机就直接使用simulink库自带的模型。
三、开环仿真运行验证
到这我们搭建开环SVPWM模型验证各项参数,将之前已经搭建的功能模块连接起来,逆变桥与电机选用simulink库自带......