基于CPLD的智力竞赛抢答器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南工程学院

课程设计

课程名称嵌入式系统

课题名称基于CPLD的智力竞赛抢答器

专业电子信息工程

班级电子信息0703

学号************

姓名田博文

指导教师陈爱萍

2010年12月20日

湖南工程学院

课程设计任务书

课程名称:嵌入式系统

题目:基于CPLD的智力竞赛抢答器

专业班级:电子信息0703

学生姓名:***

指导老师:***

审批:

任务书下达日期 2010 年12月20 日

设计完成日期 2010年 12月31日

目录

一、总体思路及原理 (1)

二、各级模块设计及仿真 (1)

1、抢答启动模块 (1)

(1)按键识别子模块 (2)

(2)倒计时子模块 (4)

2、选手抢答模块 (6)

(1)单个选手按键子模块 (6)

(2)判断抢答选手子模块 (7)

3、加减分模块 (9)

(1)组别判断子模块 (9)

(2)加减及寄存器子模块 (11)

(3)分数选择输出模块 (13)

4、显示模块 (14)

5、蜂鸣器模块 (16)

四、实验箱的调试 (18)

五、总结与体会 (19)

六、参考文献 (21)

七、总原理图 (22)

一、总体思路及原理

抢答器原理是根据所要设计的系统功能,将整个系统划分成几个主要模块,再将每个模块细分成几个子模块,直到最底层的小模块容易编程实现为止。只需对底层元件编程实现,最后将各模块连接起来组成所需的系统。

对于一个抢答器系统,可将其分为五个模块:选手抢答模块、抢答启动模块、加减分模块、显示模块、蜂鸣器控制模块,其中抢答启动模块具有启动抢答及启动定时功能,输出使能信号给选手识别模块,以及抢答剩余时间给显示模块;选手识别模块完成锁存抢答信号的功能,并输出选手号给显示模块;蜂鸣器对抢答成功以及超时鸣声报警;显示模块对输入的数据进行显示。

二、各级模块设计

1、抢答启动模块

启动模块除了有启动的功能外,还有启动定时的功能。定时时间分为5秒和20秒两种,使用两个按键对应两种限时抢答。

为此,将本模块再划分为2个子模:

1)按键识别子模块

按键的识别即对输入信号进行电平变化检测,电平发生跳变就认为是键被按下。但VHDL程序中一个结构体内不能同时对两个信号进行电平跳变的检测,所以对本模块的程序设计采用状态机来实现,并使用统一的时钟信号来扫描按键的电平状态。

按键识别子模块

对START5和START20两个按键定义三种状态,START5按下为ST1状态,此时两个按键“START5&START20”输入电平为“01”;START20按下为ST2状态,此时电平为“10”;两个都没按下为ST0状态,此时电平为“11”。状态转换图如图所示。

本模块程序为:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY START_5_20 IS

PORT(CLK1,RST,START5,START20:IN STD_LOGIC; B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --输出定时初值

S_FLAG:OUT STD_LOGIC); --置数信号

END ENTITY;

ARCHITECTURE ONE OF START_5_20 IS

SIGNAL DATAIN:STD_LOGIC_VECTOR(1 DOWNTO 0);

TYPE ST_TYPE IS (ST0,ST1,ST2); --定义状态 SIGNAL C_ST:ST_TYPE; BEGIN DATAIN<=START5&START20; --两个输入信号放在一起判断 PROCESS(RST,CLK1)

BEGIN IF RST='0' THEN --复位 B<="0000";A<="0000";C_ST<=ST0;S_FLAG<='0'; ELSIF CLK1'EVENT AND CLK1='1' THEN CASE C_ST IS

WHEN ST0=> IF DA TAIN="01" THEN

C_ST<=ST1; --输入信号为01,转ST1状态

按键识别模块状态转换图

S_FLAG<='1'; --置数信号有效

B<="0000";A<="0101"; --定时初值“05”

ELSIF DATAIN="10" THEN

C_ST<=ST2; --输入信号为10,转ST1状态

S_FLAG<='1'; --置数信号有效

B<="0011";A<="0000"; --定时初值“30”

ELSE C_ST<=ST0; --输入信号为11,保持ST0状态

END IF;

WHEN ST1=>IF DATAIN="11" THEN

C_ST<=ST0;--防按键抖动,为11时才转ST0状态

S_FLAG<='0'; --置数信号无效

ELSE C_ST<=ST1; --按键没弹起,继续等待

END IF;

WHEN ST2=>IF DATAIN="11" THEN C_ST<=ST0;S_FLAG<='0';

ELSE C_ST<=ST2;

END IF;

WHEN OTHERS=>C_ST<=ST0;B<="0000";A<="0000";

END CASE;

END IF;

END PROCESS;

END ARCHITECTURE;

本模块仿真波形如图所示。

按键识别模块仿真波形

相关文档
最新文档