1、课程设计拔河游戏机XXXXX学院课 程 设 计题 目:拔河游戏机课程设计 作 者: XXX 专 业: 自动化 班 级: XXX 学 号: XXXXX 指导老师: XXX 2012年12月15日主要内容、基本要求、主要参考资料等主要内容:电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时, 则该方获胜,连续比赛多局以定胜负。基本要求:1、设计一个能进行拔河游戏的电路。2、电路使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。3、游戏双方各持一个按钮,迅速地、不断地
2、按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。5、用数码管显示获胜者的盘数。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.一、总体设计思想1.基本原理由设计内容可知,需要一个十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计要求用50MHz的频率,而设计用到的是1KHz
3、的频率,所以要设计一个程序进行分频。显视控制部分设计要求在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一个清零端,用于复位。将以上程序组装起来。2.设计框图图1. 拔河机游戏机框图二、设计步骤和调试过程1、总体设计电路总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,可以实现按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,双方按键产生的输入脉冲不起作用。如按动复位键C,亮
4、点又回到中点位置,再次按C键则比赛又可重新开始。图2. 电路图2、模块设计和相应模块程序1.顶层文件library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity bahe is port( player1,player2:in std_logic; -玩家1,2输入 clk_in:in std_logic; -clk_in(1MHZ) reset:in std_logic; -重置键 row : out std_logic_vector(7 downto 0); col : out std_log
5、ic_vector(7 downto 0); led:out std_logic_vector(7 downto 0); -绳子 cats:out std_logic_vector(6 downto 0); -比分 q:out std_logic_vector(5 downto 0); -数码管控制 mus:out std_logic); -蜂鸣输出end bahe;architecture body_bahe of bahe is-分频模块 component division port( clk_in:in std_logic; -1MHZ输入 clk_100,clk_5,clk_1:ou
6、t std_logic);-100HZ,5Hz,1HZ end component;-计数模块 component count port( clk_1:in std_logic; -1HZ输入 sw:in std_logic; -状态开关 player1,player2:in std_logic; -选手输入 sum1,sum2:out std_logic_vector(4 downto 0); -计数结果输出 end component;-比较模块 component cmp port( clk_100:in std_logic; -100hz clk_1:in std_logic; -1h
7、z sw:out std_logic; -状态开关输出 reset:in std_logic; -重置 start:in std_logic; -开始 sum1,sum2:in std_logic_vector(4 downto 0);-计数结果输入 music_begin:out std_logic; -音乐 record1,record2:out std_logic_vector(1 downto 0);-比分输出 lights:out std_logic_vector(2 downto 0); -拔河绳子显示 end component;-音乐模块 component music por
8、t( reset:in std_logic; -重置 clk:in std_logic; -1MHz clk_5:in std_logic; -5hz music_begin:in std_logic; -音乐开始 mus:out std_logic); end component;-译码模块 component decode port( clk_in:in std_logic; -1mHZ record1,record2:in std_logic_vector(1 downto 0); -比分输入 lights:in std_logic_vector(2 downto 0); -拔河绳子输入
9、 led:out std_logic_vector(7 downto 0); -输出到LED q:buffer std_logic_vector(5 downto 0); -数码管控制 cats:out std_logic_vector(6 downto 0) -数码管显示比分 ); end component;-倒计时模块 component daojishi port( clk_in,clk_1,reset:in std_logic; row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0)
10、; start: out std_logic ); end component; -分频器输出 signal clk_100,clk_5,clk_1:std_logic; -时钟信号 -计数器输出 signal sum1,sum2:std_logic_vector(4 downto 0); -计数结果 -比较器输出 signal sw:std_logic; -状态开关 signal record1,record2:std_logic_vector(1 downto 0); -比分 signal lights:std_logic_vector(2 downto 0); -绳子 signal mu
11、sic_begin:std_logic; -解码器输出 signal tmp_led:std_logic_vector(7 downto 0); -LED显示 signal tmp_q:std_logic_vector(5 downto 0); -数码管控制 signal tmp_cat:std_logic_vector(6 downto 0); -数码管显示比分 -倒计时器输出 signal tmp_start:std_logic; begin cats=tmp_cat; q=tmp_q; ledclk_in,clk_100=clk_100,clk_5=clk_5,clk_1=clk_1);
12、 cnt: count port map( clk_1=clk_1,sw=sw,player1=player1,player2=player2, sum1=sum1,sum2=sum2); com: cmp port map( clk_100=clk_100,clk_1=clk_1,sw=sw,reset=reset, start=tmp_start,sum1=sum1,sum2=sum2,music_begin=music_begin, record1=record1,record2=record2,lights=lights); dec: decode port map( clk_in=c
13、lk_in,record1=record1,record2=record2, lights=lights,led=tmp_led,q=tmp_q,cats=tmp_cat); mu: music port map( reset=reset,clk=clk_in,clk_5=clk_5, music_begin=music_begin,mus=mus); dao: daojishi port map( clk_in=clk_in,clk_1=clk_1,reset=reset, start=tmp_start,col=col,row=row); end body_bahe;2.CMP模块libr
14、ary IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity cmp is port(clk_100:in std_logic; -100HZ输入 clk_1:in std_logic; -1HZ输入 reset:in std_logic; -重置 start:in std_logic; -开始 sum1,sum2:in std_logic_vector(4 downto 0); -计数输入 record1,record2:out std_logic_vector(1 downto 0); -比分输出 m
15、usic_begin:out std_logic; -音乐开始 sw:out std_logic; -状态输出 lights:out std_logic_vector(2 downto 0); -绳子状态 end cmp;architecture body_cmp of cmp is signal tmp_record1:std_logic_vector(1 downto 0); -比分 signal tmp_record2:std_logic_vector(1 downto 0); signal tmp:std_logic_vector(2 downto 0); -绳子状态 signal t
16、mp_sta:std_logic; -状态 signal s1,s2:std_logic_vector(4 downto 0); -计数 begin record1=tmp_record1; record2=tmp_record2; lights=tmp; sw=tmp_sta; process(clk_100) -判断比赛状态 begin if(start=1) then if(clk_100event and clk_100=1) then tmp_sta=1; end if; end if; if(clk_100event and clk_100=1) then -任意比分到3,比赛结束
17、,开始播放音乐 if(tmp_record1=11 or tmp_record2=11) then tmp_sta=0; music_begin=1; end if; if(tmp=001 or tmp=111) then -绳子到头,进入等待状态 tmp_sta=0; end if; if(reset=1) then -复位,状态归零 tmp_sta=0; music_begin=0; end if; end if; end process; s1=sum1; s2=sum2; process(clk_1,reset) -控制绳子移位 begin if(reset=1) then tmp=1
18、00; -绳子初始状态为100 tmp_record1=00; tmp_record2s2) then tmp=tmp-1; -绳子左移 elsif(s1=s2) then tmp=tmp; -绳子保持原状 else tmp=tmp+1; -绳子右移 end if; else if(tmp=001) then -绳子到左尽头,左计分器加1 tmp_record1=tmp_record1+1; tmp=100; elsif(tmp=111) then -绳子到右尽头,右记分器加1, tmp_record2=tmp_record2+1; tmp=100; end if; end if; end i
19、f; end if; end process; end body_cmp;3COUT模块use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity count is library IEEE;port(clk_1:in std_logic; -1HZ输入 sw:in std_logic; -状态判断输入 player1,player2:in std_logic; -选手输入 sum1,sum2:out std_logic_vector(4 downto 0); -计数输出 end count;architecture b
20、ody_count of count is signal p1,p2:std_logic_vector(4 downto 0); -计数输出 begin sum1=p1; sum2=p2; process(player1,player2,sw,clk_1) begin if(sw=1) then -处于比赛状态 if(clk_1=0) then if(player1event and player1=1) then p1=p1+1; end if; if(player2event and player2=1) then p2=p2+1; end if; else p1=00000; p2=00
21、000; end if; -比赛状态结束 else p1=00000; p2=00000; end if; end process; end body_count;4daojishi模块library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity daojishi is port(clk_1,clk_in,reset: in std_logic; row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto
22、0); start : out std_logic);end daojishi;architecture body_daojishi of daojishi is type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10); signal present_state:state:=s10; signal num:std_logic_vector(2 downto 0):=000; begin p3:process(clk_in) begin if clk_inevent and clk_in=1 then if num=101 then num=000;
23、 else num case num is when 000= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000
24、= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000= col=; row col=; row col=; row col=; row col=; row col=00000000; row case num is when 000= col=; row col=; row=01010100;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1