【友晶科技】基于FPGA的贪吃蛇游戏设计(五)——VGA驱动模块字符显示

13 篇文章 0 订阅
12 篇文章 2 订阅

VGA字符显示效果

游戏欢迎界面之后是难度选择界面的显示:

利用上一篇内容可以完成下面的绿、黄、红三个色块的显示,那上面的字符显示要怎么实现呢?答案是采用字符点阵来实现。

原理分析

字符点阵是VGA屏幕显示字符时对字符进行数字化的第一步,即把字符中着色部分和非着色部分以1和0表示,最后生成字节码的过程。只有生成了数字化的点阵,才可以在VGA屏幕上进行显示。

得到了字符点阵后还要设计一个Memory以存放字符点阵信息,然后在合适的时间时让VGA 按照存储的字符点阵信息控制颜色输出。

获取字符点阵


这里推荐一个免费的在线软件:

点阵生成软件|字模提取(支持中文) - LED、OLED、LCD、单片机在线取模、中文点阵取模软件、在线显示屏取模 - Arduino|STM32|STM8 - 文字或图片点阵生成软件icon-default.png?t=N7T8https://www.zhetao.com/fontarray.html


点击进入以后输入“请选择难度”,字节宽度选择8bit,每个字高32,每个字是4列:

(字高和字宽按照想要的大小设定即可,位宽建议选择8bit,5bit得到的汉字显得精度不高。)

生成的字符点阵如下:

代码实现

我们将字节码存储到设计的Memory里面去:

reg     [159:0] char    [31:0]  ;   //字符长160 ,宽32
  
//字符“请选择难度”
always@(posedge clk)
    begin
        char[0]     <=  160'h0000000000000000000000000000000000000000;
        char[1]     <=  160'h0000000000000000000000000000000000000000; 
        char[2]     <=  160'h00003c000000380001c000000000ee000003c000; 
        char[3]     <=  160'h0e003c000c063c0001e000f00000ff000003e000; 
        char[4]     <=  160'h0f003c180f07b80001cffff80000f7800001e038;
        char[5]     <=  160'h07803c3c0787b80001c7c0f00000f7800e00e07c; 
        char[6]     <=  160'h07bffffc078738c001c0c1e0003de3980ffffffe; 
        char[7]     <=  160'h079c3c60078f39e001c0e3c03fffe33c0f0e0700; 
        char[8]     <=  160'h07003cf0038ffff001de77c01c3dfffc0f0f0780; 
        char[9]     <=  160'h000ffff8030e38007fff7f800039c7000f0e0730; 
        char[10]     <=  160'h00073c00001c380039c03f00303bc7000f0e0778;
        char[11]     <=  160'h07003c18001c380001c03f00387bc7000ffffffc; 
        char[12]     <=  160'hff803c3c03b8383001c07fc01c7fc7300fce0700; 
        char[13]     <=  160'h77fffffe7ff0387801dffffe0e77c7780f0e0700; 
        char[14]     <=  160'h0738000077fffffc01ffdffe0f7ffffc0f0e0700; 
        char[15]     <=  160'h070600e007b9ce0001ff9e7807ffc7000f0e0700; 
        char[16]     <=  160'h0707fff00781ce0007fc1c3003fdc7000e0fff00; 
        char[17]     <=  160'h070700f00781ce003fc01c7801f9c7000e0e0700; 
        char[18]     <=  160'h070700e00781ce007fcffffc01e1c7000e0c0380; 
        char[19]     <=  160'h070700e00783ce187dc71c0003f1c7300e7fffc0; 
        char[20]     <=  160'h071fffe007838e1831c01c0003f1c7780e3e07c0; 
        char[21]     <=  160'h073f00e007878e1801c01c1807f9fffc0e070f80;
        char[22]     <=  160'h077700e007870e1801c01c3c0739c7001e078f00; 
        char[23]     <=  160'h07e7ffe0078f0e3c01dffffe0e3dc7001c03de00; 
        char[24]     <=  160'h07e700e00f9e0ffc01de1c001e3dc7001c01fc00; 
        char[25]     <=  160'h07c700e03ff80ffc01c01c003c19c7181c00f800; 
        char[26]     <=  160'h078700e07cf0000001c01c007819c73c3801fc00; 
        char[27]     <=  160'h070700e0f87fc0ff3fc01c00f001fffe3807ffc0; 
        char[28]     <=  160'h03070fe0701ffffe3fc01c00c001c000703f0ffe; 
        char[29]     <=  160'h000703e00007fff807c01c000001c00071fc03fe; 
        char[30]     <=  160'h000701c00000000003801c000001c000e7e00078; 
        char[31]     <=  160'h0000000000000000000000000000000000000000;
    end
 

然后在VGA显示器上布局要显示的内容:

字符将显示在水平的第15~ 25(不包括25)个block范围内, 以及垂直的第8~10(不包括10)个block范围内:

在该范围内char[char_y][159-char_x] == 1'b1的像素点将被显示成白色:

对应的完整实现代码请参考VGA_control.v模块。

贪吃蛇系列连载文章:

  ​
1. 基于FPGA的贪吃蛇游戏设计(一)

2. 基于FPGA的贪吃蛇游戏设计(二)——数码管驱动模块

3. 基于FPGA的贪吃蛇游戏设计(三)——计分模块

4. 基于FPGA的贪吃蛇游戏设计(四)——VGA驱动模块色块显示

5. 基于FPGA的贪吃蛇游戏设计(五)——VGA驱动模块字符显示

6. 基于FPGA的贪吃蛇游戏设计(六)——VGA驱动模块图片显示

7. 基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

8. 基于FPGA的贪吃蛇游戏设计(八)——状态机设计

9. 基于FPGA的贪吃蛇游戏设计(九)——蛇身控制

关注“友晶Terasic”公众号可获取源码下载地址。

移植到DE1-SOC、DE2-115时代码无需改变,只需修改引脚分配即可。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏小球游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值