77范文网 - 专业文章范例文档资料分享平台

乒乓电路—终稿(3)

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

聊城大学本科毕业论文(设计)

3.2设计框图

图3.1设计流程图

图3.2 乒乓球游戏机原理图

7

聊城大学本科毕业论文(设计)

4.设计步骤

4.1乒乓球游戏机实体的设计

设计该乒乓球游戏机的输入/输出端口。首先考虑输入端口,一般都应该设置一个异步置位端口reset,用于在系统不正常时回到初始状态;两个发球输入端serve1和serve2,逻辑‘1’分别表示甲方和乙方的发球;两个击球输入端hit1和hit2,逻辑‘1’分别表示甲击球和乙击球;一个开始游戏按钮startbutton,处于逻辑‘1’表示可以游戏;还得有一个时钟输入端口clk。

其次考虑输出端口,芯片应该有8个输出端口来控制8个发光二极管,输出逻辑‘1’即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分,就得用到七段译码器,每方用到2个,可以表示0~11的数字,每个七段译码器需要芯片的7个输出端口来控制,总共需要28个输出端口。实体的设计如下:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; --引用必要的库函数和包集合 entity compete is --实体名为pingpong port(reset:in std_logic; clk_1:in std_logic; startbutton:in std_logic; --开始游戏输入端口 serve:in std_logic_vector(1 downto 0); --发球输入端口 hit1,hit2:in std_logic; --甲和乙的击球输入端口 light:out std_logic_vector(1 to 8); --控制8个发光二极管的输出端口 counta,countb:out std_logic_vector(3 downto 0)); --2个用于控制4个7段译码器的输出端口 end compete;

4.2状态机编程实现

状态机设置了7个状态,分别是等待发球状态(waitserve)、第一盏灯亮状态(light1on)、第八盏灯亮状态(light8on)、球向乙移动状态(ballmoveto2)、球向甲移动状态(ballmoveto1)、允许甲击球状态(allow1hit)和允许乙击球状态(allow2hit)。

8

聊城大学本科毕业论文(设计)

状态waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1和allow1hit代表的具体数值依次是0到6.在波形模拟图中是用数值来表示状态的。

乒乓球游戏机中有两个计数器count1和count2,分别记忆甲的得分和乙的得分;一个i信号,用它的数值来控制状态机外8个发光二极管的亮和暗,比如当i=1时表示第一个发光二极管亮,用发光二级管的轮流发光表示球的移动轨迹。

输入状态机的信号有游戏开关startbutton信号,它是1位二进制信号,数值为1表示可以进入游戏;serve信号,是一个2位二进制向量,“10”表示甲发球;两个二进制信号hit1和hit2分别表示甲乙是否击球,若数值为1,表示击球,不为1表示不击球。以下是状态机进程代码。

process(clk_1) --状态机进程 --clk_1作为敏感信号触发进程 begin --进程开始 if reset='1' then --异步置位

i<=0;count1<=\elsif clk_1'event and clk_1='1' then --当处于时钟inclock上升沿时 if count1=\

i<=0;count1<=\elsif count2=\

i<=0;count1<=\elsif startbutton='0' then

i<=0;count1<=\else --以下case语句是程序中最关键的状态机部分 case state is

when waitserve => case serve is

when \

when \ when \ when \when others => i<=0; end case;

when light1on => i<=2; if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; else

state<=ballmoveto2; end if;

when light8on => i<=7;

9

聊城大学本科毕业论文(设计)

if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; else

state<=ballmoveto1; end if;

when ballmoveto1 => if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; elsif i=2 then i<=1; state<=allow1hit; else i<=i-1; end if;

when ballmoveto2 => if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; elsif i=7 then i<=8; state<=allow2hit; else i<=i+1; end if;

when allow1hit =>

if hit1='1' then i<=2;state<=ballmoveto2; else count2<=count2+1;i<=0; state<=waitserve; end if;

when allow2hit =>

if hit2='1' then i<=7;state<=ballmoveto1; else count1<=count1+1;i<=0; state<=waitserve; end if; end case; end if; end if;

end process;

4.3记分译码器的设计

七段译码器是在数字电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。如图4.1所示。

10

聊城大学本科毕业论文(设计)

图4.1 七段译码器简易图

其中的a,b,c,d,e,f,g分别为7段发光

二极管,通过控制每个发光二极管的亮和暗,可以分别显示0~9十个数字。例如,b和c两段发光二极管亮,其他发光二极管暗,则表示数字“1”;a,b,g,e和d五段发光二极管亮,其他发光二极管暗,则表示数字“2”。七段译码器有7个输入端,分别控制a~g七段发光二极管。

记分译码器(mydecoder):由于记分需要显示出来,所以要使用七段译码器。而状态机中的记分是由4位二进制码来表示的,即count1和count2.这个记分译码器电路是针对乒乓球游戏机的特点进行的特别设计,采用的是全部列举的方法,如图4.2所示:

图4.2 七段译码器电路模块图

代码如下:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; entity decoder is

port(binaryin:in std_logic_vector(3 downto 0); --4位二进制码的输入端口

bcdout1:out std_logic_vector(6 downto 0); --译码器高位输出端口 bcdout2:out std_logic_vector(6 downto 0) --译码器低位输出端口 );

end decoder;

11

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库乒乓电路—终稿(3)在线全文阅读。

乒乓电路—终稿(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/657446.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: