四路多功能抢答器设计报告讲解_第1页
四路多功能抢答器设计报告讲解_第2页
四路多功能抢答器设计报告讲解_第3页
四路多功能抢答器设计报告讲解_第4页
四路多功能抢答器设计报告讲解_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、电子综合实习设计报告 多功能抢答器的设计 指导教师: 学 生: 学院专业: 通信工程学院 班 级: 设计日期: 2013.6.15 2013.7.5 重庆大学通信工程学院 目录 第一章 课题背景及设计目的 3 1.1 课题背景 3 1.2 设计目的 3 第 2 章 课题要求 4 2.1 基本要求 4 2.2 提高要求 5 第 3 章 总体设计框图 6 3.1 硬件原理图 6 3.2 软件流程图 6 第 4 章 方案设计讨论及元件选取依据 8 4.1 方案设计简述 8 4.1.1 显示模块 8 4.1.2 按键模块 9 4.1.3 语音模块 9 4.2 元器件选择 10 第 5 章 系统各模块设

2、计分析 11 5.1 功能模块 11 5.2 数码管显示模块 15 5.3 LCD 显示模块 15 5.4 语音模块 16 5.5 抢答模块 17 5.6 键盘模块 18 5.7 顶层逻辑电路 18 第 6 章 总结 19 参考文献 21 附录 21 附件一:元器件清单 21 附件二:硬件原理图 22 附件三:实物图 22 附件四:程序清单 23 第 1 章 课题背景及设计目的 1.1 课题背景 抢答器是为智力竞赛参赛者答题时进行抢答而设计的一种优先 判决器电路,广泛应用于各种知识竞赛、文娱活动等场合。在各类竞 赛中,特别是做抢答题时, 在抢答过程中,为了知道哪一组或哪一名 选手先答题,必须要

3、有一个系统来完成这个任务。抢答过程中,只靠 人的视觉是很难判断出哪组先答题。利用 FPGA数字电路来设计抢答 器,则可轻松解决这个问题。 能够实现抢答器功能的方式有多种, 可以采用模拟电路、 数字电 路或模拟与数字电路相结合的方式。早期的抢答器只由几个三极管、 可控硅、发光管等组成, 能通过发光管的指示辨认出选手号码。现 在大多数抢答器均使用数字集成电路, 并增加了许多新功能, 如选手 号码显示、抢按前或抢按后的计时、选手得分显示功能。像这类抢答 器,制作过程简单,准确性与可靠性高,而且安装维护简单。随着电 子技术的发展, 现在的抢答器功能越来越强, 可靠性和准确性也越来 越高。 1.2 设计

4、目的 1 )通过本次电子综合设计,掌握数字电路系统的设计方法, 2)进一步学会如何使用数字电路实现现实的电路系统; 3)学会如何运用硬件描述语言 VHDL驱动数字硬件电路的工作, 实现软硬件连调,以达到软硬件协同工作的目的; 4)加强自主动手制作硬件以及编程实现所需现实功能的能力 第 2 章 课题要求 设计并制作符合以下要求的多功能抢答器, 并撰写分析设计报告。 2.1 基本要求: 1 )抢答器可容纳四组 4 位选手,每组设置一个抢答按钮供选 手使用; 2 )电路具有第一抢答信号的鉴别和锁存功能。在主持人将系 统复位并按开始键发出抢答指令后,语音芯片提示抢答开 始, 倒计时显示器显示抢答初始时

5、间并开始倒计时, 若参 赛选手按抢答按钮,则该组抢答指示绿灯亮,语音芯片提 示回答开始,倒计时显示器显示回答初始时间并开始倒计 时,当时间小于 5 秒时开始报警。此时,电路具备自锁功 能,即按下它后,再反复按动该组按钮,不影响绿灯显示。 具有互锁功能,即某组抢答成功后,能自动封锁其他组的 抢答信号; 3 )如果无人抢答,计时器倒计时到零,语音芯片提示抢答失 败,主持人可以按开始键,开始新一轮的抢答; 4 )设置犯规功能。选手在主持人按开始键之前抢答,则认为 犯规,犯规指示相应组绿灯闪烁,且语音芯片提示犯规, 主持人可以终止抢答执行相应惩罚,比如减一分。主持人 按开始键,开始新一轮的抢答; 5

6、)当抢答有效后, 主持人可以根据选手的回答正确与否对选 手相应组数进行加一和减一的操作,初始成绩为 5。主持 人按开始键,开始新一轮的抢答 2.2 提高要求: 1 )显示抢答题题目; 2 )语音播报回答正确与否; 3 )自动加减选手分数。 主要技术指标: 1 )使用 LCD实现实验中所有显示; 2 )用语音芯片 7960 语音播报。 第3章 总体设计框图 3.1 硬件原理图 本次设计中使用了 LB1 板子上的资源有:两个按键( KEY1实现 复位, KEY3实现小键盘清零),四个拨码开关(组合实现 LCD显示内 容),两个数码管(用来显示抢答倒计时和答题倒计时) ,蜂鸣器(当 倒计时即将结束时

7、发出蜂鸣声) 。另外焊接了四个绿色 LED灯,显示 四名选手, LCD显示分数、 题目、答案等。板上按键按下跳为低电平, 不用时为高电平。 供给蜂鸣器高电平时蜂鸣器蜂鸣, 不用时给高阻态。 数码管为共阴数码管。 原理图如下所示: 按键 LED灯 LCD 液晶 FPGA EP2C8Q208C8 N 蜂鸣器 3.2 软件流程图 软件设计设计流程图如下所示: 抢答到 回答错误 对应组的红 色 LED 灯亮 对应的 组得分 按 下 start 键进入下 一轮抢答 第 4 章 方案设计讨论及元件选取依据 4.1 方案设计的简述 在经过课题分析,确定了系统框图后,还需要确定具体的硬件 电路,以便根据确定的

8、硬件电路进行软件设计。而在软件实现方面, 也需要结合具体的硬件电路,选择最优化组合,才能使得编程简单, 系统调试方便,出问题也容易发现。整个电路系统分为七个子模块: 最小系统模块、 LCD 显示模块、语音模块、响铃蜂鸣器模块、功能按 键模块。最小系统模块、 响铃蜂鸣器模块都已经有很多经典的范例供 参考,可以很容易确定下来;方案选择的最关键是显示模块、功能按 键模块和语音模块, 它不仅关系着软件实现的难以与成败, 还对系统 调试有着重大影响。 4.1.1 显示模块 显示模块液晶显示屏 LCD 进行显示, LCD 显示功能要比数码管 灵活,有更强的指示功能, 并且排线简单,最终决定采用液晶显示屏

9、使得抢答器的功能更丰富。 利用 LCD7920 液晶显示器进行显示。该液晶显示器采用点阵的 方式进行显示, 由各个点阵点亮或者不点亮来共同显示需要显示的内 容。因为该显示器的各个点阵位之间有间隔,用来区分行和字符,但 是却无法用来显示图像。 LCD7920 是指在屏幕上的显示为四行, 每行 八个字符。这个方案的优点在于 LCD7920 的驱动电路具有很多种的 控制指令,使用便捷,可以很方便的控制液晶实现多种显示功能,光 标的左移右移、清屏等,更突出的优点是能显示汉字。 4.1.2 按键模块 系统的各个功能的切换,是通过功能按键实现的。 按键电路要考虑去抖动的问题。 按键电路去抖动的实现方式有硬

10、 件实现与软件实现两种方式。 根据设计原则, 应该尽量降低成本和硬 件电路的复杂性,提高对单片机的功能利用率。因而,在设计中采用 软件去抖动方式。 4.1.3 语音模块 在语音模块,蜂鸣器虽然可以起到简单提示功能,但是不够人 性化地起到提示作用,所以经过分析采用 ISD1760 语音芯片,通过 语音提醒来精准的提示选手回答正确与否,实现更人性化的语音播 报,提高多功能抢答器的功能实现。 ISD1760 为美国 ISD 公司出品 的优质单片录放电路,由振荡器、语音存储单元、前置放大器、自动 增益控制电路、抗干扰滤波器、输出放大器组成。一个最小的录放系 统仅由一个麦克风、一个喇叭、两个按钮、一个电

11、源、少数电阻电容 组成。录音内容存入存储单元,提供零功率信息存储,这个独一无二 的方法是借助于美国 ISD 公司的专利直接模拟存储技术( DAST TM)实现的。利用它,语音和音频信号被直接存储,以其原本的模拟 形式进入 EEPROM直. 接模拟存储允许使用一种单片固体电路方法完成 其原本语音的再现。不仅语音质量优质,而且断电语音保护 4.2 元器件选择 由于可以通过软件靠一片单片机就能实现对抢答器的各种功能 的控制,故单片机的外部,只需要接显示模块;语音模块;功能按键 模块;语音模块。 复位电路有上电复位和按键复位电路,在此选择 按键复位电路。 显示模块只需要选择一个适当大小的 LCD 可以

12、实现 功能即可,所以我们选择 12864 的 LCD。选用了按键开关,按下为低 电平,因此需要 10K 的电阻作为上拉电阻。为 LED选用 1K的下拉电 阻。 对于语音模块的选择,我们选择的是常见的语音芯片 ISD1760 , 原因有以下几点: 1)使用方便的单片录放系统,外部元件最少,可以减小外围电 路设计的难度; 2)重现优质原声,没有常见的背景杂音。音效有保证,也是我 们选择它的原因之一; 3)放音可由边沿或者电平触发,有利于程序的设计; 4)无耗电信息存储,省掉备用电池; 5)信息可保存 100 年,录放 10 万次,保证了信息的存储性。 6)无需专用编程或开发系统; 7)单一 5V

13、电源供电,减少了电路设计的困难。 综上所述, ISD1760 是我们最理想的语音芯片的选择。 10 第 5 章 系统各模块设计分析 多功能抢答器的功能模块分为数码管显示模块、 LCD 显示模块、 语音模块、功能按键模块,以下我们分别阐述各个模块的原理。 5.1 功能模块 除了数码管显示模块, LCD显示模块,语音模块,抢答模块和键 盘模块等主要的功能模块之外, 还有分频模块, 选择模块,计分模块, 倒计时模块, LCD转换模块,报时模块等功能模块。 (1)分频模块 分频模块将核心板提供 的 50MHz频率根据需要分为 2KHz、1KHz、100Hz、5Hz、1Hz 等不同的频率,为其他功能模

14、块提供必要的时钟。 仿真波形如下: 11 2)选择模块 选择模块是用来选择数码 管要现实的内容, 当按下 ready 时应选择显示抢答倒计时,而 当有人抢答到准备答题时,则 应该显示答题倒计时。 仿真波形如下: 3)计分模块 计分模块完成四位 选手的加分减分功能, 初始情况下, 每位选手 的分数为 5 分,当回答 正确,即 add=0 时,加 一分。回答错误,即 sub=0 时,减一分。当 抢答犯规或者答题时 间到都自动减一分。 最 先获得 10 分的选手为本轮的胜出者, 则被淘汰。 相反当分数减为 0 时,该选手 12 仿真波形如下: (4)倒计时模块 倒计时模块完成系统的倒计时功能。 当比

15、赛开始后, 系统开始抢 答倒计时 5S,直到计数为零或有效抢答则停止并回到初值 5S,直到 下一轮开始。 第一个模块完成抢答时间倒计时, 第二个你看完成回答 时间倒计时。 仿真波形如下: 5)LCD转换模块 13 LCD转换模块用于将每位选手的分数, 抢答到选手号以及最终的 获胜选手号转换为 16 位内码,供 LCD的显示。共有三个模块,分别 为 lcd_fenshu 、winner 和 qiangdao ,转换完成后直接将输出与 LCD 模块相连作为输入 其中 qiangdao 模块的仿真波形如下: 6)报时模块 报时模块是利用核心板 上的蜂鸣器,在抢答倒计时 发出响声,以提醒选手。在 5s

16、 1s 时蜂鸣器选用 500Hz 的频率,当倒计时为 0s 时, 蜂鸣器选用 1000Hz,提高频 率,提示选手可以开始抢答 14 仿真波形如下: 5.2 数码管显示模块 采用共阴极的七段数码管显示 抢答倒计时以及答题倒计时。本次 设计直接选用 LB1 核心板上的数码 管。通过计数模块,段码转换模块 等进行显示。通过动态扫描同时显 示几位 LED。 led_sa,led_sb,led_sc,led_sd 为 位选码,控制核心板上的数码管来 显示抢答倒计时和答题倒计时, led_a 到 led_g 是段选 5.3 LCD 显示模块 采用有背光效果的 LCD7920 作为显示器,可以清晰直观显示所

17、 要表示内容。 点阵图形式液晶由 MN 个显示单元组成,假设 LCD 显示屏有 64 行,每行有 128 列,每 8 列对应 1 字节的 8 位,即 每行由 16 字节,共 16 8=128 个点组成,屏上 64 16 个显示单 15 元与显示 RAM区 1024 字节相对 应,每一字节的内容和显示屏上 相应位置的亮暗对应。 LCD1602 内建有 160 个 5 7 点阵的字型 的字符发生器 CGRO。M 为了更好的达到使用者需求, 我们设置 LCD 的 2 、3 管脚以及 15、 16 管脚分别采用一个 10K 的电位器控制,一个用于 LCD 的 显示对比度调节,另一个用于 LCD 背光亮

18、度的调节。 5.4 语音模块 该芯片适用于多种系统, 录音时间可选范围为 20s 到 480s 。 通过外部电阻设置采样频率, 从 4KHz 到 12KHz,使录音时间长短可 根据应用来平衡。 工作电压范围 从 2.4V 到 5.5V ,因此可用电池供 电,使其应用范围更加广泛。 ISD1760 支持独立模式或 SPI 模式。为了便于美观和实用,我 们通过录音电路将报时音频录入 ISD1760 ,在接入放音电路使单片机 通过 SPI 模式进行控制, 主控单片机主要通过四线( SCLK, MOS,I MISO,SS)SPI 协议对 ISD1760 进行串行通信。 ISD1700 作为从机, 几乎

19、所有的操作都可以通过这个 SPI 协议来完成。 16 为了兼容独立按键模式,一些 SPI 命令: PLAY、REC、ERAS、E FWD、RESET和 GLOBAL_ERAS的E 运行类似于相应的独立按键模式的 操作。另外,的运行类似于相应的独立按键模式的操作。另外, SET_PLA,Y SET_RE,C SET_ERASE命 令允许用户指定录音、放音和擦 除的开始和结束地址。 此外, 还有一些命令可以访问命令允许用户指 定录音、放音和擦除的开始和结束地址。此外,还有一些命令可以访 问 APC 寄存器,用来设置芯片模拟输入的方式。 5.5 抢答模块 该模块实现选手抢答的 判定及对应输出该组的信

20、 息,并输出 led 灯的控制信 号。具体功能为,当 start=0 时,开始本轮抢 答。当 ready=0 时,开始 5 秒倒计时,倒计时结束前抢 答算犯规,选手前面的灯闪 烁并失去本轮抢答资格。当倒计时结束时方可抢答,当有一人抢到, 其他人不能再抢,最先抢到的选手前的灯常亮 仿真波形如下: 17 5.6 键盘模块 当从设备向主设备发送数据时 ,首先会检查时钟线 , 以确认时钟 线是否是高电平。如果是高电平 , 从设备就可以开始传输数据 ; 否则 , 从设备要等待获得总线的控制权 , 才能开始传输数据。传输的每一帧 由 11 位组成 , 发送时序及每一位的含义。 从设备到主设备的通信每一 帧

21、数据中开始位总是为 0,数据校验采用奇校验方式 , 停止位始终为 1。从设备到主设备通信时 , 从设备总是在时钟线为高时改变数据线状 态, 主设备在时钟下降沿读入数据线状态。 5.7 顶层逻辑电路 18 第六章 总结 本次课程设计采用的是电子设计比赛的形式,老师给出了命题, 学生进行组队合作完成硬件电路设计, 软件程序设计以及创新型设计 (包括设计总体方案,硬件电路图的绘制,电路的焊接,下载程序, 调试,脱机调试等工作 ) 。动手和团队协作要求性强,同时也学到了 很多理论课上不能学到的一些东西。 本次课程设计进入了收尾阶段, 我们小组四人共同努力奋斗, 充 实地度过了这忙碌的三周。实践,是检验

22、真理的唯一标准。经过这艰 苦的三周,我们深刻体会到了这句话的真谛。 理论知识很了解很扎实, 但是一动起手来了就不知所措了。 通过这次课程设计使我们更加懂得 并亲身体会到了理论与实际相结合的重要性, 只有理论知识是远远不 够的,只有把所学的理论知识与实践相结合起来, 从实践中得出结论, 才能真正为社会服务, 从而提高自己的实际动手能力和独立思考的能 力。 在设计的过程中遇到很多的问题,比如,在功能调试的环节上, 出现了硬件在功能转换的环节上会发生死机崩溃的情况。 我们重新理 清了思路, 从另外一个角度来完美解决了这一问题。 脱机调试的过程 中,遇到的最严重的问题是语音芯片不能正常工作。 耗费了我

23、们将近 3 天的时间来检查整个电路的问题所在。不管是晶振、供电、通断、 虚焊等,都有可能导致时钟电路的不工作。 由于第一个电路板焊接不 仔细,我们不得不又焊接了一个电路才能实现了在此计时。 19 因此在设计过程当中发现了自己的一些不足之处, 发现自己对之 前所学过的知识理论理解得不够深刻,掌握的不够牢靠,有待加强。 我们小组成员一直坚信一个真理,汗水预示着结果但是也见证着收 获,劳动是永恒不变的话题,通过实际的操作,我们才真正理解到了 “坚持不懈”这一词的真正含义。虽然课程设计有些辛苦,但是我们 苦中作乐。在面对困难一筹莫展的愁眉苦脸,再到解决问题后的柳 暗花明幸福感,这些滋味可能只有我们自己

24、能够体会到。 在这过程中, 我们有说有笑,相互帮助,配合默契,多少欢乐与汗水在这挥洒。过 程虽然有些苦痛。我们是一个团队,团队需要个人,个人也离不开团 队,必须要发扬团队协作的精神,某个人的失职可能导致整项工作 的失败。实训中只有一个人知道原理是远远不够的, 必须让每个人知 道,否则一个人的错误,就有可能导致整个设计的失败,团结协作是 我们课程设计成功的重要保证。 当我们完成整个设计的时候, 为我们 这个团队感到非常的自豪与骄傲。 尤其对于编程的沈宪伟同学, 是我 们这组最辛苦的, 也是付出最多的, 他的任劳任怨让我们一个人都十 分感动。 除了我们团队的自身努力,老师的引导与帮助也是不可或缺的

25、。 老师为我们安排此次课程设计的基本目的, 在于通过理论与实际的结 合、人与人之间的沟通,进一步提高思想觉悟,尤其是观察、分析和 解决问题的实际工作能力, 以便培养成能够主动适应社会主义现代化 建设需要的高素质人才。 老师为我们的设计电路图查漏补缺, 指出我 们自己设计电路图的一些错误 , 。在我们缺少元件器材的时候,老师 20 主动给我们提供器材。 在最后进行调试的时候, 老师也指出了一些微 小的错误以改进我们整个的设计。 在完成整个设计后, 我们在高兴之 余,也非常感激老师对我们的帮助与培养。 总之,在这次课程设计当中 , 我们小组收获很大 ,不仅知道了实践 的重要意义 ,也感受到了团结就

26、是力量这一伟大真理的正确性 , 而且, 在这次设计当中 , 我们增强了我们的动手以及思 考能力, 也增进了我们小组成员之间的友谊。我们期待下一次的这种 类型的课程设计,不断提高自身的能力。 参考文献 1 曾婷,万星宇 ISD1700 系列语音芯片原理与应用设计 J 价 值工程, 2011 2 潘松,黄继业 . EDA技术实用教程 附录 附件一:元器件清单 元器件名称 数量 元器件名称 数量 按键开关 11(个) 排针( 20*2 ) 1(个) LED灯(绿色) 4(个) LED灯(红色) 1(个) 10K电阻 11(个) 麦克风 1(个) 1K电阻 5(个) 喇叭 1(个) 4.7K 电阻 3

27、(个) LCD( 12864) 1(块) 4.7uF 电解电容 6(个) ISD1760 语音芯片 1(块) 0.1uF 电容 6(个) 实验板 1(块) 21 附件二:硬件原理图图 22 附件四:程序清单 1、分频器程序: library ieee; use IEEE.STD_LOGIC_1164.ALL; ENTITY DIV IS PORT(CLK_50MHz:IN STD_LOGIC; CLK_1KHZ:BUFFER STD_LOGIC; CLK_5HZ: OUT STD_LOGIC; CLK_1HZ: OUT STD_LOGIC; CLK_2Hz: OUT STD_LOGIC );

28、END; ARCHITECTURE BEHAV OF DIV IS SIGNAL Q1K, Q5,Q1,Q2: STD_LOGIC; SIGNAL COUNT1: INTEGER RANGE 49 DOWNTO 0; SIGNAL COUNT2: INTEGER RANGE 499 DOWNTO 0; SIGNAL COUNT3: INTEGER RANGE 1 DOWNTO 0; SIGNAL COUNT4: INTEGER RANGE 9 DOWNTO 0; BEGIN PROCESS(Q1M,Q2K) BEGIN IF Q1MEVENT AND Q1M=1THEN IF COUNT2=4

29、99 THEN COUNT2=0; Q2K=1; ELSE COUNT2=COUNT2+1; Q2K=0; END IF; END IF; END PROCESS; PROCESS(Q2K,Q1K) BEGIN IF Q2KEVENT AND Q2K=1THEN IF COUNT3=1 THEN COUNT3=0; Q1K=1; ELSE COUNT3=COUNT3+1; Q1K=0; END IF; END IF; END PROCESS; CLK_2KHZ=Q2K; CLK_1KHZ=Q1K; CLK_100HZ=Q100; CLK_1HZ=Q1; CLK_2Hz=Q2; END BEHA

30、V; 2、抢答模块主要程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity qiangda is port(clk :in std_logic; start,ready:in std_logic; jishi:in std_logic_vector(3 downto 0); p,p1,p2,p3,p4:in std_logic_vector(3 downto 0); reset:in std_logic; q:out

31、 std_logic_vector(3 downto 0); fq:out std_logic_vector(3 downto 0); end qiangda; architecture behav of qiangda is signal d:std_logic_vector(3 downto 0); signal fd:std_logic_vector(3 downto 0); signal 23 flag,flag1:std_logic:=0; -flag=0; begin process(clk) begin if clk=1and clkevent then if start=0 o

32、r reset=0then flag=0; d=0000;fd=0000; end if; if ready=0then flag1=1; end if; elsif p(3)=0 and p4/=0000then fd(3)=1; else NULL; end if; end if; end if; end if; end process; q=d; fq=fd; end behav 3、报时模块主要程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; if flag=0 and flag1=

33、1then if jishi=0000 then if p=0111 and fd(3)/=1and p4/=0000then flag=1;flag1=0;d(3)=1; elsif p=1011 and fd(2)/=1and p3/=0000then flag=1;flag1=0;d(2)=1; elsif p=1101 and fd(1)/=1and p2/=0000then flag=1;flag1=0;d(1)=1; elsif p=1110 and fd(0)/=1and p1/=0000then flag=1;flag1=0;d(0)=1; else NULL; end if;

34、 else if p(0)=0 and p1/=0000then fd(0)=1; elsif p(1)=0 and p2/=0000then fd(1)=1; elsif p(2)=0 and p3/=0000then fd(2)=1; use ieee.std_logic_unsigned.all; entity baoshi is port(bcd: in std_logic_vector(3 downto 0); clk_2k,clk_1k,clk_1Hz,ready,sta rt,datijishi: in std_logic; voice:out std_logic ); end

35、entity baoshi; architecture behav of baoshi is signal flag,flag1:std_logic; signal count:integer range 0 to 1000; begin process(clk_1Hz,bcd) begin if ready=0and datijishi=0 then flag=1;count=0; elsif start=0 then flag=0; else if bcd=0000 then if flag=1then voice=clk_2k and clk_1Hz; if clk_1kevent an

36、d clk_1k=1 then if count=1000 then 24 flag=0; else count=count+1; end if; end if; end if; end if; end process; bcd1=b1; bcd0=b0; end rtl; elsif bcd/=0000 then if flag=1then voice=clk_1k and clk_1Hz; end if; else voice=Z; end if; end if; end process; end behav; 5、LCD部分转换模块主要程序: library ieee; use ieee

37、.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity winner is port(reset:in std_logic; p1,p2,p3,p4:in std_logic_vector(3 downto 0); start:in std_logic; number:out std_logic_vector(15 downto 0); 4、倒计时模块主要程序: win:out std_logic); library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_un

38、signed.all; entity counter5 is port(clk,reday,start:in std_logic; bcd1,bcd0:buffer std_logic_vector(3 downto 0); end counter5; architecture rtl of counter5 is signal flag:std_logic:=0; signal b1,b0:std_logic_vector(3 downto 0); begin process(clk) begin if reday=0 then b1=0000;b0=0101; else if clk=1a

39、nd clk event then if b0=0000then b0=0000; else b0=b0-1; end if; end if; end winner; architecture rtl of winner is begin process(p1,p2,p3,p4) begin if reset=0 or start=0 then win=0; else if p1=1010 then number=xa3b1; win=1; elsif p2=1010 then number=xa3b2; win=1; elsif p3=1010 then number=xa3b3; win=

40、1; elsif p4=1010 then number=xa3b4; win=1; else win=0; end if; end if; end process; end rtl; 25 6、计分模块主要程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity jifen is port(clk,reset:in std_logic; add,sub:in std_logic; p,fp,start:in std_logic; dati1,dati0:in std_logic

41、_vector(3 downto 0); p_1:buffer std_logic_vector(3 downto 0); end jifen; architecture rtl of jifen is signal p1:std_logic_vector(3 downto 0); signal p10:std_logic_vector(3 downto 0); signal flag,flag1,flag2:std_logic; begin process(clk) begin if clk=1and clkevent then if start=0 then flag=0;flag1=0;

42、flag2=0 end if; if reset=0then p1=0101; else if p=1 then if add=0 then flag1=1; elsif sub=0 or (dati1=0000 and dati0=0000) then flag2=1; end if; if flag1=1 and flag=0then if p1/=0000then p1=P1+1;flag=1;flag1=0 end if; elsif flag2=1and flag=0then if p1=0000 then p1=0000; else p1=p1-1;flag2=0;flag=1 e

43、nd if; end if; elsif fp=1 and flag=0then if p1=0000 then p1=0000; else p1=p1-1;flag=1; end if; end if; end if; end if; end process; p_1=p1; end rtl; 7、数码管显示模块主要程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity display is port(clk,ready,start:in std_logic; din0,di

44、n1:in std_logic_vector(3 downto 0); reset:in std_logic; sel1,sel2:out std_logic led_a,led_b,led_c,led_d,led_e,l ed_f,led_g,led_dp:out std_logic); end display; architecture bhv of display is signal led:std_logic_vector(6 26 downto 0); NULL; signal num:std_logic_vector(3 end if; downto 0); else s=11;

45、signal s0,s:std_logic_vector(1 end if; downto 0); end process; signal flag:std_logic:=0; begin led=0111111 when num=0 sel1=s(0); else sel2=s(1); 0000110 when num=1e lse led_a=led(0); 1011011 when num=2e lse led_b=led(1); 1001111 when num=3e lse led_c=led(2); 1100110 when num=4e lse led_d=led(3); 110

46、1101 when num=5e lse led_e=led(4); 1111101 when num=6e lse led_f=led(5); 0000111 when num=7e lse led_g=led(6); 1111111 when num=8e lse process(clk) 1101111 when num=9e lse begin 0000000 when num=10 if clkevent and clk=1 then else if ready=0 then 0000000 when num=11 flag=1; else end if; 0000000 when

47、num=12 if start=0 or reset=0then else flag=0; 0000000 when num=13 end if; else if s0=01 then 0000000 when num=14 s0=00; else else s0=s0+1; 0000000 when num=15 end if; else end if; 0000000; end process; end bhv; process(flag,din0,din1,s0) 8、LCD显示模块部分显示主要程序: begin if disp_cnt= 0 then if flag=1 then if

48、 sw=1100 then if s0=00 then lcd_bus=title(disp_cnt1); num=din1; else s=01; led_dp=0; lcd_bus=player(disp_cnt1); elsif s0=01 then end if; num=din0; elsif disp_cnt=1 then s=10; if sw=1100 then led_dp=0; lcd_bus=zhidao(disp_cnt1); else elsif sw=1000 then 27 lcd_bus=ps2(disp_cnt1); else if win1=1 then l

49、cd_bus=win2(disp_cnt1); else if flag1=0and flag2=0and (dati1/=0000 or dati0/=0000)then if sw=0001 then lcd_bus=timu1(disp_cnt1); elsif sw=0010 then lcd_bus=timu2(disp_cnt1); elsif sw=0011 then lcd_bus=timu3(disp_cnt1); elsif sw=0100 then lcd_bus=timu4(disp_cnt1); elsif sw=0101 then lcd_bus=timu5(dis

50、p_cnt1); else lcd_bus=kong(disp_cnt1); end if; else if sw=0001 then lcd_bus=daan1(disp_cnt1); elsif sw=0010 then lcd_bus=daan2(disp_cnt1); elsif sw=0011 then lcd_bus=daan3(disp_cnt1); elsif sw=0100 then lcd_bus=daan4(disp_cnt1); elsif sw=0101 then lcd_bus=daan5(disp_cnt1); else lcd_bus=kong(disp_cnt

51、1); end if; end if; end if; end if; elsif disp_cnt=2 then if sw=1100 then lcd_bus=zuyuan(disp_cnt1); else if flag3=1 then lcd_bus=win(disp_cnt1); else if (fp(0)=1or fp(1)=1or fp(2)=1or fp(3)=1)and datijishi=0 then lcd_bus=fangui(disp_cnt1); elsif datijishi=1 and (dati1/=0000 or dati0/=0000)then lcd_

52、bus=qiang(disp_cnt1); elsif dati1=0000 and dati0=0000 then lcd_bus=shijian(disp_cnt1); else lcd_bus=kong(disp_cnt1); end if; end if; end if; elsif disp_cnt=3 then if sw=1100 then lcd_bus=zuyuan2(disp_cnt1); else if datijishi=1 then if add1=0then flag1=1; elsif sub1=0then flag2=1; elsif win1=1 then f

53、lag3=1; end if; if flag3=1 then lcd_bus=win4(disp_cnt1); else if flag1=1 then lcd_bus=add(disp_cnt1); elsif flag2=1then lcd_bus=sub(disp_cnt1); else lcd_bus=kong(disp_cnt1); end if; end if; else lcd_bus=kong(disp_cnt1); end if; end if; end if; 28 9、键盘模块部分主要程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.A

54、LL; USEI EEE.STD_LOGIC_UNSIGNED.ALL; ENTITY lcd_keyboard1 IS data:IN STD_LOGIC_VECTOR(4 downto 0); clr:in std_logic; aaa:in std_logic_vector(7 downto 0); del:in std_logic; PORT( clk,reset,start:in dataout1,dataout2,dataout3,data out4,dataout5,dataout6,dataout7 ,dataout8,dataout9,dataout10,da taout11,dataout12:OUT STD_LOGIC_VECTOR(4 downto 0):=11111 ); END lcd_keyboard1; ARCHITECTURE BEHAV OF lcd_keyboard1 IS type dirve_sta is(d1,d2,d3,d4,d5,d6,d7,d8,d9,d 10,d11,d12,d13); signal current

温馨提示

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

评论

0/150

提交评论