课程设计拔河游戏机_第1页
课程设计拔河游戏机_第2页
课程设计拔河游戏机_第3页
课程设计拔河游戏机_第4页
课程设计拔河游戏机_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXXX学院课 程 设 计题 目:拔河游戏机课程设计 作 者: XXX 专 业: 自动化 班 级: XXX 学 号: XXXXX 指导老师: XXX 2012年12月15日16主要内容、基本要求、主要参考资料等主要内容:电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时, 则该方获胜,连续比赛多局以定胜负。基本要求:1、设计一个能进行拔河游戏的电路。2、电路使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。3、游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。5、用数码管显示获胜者的盘数。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.一、总体设计思想1.基本原理由设计内容可知,需要一个十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计要求用50MHz的频率,而设计用到的是1KHz的频率,所以要设计一个程序进行分频。显视控制部分设计要求在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一个清零端,用于复位。将以上程序组装起来。2.设计框图译码器编码电路选择开关整形电路可逆计数器控制电路图1. 拔河机游戏机框图二、设计步骤和调试过程1、总体设计电路总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,可以实现按动A、B两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定,双方按键产生的输入脉冲不起作用。如按动复位键C,亮点又回到中点位置,再次按C键则比赛又可重新开始。图2. 电路图2、模块设计和相应模块程序1.顶层文件library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity bahe isport(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_logic_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 divisionport(clk_in:in std_logic;-1MHZ输入clk_100,clk_5,clk_1:out std_logic);-100HZ,5Hz,1HZend component;-计数模块component countport(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 cmpport(clk_100:in std_logic;-100hzclk_1:in std_logic;-1hzsw: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 musicport(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 decodeport(clk_in:in std_logic;-1mHZrecord1,record2:in std_logic_vector(1 downto 0);-比分输入lights:in std_logic_vector(2 downto 0);-拔河绳子输入led:out std_logic_vector(7 downto 0);-输出到LEDq:buffer std_logic_vector(5 downto 0);-数码管控制cats:out std_logic_vector(6 downto 0)-数码管显示比分);end component;-倒计时模块 component daojishiport(clk_in,clk_1,reset:in std_logic;row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0);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 music_begin:std_logic;-解码器输出signal tmp_led:std_logic_vector(7 downto 0);-LED显示signaltmp_q:std_logic_vector(5 downto 0);-数码管控制signal tmp_cat:std_logic_vector(6 downto 0);-数码管显示比分-倒计时器输出signal tmp_start:std_logic;begincats=tmp_cat;q=tmp_q;ledclk_in,clk_100=clk_100,clk_5=clk_5,clk_1=clk_1);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=clk_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模块library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity cmp isport(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);-比分输出 music_begin:out std_logic;-音乐开始 sw:out std_logic;-状态输出 lights:out std_logic_vector(2 downto 0);-绳子状态end cmp;architecture body_cmp of cmp issignal 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 tmp_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)-判断比赛状态beginif(start=1) thenif(clk_100event and clk_100=1) thentmp_sta=1;end if;end if;if(clk_100event and clk_100=1) then-任意比分到3,比赛结束,开始播放音乐if(tmp_record1=11 or tmp_record2=11) thentmp_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)-控制绳子移位beginif(reset=1) thentmp=100;-绳子初始状态为100tmp_record1=00;tmp_record2s2) then tmp=tmp-1;-绳子左移elsif(s1=s2) then tmp=tmp;-绳子保持原状else tmp=tmp+1;-绳子右移end if;elseif(tmp=001) then-绳子到左尽头,左计分器加1tmp_record1=tmp_record1+1;tmp=100;elsif(tmp=111) then-绳子到右尽头,右记分器加1,tmp_record2=tmp_record2+1;tmp=100;end if;end if;end if;end if;end process;end body_cmp;3COUT模块use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity count islibrary 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 body_count of count issignal p1,p2:std_logic_vector(4 downto 0);-计数输出beginsum1=p1;sum2=p2;process(player1,player2,sw,clk_1)beginif(sw=1) then-处于比赛状态if(clk_1=0) thenif(player1event and player1=1) thenp1=p1+1;end if;if(player2event and player2=1) thenp2=p2+1;end if;elsep1=00000; p2=00000;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 isport(clk_1,clk_in,reset: in std_logic; row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0); start : out std_logic);end daojishi;architecture body_daojishi of daojishi istype 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;beginp3:process(clk_in) begin if clk_inevent and clk_in=1 then if num=101 then num=000; else num case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=11111111; row col=11011111; row col=11101111; row col=11110111; row col=11111011; row col=00000000; row case num is when 000= col=00000000; row col=00000000; row col=00000000; row col=00000000; row col=00000000; row col=00000000; row=00000000; end case; end case; end if; end if; end process p3; p4:process(clk_1) begin if reset=1 then present_state=s10;start present_state=s9;start present_state=s8;start present_state=s7;start present_state=s6;start present_state=s5;start present_state=s4;start present_state=s3;start present_state=s2;start present_state=s1;start present_state=s0;start present_statenull;start=1; end case; end if; end if; end process p4;end body_daojishi;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity decode isport(clk_in:in std_logic;-1MHz record1,record2:in std_logic_vector(1 downto 0);-比分状态输入 lights:in std_logic_vector(2 downto 0);-绳子状态输入 led:out std_logic_vector(7 downto 0);-绳子解码后输出 q:buffer std_logic_vector(5 downto 0);-数码管控制 cats:out std_logic_vector(6 downto 0);-数码管显示end decode;architecture body_decode of decode issignal tmp_led:std_logic_vector(7 downto 0);-绳子输出signal tmp_da1:std_logic_vector(6 downto 0);-比分1signal tmp_da2:std_logic_vector(6 downto 0);-比分2signal tmp:std_logic_vector(6 downto 0);-比分显示beginled=tmp_led;cats tmp_led tmp_led tmp_led tmp_led tmp_led tmp_led tmp_ledtmp_led tmp_da1 tmp_da1 tmp_da1 tmp_da1 tmp_da2 tmp_da2 tmp_da2 tmp_da2=1111001;end case;if(clk_in=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论