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