简易四路抢答器.doc

上传人:1595****071 文档编号:37335315 上传时间:2022-08-30 格式:DOC 页数:24 大小:362KB
返回 下载 相关 举报
简易四路抢答器.doc_第1页
第1页 / 共24页
简易四路抢答器.doc_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《简易四路抢答器.doc》由会员分享,可在线阅读,更多相关《简易四路抢答器.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机课程设计预习报告班 级: 建电141 姓 名: 付鹏鑫 学 号: 1412032031 设计题目: 四位竞赛抢答器系统设计 设计时间: 2016. 评定成绩: 评定教师: 目录摘要2一、任务分析:3二、总体方案:42.1 可行方案52.2 方案设计5三、硬件设计:83.1 电路原理图81.AT89C51简介10简介113.RESPACK8及RX8简介.123.2 器件选择14四、软件设计:15程序处理流程154.2 程序流程图154.3 程序介绍17五、调试过程:225.1 调试步骤22六、参考文献:23 摘要:抢答器作为一种工具,已广泛应用于各自智力与知识竞赛场合。本设计是基于C52单

2、片机系统的四路抢答器。考虑到其限时回答功能,利用单片机的定时器/计数器定时和计数原理,将软件和硬件结合,使系统能准确计时,并使数码管正确的显示时间。用开关做键盘输出,扬声器做提示报警。同时系统能够实现抢答结果锁存、调整定时时长(用pcf8591实现A/D转换)以及手动复位功能。关键字:AT89C51单片机、锁存、减计时、动态显示、报警一、任务分析 设计要求以及需求分析1、设计一个四位竞赛抢答单片机系统,可同时供4 名选手或4 个代表队参加比赛,每队设置单独的抢答按钮,编号为1、2、3、4,主要的需求是通过对按钮的设置实现每个小组的抢答2、给节目主持人设置一个“抢答开始”控制开关,用来控制抢答开

3、始,主要需求是通过对抢答按钮的设置实现抢答的开始3、给节目主持人设置一个“系统清除”控制开关,用来控制系统清零主要需求是通过对系统清零按键的设置以实现系统的清除功能的实现4、抢答器具有编号锁存、抢答计分、时间显示和声响提示等功能。1)主持人按下“抢答开始”后,系统以减计时方式,显示抢答剩余时间。2)如果抢答时间计时结束,却没有选手抢答时,本次抢答无效,系统报警提示(显示单音,持续2 秒);3)抢答时间内,若有选手按动对应的抢答按钮,此对编号立即锁存,数码管上显示出队伍编号和此队累计分数,同时系统给出音响提示(显示单音,持续2 秒)。4)在主持人启动“抢答开始”键前,选手提前抢答,抢答无效,系统

4、报警提示(显示单音,持续2 秒)。主要需求是对系统报警功能实现以及对选手抢答按键和主持人按键的检测5、抢答成功后,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止,主要实现数据锁存。6、抢答器具有利用旋钮调整抢答时间功能,时间范围20 秒50 秒,主要需求是对抢答时间的准确设置 功能模块设置及其功能(1)键盘输入模块:主要是实现选手的抢答以及主持人实现系统清零和抢答开始的功能;(2)蜂鸣器报警模块:主要是实现提示和报警功能;(3)旋钮调节模块:主要是实现对选手抢答时间设置的功能,通过PCF8591进行A/D转换改变计时器初值来实现;(4)数码管显示模块:主要是实现选手抢答时间

5、的显示以及选手的组别和答题分数的设置的功能二、总体方案设计方案一:抢答器系统采用中小规模集成电路,使用按钮作为开关,完成输入信号的触发。该方案不需要软件编程,只需要硬件电路不出错就可实现需要的功能。但是电路的结构复杂,不利于调试,成本较高,实现接线的时候会因导线连接混乱造成干扰和短路等故障。方案二:采用现场可编程门列阵(FPGA)。FPGA可以给出很多逻辑单元,可以将想要实现的功能的电路应硬件语言描述出来,可以实现许多的复杂功能,比较灵活多变而在时序方面比单片机要好。但是该设计方式对数据的处理方式的速度要求不高,FPGA高速优势无法体现,同时芯片的引脚比较多,实物电路板布线复杂,加重实际焊接的

6、工作,而且从成本方面来看,较为不经济。方案三:抢答器系统由一块AT89C51单片机芯片为控制核心,通过PCF8951芯片实现电压输入模拟量的采集以及A/D转换实现向单片机数据的传输以控制减计时时间的控制,通过蜂鸣器发出报警信号,以及通过开关的闭合采集减计时、选手组好、分数和主持人输入信号的采集以在数码管上显示,性能良好,可靠性高,且成本相对较低。从成本、性能、可靠性等多方面进行对比和论证,以及基于安全、法律等因素和性价比最优原则,最终实施方案三结合课题功能指标,利用学习过的AT89C51单片机作为控制核心。同时利用独立式键盘来实现选手的抢答功能以及主持人对抢答开始和系统清零的控制,同时用8 位

7、的共阳极数码管显示队伍的编号、分数、以及减计时的时间,同时也用到了转换器PCF8951显示电路PCF8951模拟信号采集转换电路报警电路选手开关AT89C52 主持人开关系统总体框图(各组成部分的作用和特点PCF8591:通过对电压模拟信号的采集以及A/D转换,将数字量输出送给单片机来控制减计时的时间;AT89C52:处理键盘输入及控制数码管输入与报警电路显示电路:显示倒计时、抢答队伍及其分数报警电路:用于实现选手抢答和减计时结束却没有组别回答问题时的报警功能。主持人/选手开关:通过键盘控制输入C52的数据三、硬件设计电路原理图 系统整体设计图报警系统数码管显示开关按键A/D转换电路关键器件的

8、介绍:1.AT89C51简介AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大,可灵活应用于各种控制领域。主要性能参数: 与MCS-51产品指令系统完全兼容 4k字节可重擦写Flash闪速存储器 1000次擦写周期 全静态操作:0Hz24MHz 三级加密程序存储器 1288字节内部RAM 32个可编程IO口线

9、2个16位定时计数器 5个中断源 可编程串行UART通道 低功耗空闲和掉电模式2.PCF8591简介PCF8591是8位A/D和D/A转换器,是单片、单电源低功耗 8 位 CMOS 数据采集器件,具有4个模拟输入、一个输出和一个串行I2C 总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线而不需要额外硬件。器件的地址、控制和数据通过两线双向I2C总线传输。器件功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模拟转换。最大转换速率取决于I2C总线的最高速率。主要性能参数:单电源供电工作电压:2.5 V-6 V待机电流低I2C总线串行输入/

10、输出通过3个硬件地址引脚编址采样速率取决于I2C总线速度4个模拟输入可编程为单端或差分输入自动增量通道选择模拟电压范围:VSS VDD片上跟踪与保持电路8位逐次逼近式A/D转换带一个模拟输出的乘法DACA/D和D/A转换的计算公式以及输入与输出关系图时序图PCF8591的数据传送服从I2C总线协议,总线上数据信号的传送由起始信号(S)开始,由终止信号(P)结束。在SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号,起始信号表示一次数据传送的开始,其后为寻址字节,来寻址被控的从机(本设计中取为40H),在寻址字节后为其应答位。再之后,是按指定读/写的数据字节与应答位。在数据传送结束

11、以后主器件都必须发送停止信号。停止信号用在SCL为高电平期间,SDA线由低电平向高电平的变化来表示。这便是一次完整的数据传送应答时序。A/D转换的时序图3、排阻RESPACK8 及RX8电阻块RESPACK8用于P0口驱动,电流不够,加排阻增加电流RX8用于单片机IO用作低电平输入时是提供灌电流,电阻大小的确定一般都是根据你的拉电阻的选择,因为漏极输出的IO内阻相当大,等效电路的电阻即为拉电阻,拉电流就是外接电源/拉电阻,一般的TTL电平驱动电流在20ma-25ma5、独立按键的简介共有六个键盘,其中1-4组按键用于实现组别选手的抢答按键 5号按键用于实现主持人设置抢答开始 6号按键用于实现主

12、持人设置系统清零器件的选择(1)键盘的选择:由于只要实现四组抢答以及主持人使用的系统清零和抢答开始功能,故使用单独六个按键来实现功能以减少器件使用的成本,且能够实现完全的功能(2)模拟器件的选取: 为了符合设计要求的规定,A/D转换器选择了采用I2C串行通信的PCF8591(3)数码管的选取由于通过PCF8591芯片采集的模拟量信号的输入电压最大为+5V,所以八位数码管已基本满足需求,为了使P0口获得更大的驱动能力,在此选择了共阳极数码管。(4)I/O驱动能力分析: 与P1、P2、P3口相比,P0口的驱动能力较大,每位可驱动8个LSTTL输入,而P1、P2、P3口的每一位的驱动能力,只有P0口

13、的一半。当P0口的某位为高电平时,可提供400uA的电流,当P0口的某位为低电平时,可提供的灌电流。无论是P0口,还是P1、P2、P3口,想要获得较大的驱动能力,只能用低电平输出。 (5)电路结构的确定 独立的键盘作为人机接口,直接与单片机的P1口相连,单片机的P1口驱动能力相对较弱,但满足数码管驱动,用于驱动八个8段LED数码管, P3口低四位作为四个数码管的位选信号。P、P分别作为时钟线和信号线接口与PCF8591相接,用来接入蜂鸣器。四、软件设计 程序处理流程开始的时候先设置各存储器的地址以及控制字和IO口的设定减计时设置完成以后,若主持人未按下【开始抢答】按键,却有 【1组】、【2组】

14、、【3组】、【4组】中的某一组按下按键,则系统提示报警信号,发出2s的报警提示音;若主持人按下【开始抢答】按键,则进入减计时程序,此时若减计时结束,却没有组进行抢答,则系统提示报警信号,发出2s的报警提示音,然后支持人对系统设置【系统清零】,若在减计时结束之前有【1组】、【2组】、【3组】、【4组】中的某一组按下按键抢答,则在数码管上显示该组的成绩累计加分,并显示改组的组号,同时系统设置锁存,保存该组现有的得分,阻止其他组继续抢答,系统提示报警信号,发出2s的报警提示音开始程序流程图设置存储器存储地址设置时间主持人设置开始抢答减计时某组直接抢答P1.0P=0报警2S N报警2S系统清零显示组号

15、和分数加分 Y报警2S系统清零4.3 程序介绍(1)A/D转换23/-定义PCF8591的读写地址-/#define WRITEADDR 0x90 /写地址#define READADDR 0x91 /读地址/-声明全局函数-/void Pcf8591SendByte(unsigned char channel);unsigned char Pcf8591ReadByte();void Pcf8591DaConversion(unsigned char value);* 函 数 名 : Pcf8591SendByte* 函数功能 : 写入一个控制命令* 输 入 : channel(转换通道)*

16、 输 出 : 无*/void Pcf8591SendByte(unsigned char channel)I2C_Start();I2C_SendByte(WRITEADDR, 1); /发送写器件地址I2C_SendByte(0x40|channel, 0); /发送控制寄存器I2C_Stop();/* 函 数 名 : Pcf8591ReadByte* 函数功能 : 读取一个转换值* 输 入 : 无* 输 出 : dat*/unsigned char Pcf8591ReadByte()unsigned char dat;I2C_Start();I2C_SendByte(READADDR, 1

17、);/发送读器件地址dat=I2C_ReadByte(); /读取数据I2C_Stop(); /结束总线 return dat;/* 函 数 名 : Pcf8591DaConversion* 函数功能 : PCF8591的输出端输出模拟量* 输 入 : value(转换的数值)* 输 出 : 无*/void Pcf8591DaConversion(unsigned char value)I2C_Start();I2C_SendByte(WRITEADDR, 1);/发送写器件地址I2C_SendByte(0x40, 1); /开启DA写到控制寄存器I2C_SendByte(value, 0);

18、 /发送转换数值I2C_Stop();功能:PCF8591芯片通过对模拟输入电压的采集,然后对其进行A/D转换,通过信号线传给单片机已实现对减计时时间的设定思路:减计时时间的设定与PCF8591采集到的模拟量输出电压的大小有关,PCF8591可以将其采集到的模拟量信号通过A/D转换转换成数字量信号从而达到控制减计时时间的功能(2)开关检测if(start = 0 | flag = 1)ET0 = 1;flag = 1;if(m = 0)flag = 0;else if(m = 1) beep_flag = 1;if(flag1 = 0) & (flag2 = 0) &(flag3 = 0) &

19、 (flag4 = 0)/未有队伍抢答则倒计时display(0, m);if(key1 = 0 | flag1 = 1) & (flag2 = 0 & flag3 = 0 & flag4 = 0)/队伍一抢答并且其他队伍未抢答ET0 = 1;if(flag = 1)/若已开始,则有效 flag1 = 1;flag2 = 0;flag3 = 0;flag4 = 0;display(1, score1);ET0 = 0;m = m1;else/若未开始则启动蜂鸣器提醒beep_flag = 1;if(key2 = 0 | flag2 = 1) & (flag1 = 0 & flag3 = 0 &

20、 flag4 = 0) /同上ET0 = 1;if(flag = 1)flag2 = 1;flag1 = 0;flag3 = 0;flag4 = 0;display(2, score2);ET0 = 0;m = m1;elsebeep_flag = 1;if(key3 = 0 | flag3 = 1) & (flag1 = 0 & flag2 = 0 & flag4 = 0)/同上ET0 = 1;if(flag = 1)flag3 = 1;flag1 = 0;flag2 = 0;flag4 = 0;display(3, score3);ET0 = 0;m = m1;elsebeep_flag

21、= 1;if(key4 = 0 | flag4 = 1) & (flag1 = 0 & flag2 = 0 & flag3 = 0) /同上ET0 = 1;if(flag = 1)flag4 = 1;flag1 = 0;flag2 = 0;flag3 = 0;display(4, score4);ET0 = 0;m = m1;elsebeep_flag = 1;if(flag = 0)display(0,0);功能:通过按键的检测判断是否有人抢答或是主持人是否有按下按键设置抢答开始和系统清零思路:通过对按键是否闭合的检测,检测出选手抢答和主持人按键开始和系统清零,从而实现对没对抢答以后队伍的显

22、示和分数的显示,以及减计时的显示和主持人对系统的清零(3)数码管对某队抢答和分数的显示void display(unsigned char team, unsigned char m) /数码管显示程序unsigned ms,mg;ms = m / 10;mg = m % 10;if(team = 0)data = 0x00;weixuan1 = 0;weixuan2 = 1;weixuan3 = 1;weixuan4 = 1;Delay2ms();weixuan1 = 1; data = 0x00;weixuan1 = 1;weixuan2 = 0;weixuan3 = 1;weixuan4

23、 = 1;Delay2ms();weixuan2 = 1;data = tablems;weixuan1 = 1;weixuan2 = 1;weixuan3 = 0;weixuan4 = 1;Delay2ms();weixuan3 = 1;data = tablemg;weixuan1 = 1;weixuan2 = 1;weixuan3 = 1;weixuan4 = 0;Delay2ms();weixuan4 = 1;elsedata = tableteam;weixuan1 = 0;weixuan2 = 1;weixuan3 = 1;weixua n4 = 1;Delay2ms();weix

24、uan1 = 1; data = 0x40;weixuan1 = 1;weixuan2 = 0;weixuan3 = 1;weixuan4 = 1;Delay2ms();weixuan2 = 1;data = tablems;weixuan1 = 1;weixuan2 = 1;weixuan3 = 0;weixuan4 = 1;Delay2ms();weixuan3 = 1;data = tablemg;weixuan1 = 1;weixuan2 = 1;weixuan3 = 1;weixuan4 = 0;Delay2ms();weixuan4 = 1;功能:通过对每一组开关按键的检测,实现该

25、组的队伍和分数的检测思路:通过对每一组开关按键的检测,设置处数码管的位选码和段码,从而达到对该队成绩与队伍的显示(4)报警显示void Timer0_INT() interrupt 1 /中断服务函数count+;if(count=20)/count=20,计时一秒count=0;if(m != 0)m-;elsem = 0;if(beep_flag = 1)/蜂鸣器标志位为1,启动蜂鸣器beep = 1; /启动蜂鸣器beep_count-; /蜂鸣器定时自减if(beep_count = 0)beep_count = 3;beep = 0; /关蜂鸣器beep_flag = 0; /清蜂鸣

26、器标志位ET0 = 0; /关定时器m = m1; 功能:实现报警信号的发出思路:通过前面按键的检测,调用报警子程序,当主持人没有按下按键,有人抢答时,系统报警;或主持人按下开始按键,却没有人抢答时,系统报警五、调试过程本次设计过程中,原理图的绘制主要使用了Proteus软件,程序的编辑使用的是Keil uVision5 软件。课程设计的开始是对原理图进行绘制,然后则是程序的编写及调试。在程序的调试过程中我是分模块进行调试。调试步骤(1)首先通过PCF8951对电压模拟量的采集,确定是否可以实现减计时的设定,以达到对减计时确切设定; (2)然后跳入键盘检测子程序,确定哪个按键按下;i)达到报警

27、,则显示报警功能ii)主持人设置抢答开始,系统清零的检测iii)某组抢答功能的检测iv)之前按键按下后应实现的功能,在数码管上得以显示(3)设置之前的程序已调用延时功能,检查是否达到准确延时的功能“Debug”下“Step”或用快捷方式()进行单步(进子程序)调试;通过对每个子程序的检验确定是否达到准确功能的实现,然后将所有子程序放在一起联调,从而确定是否对功能的完全实现六、参考文献1孙卫喜. 单片机在C语言串口通信中的应用解析J. 计算机技术与发展,2016,(07):160-163.2周国运. 单片机C语言教学探索J. 计算机教育,2009,(22):63-65.3张毅刚.单片机原理及应用M.北京:高等教育出版社,20164康丽洁.基于单片机的8路抢答器简单设计J.信息系统工程,2010,(2):78-80

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁