【友晶科技】基于FPGA的贪吃蛇游戏设计(二)——数码管驱动模块

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

DE10-Standard/DE1-SoC/DE2-115

数码管介绍

在数字电路中,7段数码管是一个应用非常广泛的显示器件,它有7个可独立点亮的线段(LED灯), 用户可以通过控制点亮7个线段中某些线段来显示十六进制数0~F。

目前有两种类型的7段数码管显示器件:共阴极数码管和共阳极数码管。

共阴极数码管是7个LED的阴极端一起接地,每个阳极端单独连接到控制端(比如接到FPGA的GPIO pin)。共阴极数码管器件是高电平有效。

共阳极数码管是7个LED的阳极端一起连接VCC,每个阴极端单独接控制端(比如接到FPGA的GPIO pin)。 共阳极数码管器件是低电平有效。

给7段数码管每一段编号如下:

FPGA控制的时候一般按照6-5-4-3-2-1-0的顺序给值,比如想要显示数字0,拿共阳极数码管举例则5-4-3-2-1-0段点亮,6段熄灭,输出数据7’b1000_000即可。

DE10-Standard开发板的数码管

DE10-Standard开发板(或者是DE1-SOC、DE2-115)上面的数码管是共阳极数码管,所以是低电平点亮。

数码管驱动模块设计

共阳极数码管显示的各数字对应的输出到数码管的代码如下表:

显示数字

二进制码

输出到数码管

0

0000

1000000

1

0001

1111001

2

0010

0100100

3

0011

0110000

4

0100

0011001

5

0101

0010010

6

0110

0000010

7

0111

1111000

8

1000

0000000

9

1001

0011000

A

1010

0001000

b

1011

0000011

C

1100

1000110

d

1101

0100001

E

1110

0000110

F

1111

0001110

数码管显示控制模块seg_display.v的信号描述如下:

数码管显示控制模块seg_display.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时代码无需改变,只需修改引脚分配即可。

一.程序功能 利用数码管的动态显示,以模拟贪食蛇。S1、S2、S3、S4分别控制蛇的上、下、左、右的移动,当蛇吃到随机点亮的dp时,则态显示的数码管的亮点个数自动加一,同时作为蛇食物的dp点重新随机点亮一个(注意这里只考虑0~2号前三个数码管的dp点作为食物。第四个数码管的dp点若作为食物,蛇吃后必定撞墙,为了确保蛇能不断长长的可能性,所以第四个数码管的dp不考虑作为食物)。当出现蛇越过数码管的边缘、蛇首尾重合或者蛇的长度(已点亮的数码管点的个数)超过定义的最大长度(程序定义的是6,可以改动)时,游戏结束。 .程序原理 》》》》》》》》》》》》》》》》 三.关键代码 /******************************************************************* * Copyright (C),2012-2014,764 Studio. * File name: segsnake.c * Author: zzb Version: v1.0 * Date: Mar 30.2012 * Description: 数码管模拟的贪食蛇 * Function List: init(void) 初始化 * gamePlay(void) 游戏启动控制 * createFood(void) 随机选择要点亮的dp * drawFood(void) 点亮已选择的dp作为食物 * drawSnake(void) 点亮蛇身 * touchWall(void) 越过数码管的边缘 * touchSelf(void) 碰到已点亮的点 * gameOver(void) 游戏结束 * moveSnake(void) 按设定的方向移动已亮的点 * oppositeDirection(i16 keyCode) 输入方向与原来方向相反时,不做处理 * foodEat(void) 点亮的dp被吃到 * expandSnake(void) 吃到dp后的蛇变长 * getKey(void) 获取按键信息 * main() 入口函数 ********************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值