北邮数字电路实验下猜数字l

更新时间:2023-10-19 14:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字电路与逻辑设计实验(下)

实验报告

简易猜数字游戏机的设计与实现

班级: 姓名: 学号: 班内序号:

2015 年11 月 05 日

1

一、 简易猜数字游戏机设计与实现的任务要求????????3

二、 简易猜数字游戏机系统设计??????????????4

1. 设计思路 2. 总体框图 3. 分块设计

三、 仿真波形及波形分析?????????????????5

四、 源程序(要有注释)?????????????????8

1. 顶层源码(GuessNum.vnd) 2. 键盘源码(Keyboard.vhd) 3. 消抖源码(xiaodou.vhd) 4. 点阵源码(DotMatrix.vhd) 5. 数码管源码(Display.vhd) 6. 随机数源码(random.vhd) 7. 蜂鸣器源码(beep_t.vhd)

五、 功能说明及资源利用情况???????????????26

六、 故障及问题分析???????????????????27

七、 实验总结??????????????????????30

2

一、 简易猜数字游戏机设计与实现的任务要求 实验基本要求:

1. 游戏规则:通常由两个人玩,一方出数字,另一方猜。出数字的人要想好一

个没有重复数字的4 位数,不能让猜的人知道。

2. 数字设置:通过 4*4键盘进行 4位数字输入,在数码管(DISP0~DISP3)上

显示当前所输入的数字。通过设置确定键(BTN1键)进行锁定,此时数码管上的数值消失,同时用点阵开始倒计时,即:初始状态点阵全亮,然后从右下角开始,由右到左、由下到上逐点逐排依次熄灭,间隔时间为 1s,共计64s。

3. 猜数字:可以通过 4*4 键盘进行 4 位数字输入进行猜数字,且每输入一位

数字在数码管(DISP0~DISP3)上显示当前所输入的数字,按确定键(BTN2键)进行确认,此时要根据输入的这组数字给出几A几 B,其中: ~ A前面的数字表示位置正确的数的个数,用DISP5显示

~ B前的数字表示数字正确而位置不对的数的个数,用DISP4显示

~ 如正确答案为2134,而猜的人猜5314,则是1A2B,其中有一个4的位置

对了,记为1A,而1和3这三个数字对了,而位置没对,因此记为2B,合起来就是1A2B;

~ 接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为

止。

4. 若数字正确则显示猜数字成功,点阵显示“?”笑脸;若输入数字错误系统

仍然处于猜数字状态,点阵显示“X” ,并用蜂鸣器或led闪烁报警。 5. 若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧” 。 6. 设置游戏机开关。

实验提高要求:

1. 若数字正确则显示猜数字成功,用蜂鸣器播放一段乐曲。

2. 随机产生数字,并不在数码管上显示,进行猜数字游戏,用点阵进行 64s

计时,即点阵轮询熄灭两次,其他要求同基本功能 3、4 和5。 3. 自拟其他功能。

二、 简易猜数字游戏机系统设计

1. 设计思路

这次实验主要用到了4×4键盘、8×8点阵、七段显示数码管及蜂鸣器。实验整体设计流程是:

Step1:编写并调试键盘;

Step2:编写并调试数码管和键盘; Step3: 编写并调试点阵; Step4:遍写并调试随机数;

Step5:编写并调试比较(随机数测); Step6:编写顶层并调试。

3

2. 总体框图

4×4键盘 顶层 消抖 随机数 输入控制信号 8×8点阵 七段译码管显示 蜂鸣器

3. 分块设计

首先,键盘输入数字(顶层文件获取键盘输入的数字并根据不同的输入信号做出相关判断与处理操作),通过列扫描(扫描频率为10k)的方式检测键盘的输入信号,根据扫描频率做一个计数器,计数周期为4,依次扫描列(1110、1101、1011、0111),列与行合并为一个八位数组,当八位数组中出现两个0时,表示键盘输入了数字,此时需将key_pressed(数码管显示信号)置1,对比出现八位数组中两个0出现的位置,可得出输入的数值。 其次是防抖,由于按键按下,理想状态会根据按键时间的长短产生一个方波,但是实际上会产生很多毛刺,不利于检测按键的输入信号,对此需要做消抖处理。这部分代码的书写参考了网络上的资料,通过RS触发器,对按键输入信号做消抖处理。在本次试验中,按键均用到了消抖。

第三个则是,数码管显示六位数字(顶层文件发送给数码管disp0-5六个数字,六位数码管分别显示六个数字),数码管扫描频率为10k,根据扫描频率做一个计数器,计数周期为8,当计数器数值为0-5时,分别显示0-5六个数码管的值,其他两个状态数码管不工作。数码管部分的另一功能则是对数字做七段译码处理。 点阵模块(扫描频率10k,倒计时频率1Hz),输入信号有dz、start、 wrong、 success(均由顶层文件赋值)。其中,dz为点阵开始工作的信号(持续高电平),由顶层文件赋值,start为一个只有一段为1的冲激,与dz信号同步。点阵开始工作后,64s倒计时开始,与此同时给列一个64位的数组,初始值都是1,每过1s,数组左移一位,赋值为0。点阵一共有四个状态,64s倒计时,从右到左,从下到上依次熄灭;成功显示“笑脸”;错误显示“X”;64s之后显示“囧”。点阵采用行扫描的显示方式,也是用扫描频率控制一个周期为8的计数器,每一个计数状态对应单个行工作,也对应着此时点阵显示效果中列需要的数值。 随机数部分(伪随机),程序主要部分是随机产生0-15这16个数字,由于实验只需要0-9十个数字,在取值之后使用case对10-15这六个数字分别赋成0-9中的数值,并将二进制数字转换成BCD码。

最后是蜂鸣器,顶层发送给蜂鸣器的信号,控制蜂鸣器的输出与否。

4

三、 仿真波形及波形分析

1. 键盘

Clk_50m上升沿到来时,列赋值以4为周期变化。

当行&列=“11100111”对应4×4键盘输入数字1;当行&列=“11010111”对应4×4键盘输入数字2??由上述仿真图可以看出键盘只支持输入0-9十个数字,其他情况不输出数字。

2. 点阵

点阵行跟列都是根据clk_scan的上升沿变化的 在dz=0时,点阵并不现实,行=“11111111”,列=“00000000”;dz=1时点阵开始工作,同时start有了冲激,64s倒计时开始:

64s倒计时点阵全亮

5

本文来源:https://www.bwwdw.com/article/69wf.html

Top