课程设计拔河游戏机文档格式.docx

上传人:b****5 文档编号:18617772 上传时间:2022-12-29 格式:DOCX 页数:17 大小:51.49KB
下载 相关 举报
课程设计拔河游戏机文档格式.docx_第1页
第1页 / 共17页
课程设计拔河游戏机文档格式.docx_第2页
第2页 / 共17页
课程设计拔河游戏机文档格式.docx_第3页
第3页 / 共17页
课程设计拔河游戏机文档格式.docx_第4页
第4页 / 共17页
课程设计拔河游戏机文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

课程设计拔河游戏机文档格式.docx

《课程设计拔河游戏机文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计拔河游戏机文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

课程设计拔河游戏机文档格式.docx

1、总体设计电路

总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,可以实现按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,双方按键产生的输入脉冲不起作用。

如按动复位键C,亮点又回到中点位置,再次按C键则比赛又可重新开始。

图2.电路图

2、模块设计和相应模块程序

1.顶层文件

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_vector(5downto0);

--数码管控制

mus:

outstd_logic);

--蜂鸣输出

endbahe;

architecturebody_baheofbaheis

--分频模块

componentdivision

port(

clk_in:

--1MHZ输入

clk_100,clk_5,clk_1:

--100HZ,5Hz,1HZ

endcomponent;

--计数模块

componentcount

port(

clk_1:

--1HZ输入

sw:

--状态开关

player1,player2:

--选手输入

sum1,sum2:

outstd_logic_vector(4downto0));

--计数结果输出

--比较模块

componentcmp

clk_100:

--100hz

--1hz

outstd_logic;

--状态开关输出

reset:

--重置

start:

--开始

instd_logic_vector(4downto0);

--计数结果输入

music_begin:

--音乐

record1,record2:

outstd_logic_vector(1downto0);

--比分输出

lights:

outstd_logic_vector(2downto0));

--拔河绳子显示

endcomponent;

--音乐模块

componentmusic

--重置

clk:

--1MHz

clk_5:

--5hz

music_begin:

--音乐开始

mus:

--译码模块

componentdecode

--1mHZ

instd_logic_vector(1downto0);

--比分输入

instd_logic_vector(2downto0);

--拔河绳子输入

led:

--输出到LED

q:

bufferstd_logic_vector(5downto0);

cats:

outstd_logic_vector(6downto0)--数码管显示比分

);

--倒计时模块

componentdaojishi

clk_in,clk_1,reset:

row:

col:

outstd_logic

--分频器输出

signalclk_100,clk_5,clk_1:

std_logic;

--时钟信号

--计数器输出

signalsum1,sum2:

std_logic_vector(4downto0);

--计数结果

--比较器输出

signalsw:

--状态开关

signalrecord1,record2:

std_logic_vector(1downto0);

signallights:

std_logic_vector(2downto0);

--绳子

signalmusic_begin:

--解码器输出

signaltmp_led:

std_logic_vector(7downto0);

--LED显示

signaltmp_q:

std_logic_vector(5downto0);

signaltmp_cat:

std_logic_vector(6downto0);

--数码管显示比分

--倒计时器输出

signaltmp_start:

begin

cats<

=tmp_cat;

q<

=tmp_q;

led<

=tmp_led;

div:

divisionportmap(clk_in=>

clk_in,clk_100=>

clk_100,clk_5=>

clk_5,clk_1=>

clk_1);

cnt:

countportmap(

clk_1=>

clk_1,sw=>

sw,player1=>

player1,player2=>

player2,

sum1=>

sum1,sum2=>

sum2);

com:

cmpportmap(

clk_100=>

clk_100,clk_1=>

sw,reset=>

reset,

start=>

tmp_start,sum1=>

sum2,music_begin=>

music_begin,

record1=>

record1,record2=>

record2,lights=>

lights);

dec:

decodeportmap(

clk_in=>

clk_in,record1=>

record2,

lights=>

lights,led=>

tmp_led,q=>

tmp_q,cats=>

tmp_cat);

mu:

musicportmap(

reset=>

reset,clk=>

clk_in,clk_5=>

clk_5,

music_begin=>

music_begin,mus=>

mus);

dao:

daojishiportmap(

clk_in,clk_1=>

clk_1,reset=>

tmp_start,col=>

col,row=>

row);

endbody_bahe;

2.CMP模块

entitycmpis

port(clk_100:

--100HZ输入

--1HZ输入

--重置

--开始

--计数输入

--比分输出

--音乐开始

--状态输出

--绳子状态

endcmp;

architecturebody_cmpofcmpis

signaltmp_record1:

--比分

signaltmp_record2:

signaltmp:

--绳子状态

signaltmp_sta:

--状态

signals1,s2:

--计数

begin

record1<

=tmp_record1;

record2<

=tmp_record2;

lights<

=tmp;

sw<

=tmp_sta;

process(clk_100)--判断比赛状态

begin

if(start='

1'

)then

if(clk_100'

eventandclk_100='

tmp_sta<

='

;

endif;

endif;

if(clk_100'

)then--任意比分到3,比赛结束,开始播放音乐

if(tmp_record1="

11"

ortmp_record2="

0'

music_begin<

if(tmp="

001"

ortmp="

111"

)then--绳子到头,进入等待状态

if(reset='

)then--复位,状态归零

endprocess;

s1<

=sum1;

s2<

=sum2;

process(clk_1,reset)--控制绳子移位

begin

if(reset='

)then

tmp<

="

100"

--绳子初始状态为100

tmp_record1<

00"

tmp_record2<

else

if(clk_1'

eventandclk_1='

if(tmp_sta='

if(s1>

s2)thentmp<

=tmp-'

--绳子左移

elsif(s1=s2)thentmp<

--绳子保持原状

elsetmp<

=tmp+'

--绳子右移

endif;

else

if(tmp="

)then--绳子到左尽头,左计分器加1

tmp_record1<

=tmp_record1+'

tmp<

elsif(tmp="

)then--绳子到右尽头,右记分器加1,

tmp_record2<

=tmp_record2+'

endif;

endbody_cmp;

3.COUT模块

entitycountis

libraryIEEE;

port(clk_1:

--1HZ输入

--状态判断输入

--选手输入

--计数输出

endcount;

architecturebody_countofcountis

signalp1,p2:

--计数输出

sum1<

=p1;

sum2<

=p2;

process(player1,player2,sw,clk_1)

if(sw='

)then--处于比赛状态

if(clk_1='

if(player1'

eventandplayer1='

p1<

=p1+'

if(player2'

eventandplayer2='

p2<

=p2+'

else

p1<

00000"

--比赛状态结束

elsep1<

p2<

endbody_count;

4.daojishi模块

entitydaojishiis

port(clk_1,clk_in,reset:

instd_logic;

col:

start:

outstd_logic);

enddaojishi;

architecturebody_daojishiofdaojishiis

typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10);

signalpresent_state:

state:

=s10;

signalnum:

std_logic_vector(2downto0):

000"

p3:

process(clk_in)

ifclk_in'

eventandclk_in='

then

ifnum="

101"

thennum<

elsenum<

=num+1;

casepresent_stateis

whens9=>

casenumis

when"

=>

col<

"

row<

01110100"

010"

01010100"

011"

01111100"

whenothers=>

00000000"

endcase;

whens8=>

whens7=>

01000000"

whens6=>

01011100"

whens5=>

whens4=>

01110000"

00010000"

whens3=>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1