VGA色块显示#VGA显示数字
VGA驱动色块显示
了解了VGA的显示原理和ADV7123控制后,再去实现色块显示就容易了。
- 像素坐标
跟显示色条不同,要在屏幕上不同的地方显示色块,需要用像素坐标来定位色块。其实,就是分别用行扫描的计数值和场扫描的计数值来表示坐标的x,y值。
- VGA显示数字
比如,用屏幕显示计分的数字
本质,是把屏幕分区,然后某些区域输出某些颜色。
贪吃蛇游戏种的食物,蛇头都是一个16*16像素的block,蛇身是若干block组成。
显示的数字,为了计算方便,也用同样的block为基本单位,模拟数码管的分段。
每段2个block宽,8个block长。
以显示数字0为例。
代码:
case (bcd_data[3:0]) //个位数 4'd0:begin //显示0 if(pos_x[9:4] >= 26 && pos_x[9:4] < 34 && pos_y[9:4] >= 8 && pos_y[9:4] < 10) vga_rgb = 24'h80ffff;//第0段输出蓝色 else if(pos_x[9:4] >= 26 && pos_x[9:4] < 34 && pos_y[9:4] >= 20 && pos_y[9:4] < 22) vga_rgb = 24'h80ffff;//第3段输出蓝色 else if(pos_x[9:4] >= 26 && pos_x[9:4] < 28 && pos_y[9:4] >= 8 && pos_y[9:4] < 16) vga_rgb = 24'h80ffff;//第5段输出蓝色 else if(pos_x[9:4] >= 32 && pos_x[9:4] < 34 && pos_y[9:4] >= 8 && pos_y[9:4] < 16) vga_rgb = 24'h80ffff;//第1段输出蓝色 else if(pos_x[9:4] >= 26 && pos_x[9:4] < 28 && pos_y[9:4] >= 14 && pos_y[9:4] < 22) vga_rgb = 24'h80ffff;//第4段输出蓝色 else if(pos_x[9:4] >= 32 && pos_x[9:4] < 34 && pos_y[9:4] >= 14 && pos_y[9:4] < 22) vga_rgb = 24'h80ffff;//第2段输出蓝色 else vga_rgb = 24'h000000;//否则输出黑色 end
这里x,y坐标只取[9:4],是因为每个block都是16*16像素,所以x,y坐标的[3:0]都是0,相当于每个block的左上角的坐标就是这个block的坐标。
参考文献
https://mp.weixin.qq.com/s/WiVS1qC_9hBaoQh0R_wzkQ
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期