数电实验报告——拔河机Word文档下载推荐.doc
《数电实验报告——拔河机Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《数电实验报告——拔河机Word文档下载推荐.doc(34页珍藏版)》请在冰豆网上搜索。
3. 仿真波形及波形分析 12
4. 源程序 15
5. 功能说明 31
6. 实验元器件清单及资源利用情况 32
7. 实验故障及问题分析 32
8. 实验总结 33
****************设计课题的任务要求*****************
一、基本任务:
用7个发光二极管排列成一行,模拟拔河过程。
游戏开始时只有中间的发光二极管点亮,作为拔河的中心线。
用按键来模拟拔河队员,按下键表示用力,根据甲乙双方按键的快慢与多少,决定亮点移动的方向。
移到任一方终端二极管时,该方获胜,该方记分牌自动加分,然后开始下一局的比赛。
比赛采用五局三胜制,甲乙双方各自记分。
当记分牌清零后,重新开始下一场拔河比赛。
1、设置“比赛开始”按键,实现一对一拔河;
2、设置复位键,按下后比分清零,双方重新开始比赛;
3、一场比赛结束时演奏一首欢快的曲子;
二、提高要求:
1、甲乙双方可选一到多个队员进行比赛;
2、自拟其它功能。
***********************系统设计********************
【设计思路】
1、10秒倒计时的实现:
电路接1M晶振的时钟,从10秒开始计时。
用变量us计算时钟个数,用present_state显示点阵的当前状态,每1M个时钟,修改一次变量num的值,用num控制8x8点阵显示的数字。
从而实现10秒倒计时。
并且设置开始键”reset”,按下后重新开始计时。
2、10秒倒计时的显示:
采用逐列扫描的方式,对行像素分别编码,利用人眼色觉暂留效应,以1MHZ的频率扫描列,点阵上就会出现稳定的数字。
3、拔河游戏的实现:
Ⅰ、当倒计时到0秒时,游戏才能正常显示;
Ⅱ、设置游戏开始键”start”,实现一对一拔河。
按下按键后游戏开始,点亮第4个发光二极管(拔河的中心点),双方的比分清零;
Ⅲ、用两个按键”player1”、”player2”代表比赛的甲乙双方。
甲方每按”player1”键10次,亮点向左移动一点;
乙方每按”player2”键10次,亮点向右移动一点。
当亮点到达最左边(第一个点),甲方胜利;
反之,亮点到达最右边(第七个点),乙方胜利。
Ⅳ、当有一方胜利后,蜂鸣器发声。
4、各个模块功能:
Ⅰ、绳子显示模块:
输入为两路脉冲信号,对两路脉冲分别记数,然后解码后控制LED灯亮灭的位置;
Ⅱ、计分模块:
每当LED灯移动到LED0或者LED6时,产生一个下降沿信号,然后七段数码管的计数器增加,然后将当前的所胜得局数显示在七段数码管上;
Ⅲ、乐曲模块:
在每局比赛结束后,即产生下降沿信号后,播放乐曲;
Ⅳ、开关及复位控制:
比赛开始前需要将“start”设置为1,否则按键信号输入不起作用;
当比赛结束后或者在比赛过程中,按下“start”则状态返回到最初的起始状态;
Ⅴ、控制电路:
在LED灯移动到最左边或者最右边时,产生一个控制信号,使计数器停止计数,使乐曲播放,并将此信号作为七段数码管使能端的输入信号。
【总体框图】
ASM图:
开始
start是否为1
触发记时器(1秒)
no,循环检测
yes
检测参赛者是否有按键脉冲
1秒时间到
判断是否到最左或者最右
对两路脉冲分别进行计数,存于count1、coun2
yes
蜂鸣
锁定count1,count2
译码,控制LED灯显示位置,并清零count1,count2
yes
在七段数码管上显示
胜利局数加一
判断是否有一方胜利
no
将灯状态锁定,显示也不变
yes
检测复位键是否按下
no,继续返回
yes,计分器清零
MDS图:
start=0
Wait
start=1
LED4(中间灯)
count2>
count1count1>
count2
灯右移
count2>
count1 count1<
灯左移
count1>
count1<
计分器发生变化,同时播放乐曲,BT3=0
LED6
LED0
Victory<
3
Victory=3
检测复位键
BT4=1 计分器清零
【分块设计】
计时进程:
数据处理进程:
显示控制进程:
【点阵设计】
1、点阵列管脚信号编码:
其中col的编码从右到左依次是点阵列管脚1-8的输入信号,即给要显示的列管脚输入低电平,其他管脚为高电位。
2、点阵行管脚信号编码
比如数
字4的点阵行编码为:
casecis
when1=>
row<
="
00000000"
;
when2=>
when3=>
00001100"
when4=>
00010100"
when5=>
00100100"
when6=>
01111111"
when7=>
00000100"
when8=>
endcase;
其中row的编码从右到左依次是点阵行管脚1-8的输入信号,即在显示的某列时,输入该列相应的行编码,显示的行输入高电平,反之输入低电平。
3、发光二极管信号编码:
其中led的编码从右到左依次是发光二极管1-8的输入信号,即给要亮的灯输入高电平,其他灯为低电位。
*******************仿真波形及波形分析*******************
1、倒计时电路的仿真:
由于频率太高,不易仿真,以下的仿真假设每8us为倒计时的1s,即8个时钟改变一次显示的数字。
从10开始倒计时,点阵列管脚从左到右进行扫描,依次赋值为低电平。
同时对该列的行管脚进行编码赋值,以较高的频率进行重复扫描,便可以显示相应的数字。
由于恰好是从左往右扫描的,所以可以在以上的仿真波形比较明显的看出显示的数字(第一幅波形显示的是10~7,第二幅波形显示的是7~4,第三幅波形中显示的是4~0)。
倒计时到0后,点阵就一直显示数字0。
且拔河游戏机不工作,8盏灯都不亮,蜂鸣器不响。
2.拔河游戏机的仿真:
电路板上共有8盏灯,游戏中现使用前7盏。
从以上的仿真波形中可以看到,当player2一直在赢的时候,代表它的三盏灯逐渐转移,知道达到终点,即点亮的灯(拔河的中心点)到达最左边的第一盏灯时(甲方胜利),播放音乐,表示其胜出。
上图表示,当player2赢了一局之后,有”start”复位,如果player2还是一直赢,代表它的等继续相继转移,知道终点。
这是一个循环过程。
上图表示,当player2赢了一局之后,有”start”复位,如果复位后,双方都没有按键,则中点一直保持在原状态,不发生偏移。
***********************源程序**********************
【顶层模块】
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entitybaheis
port(
player1,player2:
instd_logic;
--玩家1,2输入
clk_in:
--clk_in(1MHZ)
reset:
--重置键
row:
outstd_logic_vector(7downto0);
col:
led:
outstd_logic_vector(7downto0);
--绳子
cats:
outstd_logic_vector(6downto0);
--比分
q:
outstd_logic_vec