单片机课程八路抢答器设计(含源程序)
单片机、微机原理课程设计(八路抢答器)
《微机原理与接口技术》课程设计报告基于STC89C52防违规八路抢答器院系:专业(班级):姓名:学号:指导教师:职称:完成日期: 2013 年 12 月 25 日目录1 引言 (1)2 总体方案论证与设技 (1)2.1 主控模块的选型和论证 (1)2.2 显示模块的选型和论证 (2)2.3 按键模块的选型和论证 (2)2.4 系统整体设计概述 (3)2.5 系统使用说明 (4)3 系统硬件电路设计 (4)3.1 主控模块 (4)3.1.1 单片机芯片介绍 (5)3.1.2 单片机最小系统 (6)3.2 数码管模块设计 (6)3.2.1 数码管原理介绍 (7)3.2.2 数码管电路设计 (7)3.3 键盘模块设计 (8)3.4 蜂鸣器模块设计 (8)4 系统软件设计 (9)4.1 系统软件总体设计 (9)4.2 程序设计原理 (10)5 系统调试 (11)5.1 硬件调试 (11)5.2 调试结果 (12)6 总结 (12)7 致谢 (13)参考文献 (14)附录A 系统整体原理图 (15)附录B 实物图 (16)附录C 系统源程序 (17)基于STC89C52防违规八路抢答器1 引言随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。
本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。
单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。
对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。
选手们都站在同一个起跑线上,体现了公平公正的原则。
1.1 本系统主要研究内容本系统设计制作一个基于单片机的8路抢答器。
能实现以下几种功能:(1)键盘扫描,显示当前按键。
单片机课程设计(八路抢答器)
随着社会的不断发展和科学技术的不断提高,各种工业自动化不断升级,电子技术得到了飞速发展,基于单片机的控制系统已广泛应用与工业、农业、电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。
本设计是以八路抢答为基本理念,考虑到需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和抢答的号码。
用开关做键盘输出,扬声器发生提示,并且有警告灯显示。
关键词:单片机,抢答器,显示第一章概述1.1课题背景随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。
目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。
因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。
现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决。
1.2课题的意义与发展方向随着电子技术的发展,抢答器作为一种电子产品,早已广泛应用于企业单位、学校和电视台,为各种知识竞赛、文娱活动提供公正客观快速的裁决。
它能迅速、客观地分辨出哪位选手最先按下的抢答键,大大增强了比赛的公平性,给人们带来了很大的方便。
而随着科学技术的不断发展,以单片机作为主控制器的抢答器占据了主要的地位。
目前数字电子技术已经广泛地应用于计算机、自动控制、电子测量仪表、电视、雷达、通信等各个领域。
例如在现代测量技术中,数字测量仪表不仅比模拟测量仪表精度高,功能高,而且容易实现测量的自动化和智能化。
随着集成技术的发展,尤其是中,大规模和超大规模集成电路的发展,数字电子技术的应用范围将会更广泛地渗透到国民经济的各个部门,并将产生越来越深刻的影响。
第二章硬件电路设计2.1 系统的控制要求与总体结构系统的控制要求:1.给主持人设置一个开关,用来控制系统的重启(编号显示数码管重置初始时间)和抢答器的倒计时开始。
八路抢答器设计(附源程序)
烟台大学单片机课程设计说明书课题:八路抢答器学生姓名:学号:院系:机电汽车工程学院专业:机械设计制造及其自动化指导老师:同组成员:组长:20 年06 月07 日目录1 概述 (2)2设计任务 (2)3 系统总体方案 (3)4 硬件设计 (4)4.1 控制系统所需硬件 (4)4.2 硬件原理介绍 (4)5 软件设计 (7)5.1 软件总体设计 (7)5.2 程序流程图 (8)6 Proteus软件仿真 (12)6.1 Keil软件 (12)6.2在Proteus软件 (12)7小结 (14)8心得体会 (15)附1:源程序代码 (16)附2:参考文献 (24)1 .概述8路智能抢答器的设计现如今,各种智力知识竞赛已经成为人们的一种娱乐形式,人们在答题的过程中不仅可以享受到乐趣,还可以学到一些科学知识和生活常识。
然而在抢答过程中,单靠视觉是很难判断出哪组最先完成抢答操作。
为了辨别哪一组或哪一位选手获得答题权,必须要设计一个智能抢答控制系统——智能抢答器。
抢答器作为一种电子产品,已被人们所熟知并广泛应用于各种智力知识竞赛场合。
抢答器在竞赛中有很大用处,通过抢答器的指示灯显示,数码管显示和警示蜂鸣等手段,能准确,公正,直观地判断出第1抢答者并协助比赛的顺利进行。
但是,目前使用的抢答器大多数都采用了逻辑电路进行设计,分立元件较多,造成抢答器的成本较高。
此外一般抢答器由模拟电路,数字电路或二者结合组成,其智能化程度低,故障率高,显示简单。
现代电子技术的发展要求电子电路朝数字化,集成化方向发展,因此设计出全集成电路的多路抢答器是现代电子技术发展的要求。
2 .设计任务本设计要求学生结合现有的实际条件,以单片机为控制核心,设计一个8路智能抢答器。
要求实现的功能如下:1) 抢答器可同时供8名选手或8个代表队比赛,分别用8个按键S1~S8进行抢答。
2) 主持人可以通过智能抢答器的按键设定每道题的抢答时间和回答时间。
3) 具有清零和非法抢答控制功能,并由主持人操纵,避免选手在主持人说“开始”前提前抢答,违反规则。
8位竞赛抢答器的设计
单片机课程设计专业电气工程及其自动化指导教师学生颜良堂学号 B16题目8位竞赛抢答器的设计2013年12月25日目录一、设计任务与要求 (3)二、方案设计与论证 (3)方案一: (3)方案二: (3)三、单元电路的设计 (3)芯片的选择及工作原理 (3)系统的硬件构成及功能 (4)四、软件的设计 (5)主程序流程图 (5)主程序 (5)子程序 (6)1、开始、复位程序 (6)2、中断程序 (6)3、选手键盘扫描程序 (7)4、数码管显示程序 (9)5、抢答时间设计程序 (9)6、延时子程序 (9)五、仿真与调试 (10)抢答器调试结果 (10)六、结论与心得 (12)附件1:电路图 (12)附件2:源程序 (13)附、参考文献� (17)一、设计任务与要求以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
设置一个系统清除和抢答控制开关S,开关由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为左右。
参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。
同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。
二、方案设计与论证方案一:使用C语言编程实现基于单片机的八位抢答器的课程设计,用到的元器件有AT89C51 、MAX7219、按键、数码管、上拉电阻、蜂鸣器等。
基于单片机八路抢答器设计
第一章系统方案与论证1.1 根本要求〔1〕系统容量:为满足竞赛抢答的要求,系统容量定位8路。
〔2〕系统能完成:倒计时指令发送与接收;抢答对别信息发送与接收;〔3〕抢答倒计时可在0-99秒内根据需要任意调整。
〔4〕所有信息交换都采用无线通信。
〔5〕抢答指令发出和抢答成功要有提示音。
1.2 系统方案选择1.2.1 系统根本构造框图1-1 根本系统构造框图系统工作流程:主持人电路通电后,2位数码管不断加1,以示电路可以正常工作。
主持人按下控制开关后,电路进入倒计时预设状态,设置好后再按一下控制开关,则完成预设,数码管显示预设数。
当主持人按下开场按钮后,选手可以抢答,同时数码管显示倒计时读秒,如有选手按下抢答键,数码管显示该选手的序号,同时封锁其他的抢答信号,蜂鸣器鸣叫10s,以示有人抢答成功。
如读秒归零时还无人抢答,则蜂鸣器鸣叫10s,数码管显示为不断闪亮的“00〞,以示抢答时间到。
当抢答的选手答复完毕或读秒归零后,主持人按一下开场按钮,电路即可恢复到开场抢答,倒计时读秒状态1.2.2 通信方案论证与选择要实现无线通信,可选用频分复用和时分复用两种形式。
频分复用各信道独立,不考虑信号在时间上的重叠。
但是在整个系统最少也需要8个信道,电路复杂,制作本钱高,故不取。
对实际问题进展分析,发现系统通信中,除抢答信号外,其他信号的传送都具有明显的分时性〔即各信号的传送都不可能同时出现〕。
再对抢答信号进展深入研究,发现:〔1〕人对抢答信号的反响在毫秒级是很不灵敏的,人的反响速度是在0.2s-0.8s 内随即出现。
〔2〕在比赛现场,抢答题目一般在几十秒内。
能做出答复决定的人也只在40%左右,坚决做出答复决定的占20%左右。
根据系统满容量算20*20%=4,只有4个左右的人数进入0.2—0.8s反响比赛中。
〔3〕按键反响速度也是有差异的,大概在20ms左右。
根据以上三点分析,可以定性的得出抢答信号在一定的时间区间内具有随机分时的特性。
单片机课程八路抢答器设计(含源程序)
武汉工程大学——课程设计报告设计题目:基于单片机八路抢答器设计系(院):电气院专业:测控技术与仪器年级 (班):09级测控02班学号:***********名:******:***2012年 12月 12日目录目录 (2)摘要 (3)一、设计任务与要求......................................... 错误!未定义书签。
二、方案设计与论证......................................... 错误!未定义书签。
三、硬件电路设计 (5)3.1抢答器的电路框图 (5)3.2 单元电路设 ........................................... 错误!未定义书签。
3.3外部震荡电路.......................................... 错误!未定义书签。
3.4报警电路设计.......................................... 错误!未定义书签。
四、软件设计................................................ 错误!未定义书签。
4.1系统主程序设计 (7)4.2主程序清单 (8)五、仿真过程与仿真结果 (11)5.1用到了keil软件仿真 (11)5.2 Proteus仿真 (11)5.3用DXP连接原理 (11)5.4用DXP连接PCB图...................................... 错误!未定义书签。
六、安装与调试.............................................. 错误!未定义书签。
6.1制作PCB电路板流程......................... 错误!未定义书签。
6.2器件选型方案的详细清单 (12)6.3调试.................................................. 错误!未定义书签。
单片机课程设计(八路抢答器)
单片机课程设计八路抢答器一设计要求:①如果想调节抢答时间或答题时间,按“抢答时间调节”键或“答题时间调节”键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下“加1s”键,如果想减一秒按一下“-1s”键,时间LED上会显示改变后的时间,调整范围为0s~99s, 0s时再减1s会跳到99,99s时再加1s会变到0s。
②主持人按“抢答开始”键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。
倒数时间到小于5s会每秒响一下提示音。
③如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。
④如果主持人未按“抢答开始”键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下“停止”键为止。
⑤P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2抢答时间调整结,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
⑥当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始。
二设计思路:系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。
硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。
软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。
在系统设计中设计方法的选用是系统设计能否成功的关键。
硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。
单片机课程八路抢答器设计(含源程序)
武汉工程大学——课程设计报告设计题目:基于单片机八路抢答器设计系(院):电气院专业:测控技术与仪器年级 (班):09级测控02班学号:0904010217姓名:吕禹指导教师:郝毫毫2012年 12月 12日目录目录 (2)摘要 (3)一、设计任务与要求......................................... 错误!未定义书签。
二、方案设计与论证......................................... 错误!未定义书签。
三、硬件电路设计 (5)3.1抢答器的电路框图 (5)3.2 单元电路设 ........................................... 错误!未定义书签。
3.3外部震荡电路.......................................... 错误!未定义书签。
3.4报警电路设计.......................................... 错误!未定义书签。
四、软件设计................................................ 错误!未定义书签。
4.1系统主程序设计 (7)4.2主程序清单 (8)五、仿真过程与仿真结果 (11)5.1用到了keil软件仿真 (11)5.2 Proteus仿真 (11)5.3用DXP连接原理 (11)5.4用DXP连接PCB图...................................... 错误!未定义书签。
六、安装与调试.............................................. 错误!未定义书签。
6.1制作PCB电路板流程......................... 错误!未定义书签。
6.2器件选型方案的详细清单 (12)6.3调试.................................................. 错误!未定义书签。
基于单片机的八路抢答器电路设计
第一部分系统整体方案设计与比较一、实验目的1、掌握系统整体方案设计的方法2、培养分析系统设计方案的能力二、实验内容针对本次课题,提出几种总体设计方案,并比较其优缺点,确定一套方案为本课题采纳的方案。
三、实验原理与方法本次课程设计设计的是一个多路定时抢答器,是一个多于两位选手参赛的一个抢答器,具有锁存和显示功能。
同时有主持人控制系统的清零和抢答的开始。
抢答开始后,若有任何一名选手按动抢答按钮,抢答器就会显示该选手编号直至系统被主持人清零,并有扬声器发出提示,同时其他人再抢答就无效了。
这次设计的抢答器还有自动定时功能,主持人可以设定选手答题的时间。
当主持人启动“开始”键后,定时器会自动减计时,这个会显示在显示器上。
选手只有在抢答时间内抢答才有效,若在答题时间内没有选手答题,时间到时,报警电路就会发出警报亮灯并且禁止抢答。
抢答器由计数器、寄存器、集成定时器和译码显示等组合、时序电路组成。
可分为抢答电路,定时电路,报警电路等几个单元部分。
每个单元电路分别可以处理一些抢答竞赛中的基本问题。
四、实验步骤1、方案设计按照目前的各种技术及要求,要设计一个八路抢答器主要有以下方案:方案一:采用数电技术实现。
方案二:采用编程技术通过设计简单电路实现。
2、方案比较方案一设计的抢答器的电路主要是由抢答器开关电路、触发电路、触发锁存电路、编程器、七段显示译码器几部分构成。
抢答电路主要采用优先编码器74LS148和74LS279完成。
此外还有定时电路,报警电路,时序控制电路等。
方案二设计的电路图简单明了,避免重复,控制起来更加方便。
抢答器对参赛选手的动作的先后有很强的分辨力,即使先后只相差几毫秒,抢答器也能分辨出来,抢答器直接实现了动作选手的编号,并保持到主持人清零为止,且实现的功能较多,比如增设了开启锦囊,回答和抢答时间均可随意调整,故采用方案二。
五、实验记录与结论方案一将抢答按钮先直接与锁存器而不是优先编码器相连,将最先抢答的选手的编号锁定,再依次经过优先编码器、译码器和七段显示器,最后显示的是抢答选手的编号,经过优先编码器后的信号到单稳态触发器,单稳态触发器又与报警电路直接连接,所以显示编号的同时可以发出报警信号。
单片机八路抢答器课程设计
单片机八路抢答器课程设计一、引言随着科技的发展和应用越来越广泛,单片机在各个领域的应用日益普遍。
其中,抢答器是一种常见且有趣的单片机应用。
本课程设计将介绍如何使用单片机设计一个八路抢答器,帮助学生更好地理解和掌握单片机的原理和应用。
二、系统框图八路抢答器系统主要由以下几个部分组成: 1. 单片机主控模块:负责系统的整体控制和数据处理。
2. 八个抢答器按键模块:提供用户按键输入功能。
3. 抢答器显示模块:展示抢答器的按键状态和抢答结果。
4. 蜂鸣器模块:用于发出抢答成功或失败的音频提示。
三、系统功能设计八路抢答器的主要功能如下: 1. 抢答器按键功能:每个抢答器都具有独立的按键,当按下按键时,抢答器将发送信号给主控模块。
2. 抢答器显示功能:通过显示模块,实时显示每个抢答器的抢答状态,如按下、未按下等。
3. 抢答器抢答功能:在系统开始抢答后,只有首先按下按键的抢答器才能获得抢答资格。
4. 抢答结果显示功能:在抢答结束后,显示抢答结果,并通过蜂鸣器模块发出音频提示。
四、硬件设计4.1 单片机主控模块主控模块是整个系统的核心,它接收抢答器按键模块发送的信号,并对抢答结果进行处理。
可以选择常用的单片机,如STC89C51等。
### 4.2 抢答器按键模块抢答器按键模块包括八个独立的按键,用于用户进行抢答操作。
按下按键时,将通过IO口发送信号给主控模块。
### 4.3 抢答器显示模块抢答器显示模块采用LED或LCD等显示器件,用于显示八个抢答器的状态,如按下、未按下等。
### 4.4蜂鸣器模块蜂鸣器模块用于发出抢答成功或失败的音频提示。
可以选择适合的蜂鸣器模块并通过IO口控制。
五、软件设计5.1 系统初始化在系统初始化过程中,需要对硬件进行初始化,包括IO口设置、定时器设置等。
### 5.2 抢答逻辑处理通过编程实现抢答逻辑处理,包括按键检测、抢答结果判断等。
当检测到抢答按键按下时,判断该抢答器是否首次按下,并显示相应的抢答结果。
单片机、微机原理课程设计(八路抢答器)
03
硬件电路设计
单片机、微机原理硬件电路设计
单片机:8051系列单片机,具有丰富的I/O接口和定时器/计数器资源
微机原理:基于8086/8088微处理器,具有丰富的指令集和内存资源
硬件电路设计:包括电源电路、时钟电路、复位电路、I/O接口电路、定时器/计数器电路等
八路抢答器:采用八路抢答器设计,实现八路抢答功能,具有抢答指示灯和抢答按钮等 硬件电路设计
感谢观看
汇报人:
电源电路设计
电源类型:直流电源或交流电源 电源电压:根据设备需求选择合适的电源电压 电源连接:确保电源线连接正确,避免短路或断路 电源保护:使用电源保护装置,如保险丝、断路器等,防止电源过载或短路。
04
软件程序设计
主程序流程图设计
初始化:设置抢 答器状态、显示 抢答器状态、设 置抢答时间
抢答阶段:判断 是否有人抢答、 判断抢答时间是 否结束、判断抢 答者是否正确
图设计
程序代码实现
程序设计语言:C语言
程序结构:主函数、子函数、 循环结构、条件判断等
程序功能:实现八路抢答器的 功能,包括抢答、计分、显示 等
程序优化:考虑程序的效率和 稳定性,进行优化和改进
05
系统调试与测试
系统调试步骤和方法
硬件连接:检查各模块之间的 连接是否正确,确保电源、地 线、信号线等连接无误。
八路抢答器的工作原理
八路抢答器由八路抢答按钮、八路抢答指示灯、八路抢答控制电路组成。
八路抢答按钮用于选手抢答,按下后,对应的八路抢答指示灯亮起,表示 抢答成功。
八路抢答控制电路用于控制八路抢答按钮和八路抢答指示灯的工作,确保 只有一个选手可以抢答成功。
八路抢答器通过单片机或微机原理实现,可以实时检测选手的抢答情况, 并给出相应的反馈。
8路抢答器设计(含完整图)
数字电路课程设计报告8路数字抢答器1.概述抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。
另外设置系统清除开关一个,该开关由主持人控制。
抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手号码。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清零为止。
当主持人按下清除键后,参赛选手可以进行抢答,同时倒计时电路开始倒计时,抢答有效时,红灯亮,倒计时停止,显示器上显示选手的编号,并保持到主持人将系统清零为止。
2、8路数字抢答器各主要芯片介绍2.1、74LS14874LS148是一个8线—3线优先编码器。
74LS148外部管脚图、真值表如图所示:图一 74ls148 真值表由表不难看出,在0=S 电路正常工作状态下,允许70~I I 当中同时有几个输入端同时为低电平,即有编码输入信号。
7I 的优先权最高,0I 的优先权最低。
当07=I 时,无论其它输入端有无输入信号(表中以x 表示),输出端只给出7I 的编码,即000012=Y Y Y ,当74LS148的功能表输 入输 出S0I 1I 2I 3I 4I 5I 6I 7I2Y 1Y 0Y S Y EX Y1 0 0 0 0 0 0 0 0 0 x x x x x x x x 1 1 1 1 1 1 1 1 x x x x x x x 0 x x x x x x 0 1 x x x x x 0 1 1 x x x x 0 1 1 1 x x x 0 1 1 1 1 x x 0 1 1 1 1 1 x 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0U CC Y EX Y S I 3 I 2 I 1 I 0 Y 0I 4I 5I 6I7S Y 2Y 1GND 图2 74LS148管脚图16 9 74LS148 1 80167==I I 、时,无论其它输入端有无输入信号,只对6I 编码,即输出为001012=Y Y Y 。
八路抢答器_《单片机》课程设计报告-正文
第一章问题描述在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
因为在抢答过程中,靠视觉是很难判断出哪组先答题。
利用单片机系统来设计抢答器,使以上问题得以解决,即使各组的抢答时间相差几微秒,也可分辨出哪组优先答题。
该课程设计主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
本系统采用8051单片机作为核心。
控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答按键模块。
该抢答器系统通过开关电路八个按键输入抢答信号;利用语音芯片ISD1420 完成语音的录放功能;利用存储程序;利用一个四位一体的七段显示数码管来完成显示功能。
工作时,在按下抢答开始键后,用按键通过开关电路输入各路的抢答信号进行抢答,经单片机的处理,输出控制信号,控制数码管和语音芯片工作。
在位选数码管上显示哪一组先答题的号码,并有倒计时显示,以及通过语音系统发出报警声音,从而实现整个抢答过程。
第二章设计思想我的设计思路是竞赛抢答器要有报警系统,要是在规定时间内还没有参赛者抢答或回答出问题时就会发出报警声,倒计时为设定为5S。
并且如果出现犯规抢答时也会发出报警并且显示该犯规选手的编号。
这个抢答器可同时供不大于8名选手或8个代表队参加比赛,各用一个抢答按钮,按钮的编号与选手的编号是相对应的,分别是S1、S2、S3、S4、S5、S6、S7、S8;给节目主持人设置二个控制按钮开关,用来控制系统的清零和抢答的开始;该八路抢答器具有程序存储、数据锁存和显示功能,抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止;抢答器具有定时抢答的功能,且一次抢答,定时的时间可由主持人设定加减。
当节目主持人启动"开始"键后,要求定时器立即减计时,并用显示器显示,同时蜂鸣器发出短暂的声响,声响持续时间 0.5S左右,参赛选手在设定的时间内抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零;如果定时抢答的时间不大于5S后,却没有选手抢答时,系统持续报警,直到定时抢答的时间为零,本次抢答无效,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示FFF 犯规处理;如果主持人没按"开始"键,就有选手抢答,则显示选手编码,并持续报警;如果已经有选手抢答了,别的选手则按键无效。
基于51单片机八路抢答器课程设计
基于51单片机八路抢答器课程设计一、引言在现代教育中,抢答器作为一种教学辅助工具经常被用于进行课堂互动和知识点检测。
本课程设计旨在基于51单片机设计一个八路抢答器,通过硬件电路和软件程序的配合,实现对答题速度的测量和抢答器的控制。
二、实验目的1.熟悉并掌握51单片机的基本原理和编程方法;2.学会使用按键、LED等外设控制电路进行实验设计;3.理解抢答器的工作原理,掌握测量答题速度的方法;4.实际动手设计并制作一个八路抢答器。
三、实验原理3.1 51单片机基本原理51单片机是一种常见的单片机,具有低功耗、低成本和强大的功能特点。
它通过内部的CPU、存储器、I/O口等组成,可以实现各种控制任务。
在本次实验中,我们将使用51单片机来控制八路抢答器的功能。
3.2 抢答器的原理八路抢答器的原理是基于51单片机和按键、LED等外设的配合实现的。
抢答器中的每个按键对应一个LED灯,当某个按键被按下时,对应的LED灯会亮起。
同时,51单片机会记录下按键按下的时间,用于测量答题速度。
抢答器的控制逻辑可以通过编程实现。
四、实验步骤4.1 硬件电路设计1.连接51单片机与按键、LED等外设,确保电路连接正确;2.按照抢答器的八路设计,为每个按键连接一个LED灯;3.确保电路的供电正常,能够正常控制LED灯的亮灭。
4.2 软件程序设计1.编写51单片机的控制程序,实现按键与LED灯的互动;2.程序中需要包括按键检测、LED亮灭控制和答题速度记录等功能;3.调试程序,确保各个功能正常运行;4.将程序下载到51单片机中,进行全面测试。
五、实验结果5.1 硬件电路测试1.针对每个按键依次按下,观察对应的LED灯是否亮起;2.测试按键按下时的按键反馈是否正常;3.检查电路连接是否稳定,无松动情况。
5.2 软件程序测试1.模拟按键按下,观察对应的LED灯是否亮起;2.检查答题速度记录功能是否正常;3.检查程序逻辑是否正确,没有出现死循环等异常情况。
单片机课程设计 八位竞赛抢答器的设计
《单片机》课程设计报告题目:八位竞赛抢答器的设计目录第1章目的 (3)1.1八位竞赛抢答器的概述 (3)1.2系统主要功能 (3)第2章系统硬件设计 (3)2.1芯片的选择及工作原理 (3)2.3系统的硬件构成及功能 (4)2.3.1 抢答器的电路框图 (4)2.3.2 抢答器的电路图 (5)2.3.3 总体流程图 (6)第3章系统软件设计 (6)3.1系统主程序设计 (6)3.2抢答器的源程序 (7)第4章调式 (7)4.1主要技术参数 (7)4.2抢答器使用说明 (7)4.3常见故障 (8)附件: (8)小结 ............................................................................................................ 错误!未定义书签。
参考文献. (18)第1章目的1.1八位竞赛抢答器的概述本试验涉及的是八路数显抢答器,它具有电路简单、成本较低、操作方便、灵敏可靠等优点。
该电路由直流稳压电源、抢答器、超时报警与电子计分四部分组成。
抢答器由8个发射器和1个接收器组成,可用于8组或8组以下的竞赛中:将参赛组按顺序排号1~8,每组发给对应的一个发射器。
将接收器放于各组中央或前方。
当启动键按下后,抢答开始。
当其中一个发射器被按下后,接收器就立即显示该组的组号锁定。
之后按下任何一路抢答键均不起反映。
当再次按动启动键后,进行下一轮抢答。
1.2系统主要功能抢答器具有第一个抢答信号的鉴别和数据锁存、显示的功能。
每名选手有一个抢答按钮,按钮的编号与选手的编号相对应,抢答开始后,某抢答按钮被按下,电路具备自锁功能将信号锁定,禁止其他选手再抢答,优先抢答选手信息一直保持到启动键再次被按下,将系统清0 为止。
同时,对应该选手的指示灯亮,并在数码管上显示该选手编号,且扬声器发出音响提示。
第2章系统硬件设计2.1芯片的选择及工作原理本设计使用到的元器件包括:8051芯片(功能强大,操作简单,所用到的外围器件较少)、数码LED显示器、七段LED数码管的译码。
单片机课程设计报告 八路抢答器
单片机课程设计报告八路抢答器————————————————————————————————作者:————————————————————————————————日期:《单片机原理及接口技术》课程设计报告课题名称题目15八路抢答器设计★★学院自动控制与机械工程学院专业电气工程及其自动化班级姓名学号时间2011-12-27目录前言 (3)一、课程设计的目的和要求……………………………….。
.3二、方案设计2。
1功能介绍 (5)2。
2抢答器的工作原理 (6)三、硬件设计电路设计3。
1原理图的确定...................................................。
7 3。
2芯片的选择......................................................。
8 3。
3复位电路的设计......。
...。
.。
...。
.。
.。
..。
..。
..。
.。
.。
...。
(10)3.4晶振电路的设计……。
..。
..。
..。
.。
.。
.。
...。
...。
...。
.。
...。
.11 3。
5数码显示管的选择……。
.。
.....。
.。
.。
.。
.。
....。
..。
.。
..113.6报警设计……。
..。
.。
....。
.。
..。
.。
.。
....。
.。
.......。
.。
.。
.。
123.7 八位抢答输入设计...............................。
.........。
(12)3。
8主持人控制按键……………………。
.。
.。
..。
.。
..。
..。
.....。
.。
13四、软件设计思想及流程4。
1 主程序的设计 (14)4。
2子程序的设计 (15)五.调试过程和调试方法……………………………………。
..20六、课程设计体会 (22)七、参考文献 (22)附录 (23)前言单片机和其他微型机一样,也是由CPU(包括运算器和控制器)、存储器、输入设备、输出设备组成,只不过单片机是将CPU、RAM、ROM、定时/计数器,以及输入/输出(I/O)接口电路等计算机的主要部件集成在一小块硅片上的单片微型计算机.它具有体积小、可靠性高、性价比高等优点,主要应用于工业检测与控制、计算机外设、只能仪器仪表、通讯设备、家用电器和机电一体化产品等领域。
基于单片机的八路抢答器程序设计
基于单片机的八路抢答器程序设计(C语言)#include <reg51.h>#define uchar unsigned char#define GPIO_KEY P1sbit key1_zhuchi=P3^1; //主持人按键sbit key2_addt=P3^0; //加时按键sbit key3_mint=P3^2; //减时按键sbit beep=P1^5; //蜂鸣器报警sbit LED=P2^0; //LED指示灯sbit LSA=P2^2; //数码管位选sbit LSB=P2^3;sbit LSC=P2^4;//8段共阴数码管0~9段选uchar time,KeyValue,flag,count,m,a,tsbz;//倒计时时间,检测到的选手号,允许抢答标志,主持人按键检测次数,溢出标志,加时判断,时间调整标志uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void keyscan(); //键盘扫描函数void display(); //数码管显示函数void delay(uchar i); //延时函数void Key_down(); //选手按键按键扫描函数void main() //主函数{time=10; //初设抢答时间为10sKeyValue=0; //设置抢答没开始时选手号为0tsbz=1; //调时间标志flag=0; //答题允许标志m=0; //产生1S的溢出标志TMOD=0x01; //定时器0工作与方式1EA=1;ET0=1;while(1){keyscan();display();}}void keyscan() //键盘扫描{if(key2_addt==0&&tsbz==1) //为抢答或答题加时间{delay(8); //消抖if(key2_addt==0&&tsbz==1){while(!key2_addt);a++;if(a==1){TR0=0;time++;flag=0;}if(a==2){TR0=0;a=0;time++;flag=0;}}}if(key3_mint==0&&tsbz==1)//为抢答或答题减时间{delay(8);if(key3_mint==0&&tsbz==1){while(!key3_mint);a++;if(a==1){TR0=0;time--;flag=0;}if(a==2){TR0=0;a=0;time--;flag=0;}}}if(key1_zhuchi==0)//主持人按键按下{delay(8); //延时消抖if(key1_zhuchi==0){while(!key1_zhuchi); //按下count++;if(count==1) //主持人按键按下一次,开始抢答倒计时{tsbz=0; //不允许调时flag=1; //允许抢答TH0=0x3c;TL0=0xb0;TR0=1; //开启计时器}if(count==2) //主持人按键按下两次,切换到30s答题倒计时界面,可进行答题时间调整{LED=1;tsbz=1; //允许调整时间time=30;TR0=0; //停止计时flag=0; //不允许抢答}if(count==3) //主持人按键按下三次,答题时间开始倒计时{tsbz=0; //不允许调时TH0=0x3c;TL0=0xb0;TR0=1; //开启计时器flag=0; //不允许抢答}if(count==4) //主持人按键按下四次,全部清零{tsbz=1;TR0=0;time=10;flag=0;count=0;KeyValue=0;LED=1;}}}if(flag==1) //允许抢答后进行选手按键扫描{Key_down();}}void display() //显示函数{LSA = 1;LSB = 1;LSC = 1;P0=table[KeyValue]; //选手号码显示delay(100);P0=0x00; //消隐LSA = 0;LSB = 1;LSC =1;P0=0x40; //用来隔开时间显示和号码显示delay(100);P0=0x00; //消隐LSA = 1;LSB = 0;LSC =1;P0=table[time/10]; //计时十位显示delay(100);P0=0x00; //消隐LSA = 0;LSB = 0;LSC =1;P0=table[time%10]; //计时个位显示delay(100);P0=0x00; //消隐}void INT_0() interrupt 1 //中断函数{TH0=0x3c; //50ms定时初值TL0=0xb0;m++;if(m==20) //产生1S的时间{m=0;time--; //倒计时if(time<=5&&time>=0){uchar b=100;while(b--) //蜂鸣器报警{beep=~beep;delay(100);LED=~LED; //LED闪烁报警delay(50000);}}}if(time==0) //没选手抢答或答题时间结束{LED=0;TR0=0; //关闭定时器flag=0;//不允许抢答}}void delay(uchar i) //延时{while(i--);}void Key_down() //扫描选手按键{uchar c=100;uchar n=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下delay(8);//延时10ms进行消抖if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{GPIO_KEY=0X0F;//测试列switch(GPIO_KEY){case(0X07): KeyValue=1;break;case(0X0b): KeyValue=2;break;case(0X0d): KeyValue=3;break;case(0X0e): KeyValue=4;break;}GPIO_KEY=0XF0;//测试行switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+9;break;case(0Xe0): KeyValue=KeyValue+9;break;}}}while((n<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测{delay(8);n++;}switch(KeyValue) //读取选手按键{case 1: //一号选手抢答成功delay(8);if(KeyValue==1){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 2: //二号选手抢答成功delay(8);if(KeyValue==2){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 3: //三号选手抢答成功delay(8);if(KeyValue==3){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 4: //四号选手抢答成功delay(8);if(KeyValue==4){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 5: //五号选手抢答成功delay(8);if(KeyValue==5){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 6: //六号选手抢答成功delay(8);if(KeyValue==6){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 7: //七号选手抢答成功delay(8);if(KeyValue==7){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;case 8: //八号选手抢答成功delay(8);if(KeyValue==8){flag=0;TR0=0;while(c--) //蜂鸣器提示抢答成功{beep=~beep;delay(100);}LED=0;}break;}}。
单片机抢答器实验报告
单片机八路抢答器实验报告一实验任务1.设计一个竞赛抢答器,可同时供8名选手或者8个代表队参加比赛,他们的编号分别是1、2、3、4、5、6、7、8,各用一个抢答器的按钮,按钮的编号与选手的编号相对应。
2.给节目主持人设计一个控制开关,用来控制系统的清零和抢答开始。
3.抢答器具有数据显示,声音提示的功能。
二.源程序(1)头文件#include <REG52.H>#include <intrins.h>#include <string.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned char// -------------------------------------------------------------------------------------void show(); //液晶显示程序// -------------------------------------------------------------------------------------//12864液晶显示部分子程序模块// -------------------------------------------------------------------------------------sbit LCD_RS = P2^0; //寄存器输入sbit LCD_RW = P2^1; //液晶读/写控制sbit LCD_EN = P2^2; //液晶使能控制sbit LCD_PSB = P2^3;sbit SW1 = P1^0;sbit SW2 = P1^1;sbit SW3 = P1^2;sbit SW4 = P1^3;sbit SW5 = P1^4;sbit SW6 = P1^5;sbit SW7 = P1^6;sbit SW8 = P1^7;sbit beep = P3^6;#define LCD_data P0//sbit busy=P0^7; //lcd busy bitvoid lcd_xieping0(uchar x,uchar y,uchar date);void lcd_xieping(uchar x,uchar y,uchar *str);void chn_disp0(uchar code *chn);void img_disp(uchar code *img);void lcd_xieping1(uchar x,uchar y,uchar *str);void lcd_init();void write_cmd(uchar cmd);void delay_ms1(uint z);void delay_ms(uint z);void dingding(int a);//void Init_Timer0(void);void clr(void);extern unsigned char mmm[8][9];char keynumber();(2)显示部分的程序#include "head.h"unsigned char mmm[8][9];void delay_ms(uint z)//长延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delay_ms1(uint z)//长延时{uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);}// ------------------------------------------------------------------------------------- // 液晶显示部分// ------------------------------------------------------------------------------------- void write_cmd(uchar cmd){LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;P0 = cmd;delay_ms1(1);LCD_EN = 1;delay_ms1(1);LCD_EN = 0;}void write_dat(uchar dat){LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delay_ms1(1);LCD_EN = 1;delay_ms1(1);LCD_EN = 0;}void lcd_xieping0(uchar x,uchar y,uchar date) {switch(x){case 0: write_cmd(0x80+y); break;case 1: write_cmd(0x90+y); break;case 2: write_cmd(0x88+y); break;case 3: write_cmd(0x98+y); break;}write_dat(date);}void lcd_xieping(uchar x,uchar y,uchar *str) {switch(x){case 0: write_cmd(0x80+y); break;case 1: write_cmd(0x90+y); break;case 2: write_cmd(0x88+y); break;case 3: write_cmd(0x98+y); break;}while (*str){write_dat(*str);str++;}}void lcd_xieping1(uchar x,uchar y,uchar *str) {switch(x){case 0: write_cmd(0x84+y); break;case 1: write_cmd(0x94+y); break;case 2: write_cmd(0x8C+y); break;case 3: write_cmd(0x9C+y); break;}while (*str){write_dat(*str);str++;}}void lcd_init(){LCD_PSB = 1; //并口方式write_cmd(0x30); //基本指令操作delay_ms(5);write_cmd(0x0C); //显示开,关光标delay_ms(5);write_cmd(0x01); //清除显示内容delay_ms(5);}void chn_disp0(uchar code *chn){uchar i,j;write_cmd(0x30); //void write_cmd(uchar cmd) write_cmd(0x84);j=0;for(i=0;i<8;i++)write_dat(chn[j*16+i]);write_cmd(0x8c);j=1;for(i=0;i<8;i++)write_dat(chn[j*16+i]);}void show(){lcd_xieping(0,0,mmm[0]);lcd_xieping(0,4,mmm[1]);lcd_xieping(1,0,mmm[2]);lcd_xieping(1,4,mmm[3]);lcd_xieping(2,0,mmm[4]);lcd_xieping(2,4,mmm[5]);lcd_xieping(3,0,mmm[6]);lcd_xieping(3,4,mmm[7]);}(3)抢答器:#include "head.h"unsigned int ms,i=0;//定义全局变量bit FLag=0;//定义停止,计时标志char yy[8]={0,0,0,0,0,0,0,0};void main(){unsigned char num=0,k,j,temp;EX0=1; //外部中断0开IT0=1; //IT1=0表示边沿触发EX1=1; //外部中断1开IT1=1; //IT1=1表示边沿触发Init_Timer0();lcd_init();for(k=0;k<8;k++)for(j=0;j<8;j++)mmm[k][j]=0;//mmm[0][0]='0';mmm[1][0]='0';mmm[2][0]='0';mmm[3][0]='0';mmm[4][0]='0';mmm[5][0]='0';mmm[6][0]='0';mmm[7][0]=' 0';while(1){temp= keynumber();if(temp){mmm[i][0]=temp+'0';mmm[i][1]=':';mmm[i][2]= ms/1000+'0';mmm[i][3]=ms%1000/100+'0';mmm[i][4]=ms%100/10+'0';mmm[i][5]=ms%10+'0';mmm[i][6]='m';mmm[i][7]='s';mmm[i][8]='\0';show();i++;}show();}}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/ void Init_Timer0(void){TMOD |= 0x01;EA=1;ET0=1;TR0=1;}/*------------------------------------------------定时器中断子程序------------------------------------------------*/ void Timer0_isr(void) interrupt 1{TH0=0xFC; //重新赋值1msTL0=0x66;if(FLag){ms++;if (ms==60000){ms=0;}}}/*------------------------------------------------外部中断0程序------------------------------------------------*/ void ISR_INT0(void) interrupt 0{EX0=0;dingding(50);lcd_xieping(0,2," 可以开始抢答");FLag=!FLag;}/*------------------------------------------------外部中断1程序------------------------------------------------*/ void ISR_INT1(void) interrupt 2{if(FLag==0)//停止时才可以清零clr();}/*------------------------------------------------数值清零------------------------------------------------*/ void clr(void){unsigned char k,j;for(k=0;k<8;k++) //清空显示for(j=0;j<8;j++)mmm[k][j]=0;for(k=0;k<8;k++) //清空标志yy[k]=0;ms=0; //清空计时i=0;write_cmd(0x01); //清屏}char keynumber(){if((!SW1)&&(!yy[0])){delay_ms1(20);if((!SW1)&&(!yy[0])){yy[0]=1;return 1;}}if((!SW2)&&(!yy[1])){delay_ms1(20);if(!SW2){yy[1]=1;return 2;}}if((!SW3)&&(!yy[2])) {delay_ms1(20);if(!SW3){yy[2]=1;return 3;}}if((!SW4)&&(!yy[3])) {delay_ms1(20);if(!SW4){yy[3]=1;return 4;}}if((!SW5)&&(!yy[4])) {delay_ms1(20);if(!SW5){yy[4]=1;return 5;}}if((!SW6)&&(!yy[5])) {delay_ms1(20);if(!SW6){yy[5]=1;return 6;}}if((!SW7)&&(!yy[6])) {delay_ms1(20);if(!SW7){yy[6]=1;return 7;}}if((!SW8)&&(!yy[7])){delay_ms1(20);if(!SW8){yy[7]=1;return 8;}}return 0;}void dingding(int a){int k;for(k=0;k<a;k++){beep=0;delay_ms(1);beep=1;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉工程大学——课程设计报告设计题目:基于单片机八路抢答器设计系(院):电气院专业:测控技术与仪器年级 (班):09级测控02班学号:***********名:******:***2012年 12月 12日目录目录 (2)摘要 (3)一、设计任务与要求 (4)二、方案设计与论证 (4)三、硬件电路设计 (5)3.1抢答器的电路框图 (5)3.2 单元电路设 (6)3.3外部震荡电路 (6)3.4报警电路设计 (7)四、软件设计 (7)4.1系统主程序设计 (7)4.2主程序清单 (8)五、仿真过程与仿真结果 (11)5.1用到了keil软件仿真 (11)5.2 Proteus仿真 (11)5.3用DXP连接原理 (11)5.4用DXP连接PCB图 (12)六、安装与调试 (12)6.1制作PCB电路板流程 (12)6.2器件选型方案的详细清单 (12)6.3调试 (12)七、结论与心得 (14)八、参考文献 (15)摘要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。
作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。
本设计是以八路抢答为基本理念。
考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,扬声器发生提示。
同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
一、设计任务与要求1.抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S5表示。
2.设置一个系统清除和抢答控制开关S,该开关由主持人控制。
3.抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如20秒)。
当主持人启动"开始"键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00 。
二、方案设计与论证方案一:系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。
该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
方案二:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:<1>可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
<2>单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
<3> 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。
另外80C51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。
而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。
依此依据选择方案二比较适合。
抢答按扭优先编码电路锁存器译码电路译码显示主持人控制开关控制电路报警电路秒脉冲产生电路定时电路译码电路显示电路其原理框图如下:三、硬件电路设计3.1 抢答器的电路框图如图11、1所示为电路框图。
其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"开始、停止"状态开图1 抢答器电路的接口电路原理图如图1所示为电路图。
其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作“开始、停止”状态开关。
3.2 单元电路设计(1)抢答器电路参考电路如图11.2所示。
该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。
如有再次抢答需由主持人将S开关重新置,“清除”然后再进行下一次抢答。
(2)时序控制电路设计时序控制电路是抢答器设计的关键,它要完成以下功能:a.主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。
b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。
(3)复位电路的设计外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。
复位电路如下图示:3.3 外部震荡电路外部震荡电路单片机必须在AT89C51的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,外部震荡电路如下图。
3.4报警电路设计报警电路用于报警,当遇到报警信号时,发出警报。
一般喇叭是一种电感性图11.4报警电路图。
8951驱动喇叭的信号为各种频率的脉冲。
因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。
在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。
不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。
选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次*作"清除"和"开始"状态开关。
图面是数字抢答器的报警电路图。
其中555构成多谐振荡器,振荡频率fo=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。
PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。
四、软件设计4.1系统主程序设计为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。
当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。
(1)主程序流程图4.2主程序清单#include <reg52.h>/*----------------------------------------------------------- 宏定义------------------------------------------------------------*/ #define uint unsigned int#define uchar unsigned char/*----------------------------------------------------------- 共阴极数码管编码表 0 - f显示------------------------------------------------------------*/ unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*----------------------------------------------------------- 变量定义------------------------------------------------------------*/ sbit start_stop = P3^6;sbit reset = P3^7;sbit key1 = P1^0;sbit key2 = P1^1;sbit key3 = P1^2;sbit key4 = P1^3;sbit key5 = P1^4;sbit key6 = P1^5;sbit key7 = P1^6;sbit key8 = P1^7;sbit state = P3^4;sbit kaishi=P3^1;bit start_stop_flag = 0;bit key1_flag = 0;bit key2_flag = 0;bit key3_flag = 0;bit key4_flag = 0;bit key5_flag = 0;bit key6_flag = 0;bit key7_flag = 0;bit key8_flag = 0;bit reset_flag = 0;bit action = 0;bit kaishi_flag=0;uchar second = 20;uchar timer0_count = 0;uchar number = 0;uchar number_display = 0;/*----------------------------------------------------------- 延时函数------------------------------------------------------------*/ void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*----------------------------------------------------------- 数码管显示驱动函数------------------------------------------------------------*/ void display(uchar number,uchar second){uchar second_first,second_second;second_first = second / 10;second_second = second % 10;P2 = 0xfe;P0 = table[number];delay(2);P2 = 0xfd;P0 = 0x40;delay(2);P2 = 0xfb;P0 = table[second_first];delay(2);P2 = 0xf7;P0 = table[second_second];delay(2);}/*----------------------------------------------------------- 开始键扫描函数------------------------------------------------------------*/ void start_stop_keyscan(){if(start_stop == 0){delay(8);if((start_stop == 0)&&(!start_stop_flag)){start_stop_flag = 1;action = 1;TR0 = 1;state = 0;}}else{start_stop_flag = 0;}}/*----------------------------------------------------------- 八位抢答键扫描函数------------------------------------------------------------*/ uchar key_scan8(){if(key1 == 0){delay(8);if((key1 == 0)&&(!key1_flag)){key1_flag = 1;number = 1;number_display = number;}}else{key1_flag = 0;number = 0;}if(key2 == 0){delay(8);if((key2 == 0)&&(!key2_flag)){key2_flag = 1;number = 2;number_display = number;}}else{key2_flag = 0;number = 0;}if(key3 == 0){delay(8);if((key3 == 0)&&(!key3_flag)){key3_flag = 1;number = 3;number_display = number;}}else{key3_flag = 0;number = 0;}if(key4 == 0){delay(8);if((key4 == 0)&&(!key4_flag)){key4_flag = 1;number = 4;number_display = number;}}else{key4_flag = 0;number = 0;}if(key5 == 0){delay(8);if((key5 == 0)&&(!key5_flag)){key5_flag = 1;number = 5;number_display = number;}}else{key5_flag = 0;number = 0;}if(key6 == 0){delay(8);if((key6 == 0)&&(!key6_flag)){key6_flag = 1;number = 6;number_display = number;}}else{key6_flag = 0;number = 0;}if(key7 == 0){delay(8);if((key7 == 0)&&(!key7_flag)){key7_flag = 1;number = 7;number_display = number;}}else{key7_flag = 0;number = 0;}if(key8 == 0){delay(8);if((key8 == 0)&&(!key8_flag)){key8_flag = 1;number = 8;number_display = number;}}else{key8_flag = 0;number = 0;}if(number_display != 0){return 1;}else{return 0;}}/*-----------------------------------------------------------复位键扫描函数------------------------------------------------------------*/ void reset_keyscan(){if(reset == 0){delay(8);if((reset == 0)&&(!reset_flag)){ second=20;reset_flag = 1;number_display = 0;state = 1;}}else{reset_flag = 0;}}/*开机函数*/void kaishi_keyscan(){if(kaishi == 0){delay(8);if((kaishi == 0)&&(!kaishi_flag)){kaishi_flag = 1;number_display = 0;state = 1;}}else{kaishi_flag = 0;}}/*----------------------------------------------------------- 主函数------------------------------------------------------------*/ void main(){TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=0;while(1){ while((kaishi == 0)&&(!kaishi_flag)){ start_stop_keyscan();reset_keyscan();while(action){while(!key_scan8()){display(number_display,second);if(second == 0){second = 20;break;}}TR0 = 0;second = 0;display(number_display,second);action = 0;break;}display(number_display,second);}}}/*----------------------------------------------------------- 中断服务函数------------------------------------------------------------*/ void timer0() interrupt 1{TH0=0x3c;TL0=0xb0;timer0_count ++;if(timer0_count == 20){timer0_count = 0;second --;if(second == 0){TR0 = 0;number_display = 0;state = 1;action = 0;}}}五、仿真过程与仿真结果5.1 用到了keil软件仿真,界面如下:5.2 Proteus仿真6.3调试:(1) 开机按电源开关,显示屏左边的"抢答"指示灯亮,数码管显示。