基于AT89C51单片机多人抢答器设计说明书(无仿真)

来源:加拿大移民 发布时间:2021-01-05 点击:

单位代码 学  号 分 类 号 密 级 单片机课程设计 基于AT89C51单片机的多人抢答器设计 学 院 名 称:
工 学 院 专 业 名 称:
机械设计制造及其自动化 学 生 姓 名:
学 生 学 号:
指 导 老 师:
2014 年 X 月 X 日 摘 要 随着社会的不断进步,电子技术也飞速的向前发展.特别是大规模集成电路的发展,把我们带进了电子化时代。电子产品的日益增多,也让我们的生活越来越方便。特别是计算机的发展,真可谓是突飞猛进。自从1946年世界上第一台计算机的诞生以来,还不到六十年的时间,计算机就取得了举世瞩目的成绩。特别是在通信领域,实现了信息一体化的时代。作为大学生的我们,更需要加强实践能力的培养。课程设计在一定程度上反映了我们对理论知识的理解程度,是理论与实践的桥梁。它不仅能锻炼我们的动手能力,而且能够培养我们对问题的思考能力以及对知识的进一步了解。当你能把你所学到知识化作为现实的东西时,我们能力就提升到一个新台阶。

抢答器是为智力竞赛参赛者答题时进行抢答而设计的一种优先判决器电路,广泛应用于各种知识竞赛、文娱活动等场合。能够实现抢答器功能的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式,但这种方式制作过程复杂,而且准确性与可靠性不高,成品面积大,安装、维护困难。本节介绍一种利用51单片机作为核心部件进行逻辑控制及信号产生的八路抢答器。近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋扩大,特别是工业测控、尖端武器和日用家电等领域更是因为有了单片机而生辉增色。单片机应用技术已成为一项新的工程应用技术。本次课程设计我们做的是八路抢答器,我们采用STC89C51单片机实现抢答功能,性能更稳定,更易操作调试。

关键词:多路数字抢答器 STC89C51 PROTEUS 目 录 1 绪论………………………………………………………..………………..………….….1 2 系统设计内容……………………………………………………………………..……....2 2.1 设计依据………………..……………………..……………………………..….…..2 2.2 设计目的……………….…….…………………………………………...…….…...2 3 硬件设计…………………………...……………………………….……….………….....4 3.1 系统工作介绍………………………………………………………………….…....4 3.2 抢答器原理…………………………………………………………………….…....5 3.3 功能模块电路…………………………………………………………………..…...6 3.3.1 开始抢答电路…………………………………………………………..…...6 3.3.2 选手抢答键……………………………………………………………..…...6 3.3.3 显示器与现实驱动电路……………………………. …………………..….7 3.3.4 蜂鸣音频输出电路…………………………………....................……….....7 4 软件设计………………………………………………………………..…..…………… .8 4.1 程序设计………………..……………………………………………………… …..8 4.1.1 系统流程图………………….……………………………………….……...8 4.1.2 显示抢答器违规流程图……….…………………………….……………...9 4.1.2 抢答器成功流程图……….…………………………………………….…...9 5 Proteus仿真………………………………………………………………………....10 结论…………………………………………………………………………………11 致谢…………………………………………………………………………………12 参考文献…………………………………………………………………………..13 附录.................................................................................................14 附录A…………………………………………………………………….……14 附录B…………………………………………………………………….……23 1 绪 论 单片机作为计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。对于计算机专业的学生来说,即使暂时没有从事单片机的应用与开发,学习单片机也有很重要的意义。学习它,不仅为将来可能从事该方面的开发打下基础,另一方面,由于单片机作为微型计算机的一个种类,麻雀虽小,五脏俱全,可以把它当作微型计算机的一个简化模型来看待,学习单片机可以加深对微型计算机工作原理的理解,更加清楚计算机的脉络。同时,提供了一个实际应用手段。21世纪,是一个信息技术飞速发展的时代,智力竞赛是一种形式比较活泼的教育方式,是人们休闲娱乐生活的一部分。这些竞赛一方面充实了人们的娱乐生活,另一方面也提高了人们努力汲取相关领域的知识的兴趣。智力竞赛,也就是几个参赛选手之间在规定的时间,规定的地点相互竞争的比赛。

抢答是各种竞赛常用的一种形式。在抢答赛中,往往要有主持人宣布抢答的开始,还要确定是哪个选手抢到了答题权,具体答题的时间有时也要设定。这些如果仅凭主持人的主观判断,很容易出现误判的情况。因此,在竞赛中,抢答器就扮演了一个非常重要的角色。

2 系统设计内容 2.1系统设计依据 抢答器由计数器、寄存器、集成定时器和译码显示等组合、时序电路组成。可分为抢答电路,定时电路,报警电路等几个单元部分。每个单元电路分别可以处理一些抢答竞赛中的基本问题。

本次课程设计设计的是一个多路定时抢答器,是一个多于两位选手参赛的一个抢答器,具有锁存和显示功能。同时有主持人控制系统的清零和抢答的开始。抢答开始后,若有任何一名选手按动抢答按钮,抢答器就会显示该选手编号直至系统被主持人清零,并有扬声器发出提示,同时其他人再抢答就无效了。这次设计的抢答器还有自动定时功能,主持人可以设定选手答题的时间。当主持人启动“开始”键后,定时器会自动减计时,这个会显示在显示器上。选手只有在抢答时间内抢答才有效,若在答题时间内没有选手答题,时间到时,报警电路就会发出警报亮灯并且禁止抢答。

2.2 设计目的 以单片机为核心,设计一个8位竞赛抢答器。

1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0-S7表示。

2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。

3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。

4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30s等)。当主持人启动“开始”按键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续时间为0.5s左右。

5)参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止。

6)如果定时时间到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00 3 硬件设计 3.1 系统工作介绍 本系统采用单片机作为整个控制核心。控制系统主要由:显示模块、控制模块、报警模块、抢答模块组成。工作时,该系统通过矩阵键盘输入抢答信号,经单片机的处理后,输出控制信号,利用一个4位数码管来完成显示功能并伴随蜂鸣器报警,用按键来让选手进行抢答,在数码管上显示哪一组先答题,从而实现整个抢答过程。

当主持人按下开始键时,向单片机P3.2引脚输入一个低电平信号,表示整个电路开始工作,此时数码管前两位显示选手编号(无人抢答显示00),后两位显示倒计时剩余时间。若在25秒内仍然无人抢答,蜂鸣器在最后5秒发出连续报警,提示抢答时间快要结束;
若在30秒内有人抢答,并且抢答成功,则将选手编号显示在数码管前两位上,后两位显示抢答剩余时间,同时蜂鸣器发出一声报警,提示其他没有抢答的选手此题已被人抢答成功。若在抢答过程中遇见特殊情况,主持人则可以通过时间加,时间减按键来进行时间调节。若要开始新的一轮抢答,主持人按下复位键再按开始键即可。

此次用单片机控制的抢答器思路简单明了,可操作性强,可靠性高,扩展功能强,能够完全实现普通抢答器的基本功能。

图2-1 单片机抢答器设计方案 3.2 抢答器原理 抢答器的工作原理是采用单片机最小系统,用程序查询方式采用动态显示组号。主持人按下开始抢答键才可以抢答。主持人没有按下开始抢答按纽(P3.0),有人抢答则抢答违规,报警并显示组号,主持人按下开始抢答开关重新抢答。主持人按下开始抢答按纽(P3.0),蜂鸣响声提示,数码管30秒倒计时抢答,蜂鸣器响声提示并显示他的组号,30秒内有人抢答则开始60秒倒计时(60秒内必须回答完问题),最后五秒倒计时警报。单片机最小系统、抢答按键模块(四位并行数码显示)、显示模块、显示驱动模块、抢答开关模块、蜂鸣器音频输出模块。

图2.3抢答器总原理图 3.3 功能模块电路 3.3.1开始抢答电路 在此次课程设计电路中当一个问题结束主持人后按下复位开关后进行下一题的准备。

图2.4.1开始抢答电路 3.3.2 选手抢答键 89C51的P1口做一个为选手抢答的输入按键引脚,P1.0至P1.7轮流输出低电位,给每一个选手编号1至8,当选手按下按钮时,P1口个端口的电平变化从P1口输入,经单片机处理后从P0输出由数码管显示抢答者编号 图2.4.2 选手抢答电路 3.3.3 显示与显示驱动电路 此电路包括显示和驱动,显示采用数码管,驱动用P2口, 违规者编号、抢答30秒倒计时、正常抢答者编号和回答问题时间60秒倒计时,数码管采用动态显示。驱动电路P2口,查询显示程序利用P0口做段选码口输出P2低3位做位选码输出,当为低电平则能驱动数码管使其显示数字。在+5V电压下接1k的电阻,保证正常压降。

图2.4.3 示与显示驱动电路 3.3.4 蜂鸣器音频输出电路 通过控制不同频率的矩形脉冲来控制蜂鸣器发声。此次课程设计中只需要一些简单的提示声音和稍微显眼的灯控,有抢答违规,开始抢答,抢答时间结束和回答时间到得提示声和亮灯提醒。

图2.3.4蜂鸣器音频输出电路 4 软件设计 4.1 程序设计 4.1.1 系统流程图 开 始 初始化 读键盘是否有键按下 中断条件是否满足 调用显示抢答违 规并报警子程序 进入中断程序 开中断并响声提示 设定定时器值 并启动定时器 30秒抢答时间并显示 并显示 调用读键子程序为延时程序 是否有键按下 60秒到中断返回 调用抢答者获得的回答问题子程序 4.1.2 显示抢答违规流程图 开 始 报警一直提示 显示违规者编号 4.1.3 抢答成功流程图 开 始 响声提示 设置定时器初值并启动 显示抢答者后30秒倒计时 60秒答问题时间到并响声提示 RET 5 proteus仿真 软件的设计与调试实行分模块实现的方法。本设计软件调试中的分模块包括显示功能模块,调整时间功能模块,抢答功能模块以及报警功能模块。各个独立模块功能调试成功后,将这些模块程序通过主程序合并在一起,最后再对合并后的总程序进行调试。各软件模块首先要通过PC和仿真器进行软件调试,当仿真效果符合要求后在烧写进单片机看是否在实际电路板上正常工作。本设计通过利用Proteus仿真,将所编写的程序用wave软件编译,所仿真原理图见下图。

图5 proteus仿真图 结 论 自接触单片机以来,一直觉得单片机非常难,这次的课程设计我开始是以老师布置题目为主要选择对象的,但是后面发现,像八路抢答器在我脑海中根本没得一点意象,上网搜了很多资料,也感觉不怎么很懂,于是问老师怎么弄,后面发现老师的意见和我的原本的程序和图只有几个地方不同,于是便将两者综合了一下,经调试和运行后,发现还行的通,于是便开始了忐忑的正文模版之路,以为快搞完了,后面发现其实程序和图还是要细细的弄懂才能写好报告,于是我又将程序和图细细的剖析了一遍,慢慢的画出流程图,然后慢慢将流程图和proteus图画好和截取下来,经过最近这段时间的在电脑前面的驻守,觉得只要自己肯付出和努力,发现其实很多的东西不是那么难懂的,以后还是要好好提升自己的动手能力和独立思考的能力。

致 谢 值此论文完成之际,谨向所有曾给予我帮助和指导的老师、同学和朋友们致以衷心的感谢!首先,我要感谢朱煜钰老师,从这篇论文的基本思想到程序的实现,他们都给了我们极大的帮助和鼓励。感谢给我们授课的各位老师,是你们用渊博的知识教育了我们,正是你们的教育,我们才能顺利完成这篇文章。在此,让我们向你们表示深深的谢意。感谢黄河科技学院学院的各位领导,是你们的教育和培养,才使我们都能够顺利完成学业,同时我门、们要感谢这四年来一起学习的同学,在论文的完成过程中得到了大家的建议和帮助,在这里衷心的感谢他们。

借此机会,我也向一直默默支持和关心我们的父母和好友们表示感谢,祝他们身体健康。

参考文献 [1] 康华光,邹寿彬编.电子技术基础数字部分(第四版)[M].北京:高等教育出版社,2005 [2] 谢自美编.电子线路设计·实验·测试 (第二版) [M].上海:电子工业出版社,2001 [3] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1999年 [4] 陆坤,奚大顺,李之权等,电子设计技术[M].成都:电子科技大学出版社1997年[5] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1999年 [5] 胡学海.单片机原理及应用系统设计[M].北京:京电子工业出版社,2005年 [6] 林凌,李刚,丁茹,李小霞.新型单片机接口器件与技术[M].西安:西安电子科技大学出版社,2005年 [7] 李朝青主编,《单片机原理与接口技术》.北京航天航空大学出版社,1994年 [8] 何立民主编,《单片机应用与设计》.北京航天航空大学出版社,1990年 [9] 邹逢兴编著,《计算机硬件技术基础实验教程》高等教育出版社,1994年 [10] 裴亚男,付智辉主编,《数字逻辑》,西南交通大学出版社,2005年 [11] 李海主编,《74系列芯片手册》, 重庆大学出版社, 1999年 附录 A (源程序)
主程序:
void main() { init(); if(k==0) //主持人按下开始键 { Timer(); delay(10); while(!k); while(1) { dis(); m=0; n=0; if(second==10){beep=1;delay(500);beep=0;} if(second==0) { TR0=0;n=1; if(k==0) {beep=1;delay(500);beep=0;second=29;TR0=1;m=1;} } if(n==0) { if(k1==0) {delay(5);if(k1==0);while(!k1);t=1;} else if(k2==0) {delay(5);if(k2==0);while(!k2);t=2;} else if(k3==0) {delay(5);if(k3==0);while(!k2);t=3;} else if(k4==0) {delay(5);if(k4==0);while(!k2);t=4;} else if(k5==0) {delay(5);if(k5==0);while(!k2);t=5;} else if(k6==0) {delay(5);if(k6==0);while(!k2);t=6;} else if(k7==0) {delay(5);if(k7==0);while(!k2);t=7;} else if(k8==0) {delay(5);if(k8==0);while(!k2);t=8;} else if(k==0) {delay(5);if(k==0);while(!k);t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;} } while(t) { if(m==0) //开关,保证程序只执行一次 { switch(t) { case 1: { TR0=0;i=1;second=0;beep=1;delay(500);beep=0; a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case 2: { TR0=0;i=2;second=0;beep=1;delay(500);beep=0; a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case 3: { TR0=0;i=3;second=0;beep=1;delay(500);beep=0; a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case 4: { TR0=0;i=4;second=0;beep=1;delay(500);beep=0; a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case 5: { TR0=0;i=5;second=0;beep=1;delay(500);beep=0; a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;break; } case 6: { TR0=0;i=6;second=0;beep=1;delay(500);beep=0; a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;break; } case 7: { TR0=0;i=7;second=0;beep=1;delay(500);beep=0; a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;break; } case 8: { TR0=0;i=8;second=0;beep=1;delay(500);beep=0; a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;break; } } } if(a1==0) //选手1的分数 { second=score1; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score1+=1;if(score1==99)score1=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score1-=1;if(score1==0)score1=60;} dis(); } else if(a2==0) { second=score2; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score2+=1;if(score2==99)score2=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score2-=1;if(score2==0)score2=60;} dis(); } else if(a3==0) { second=score3; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score3+=1;if(score3==99)score3=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score3-=1;if(score3==0)score3=60;} second=score3; dis(); } else if(a4==0) { second=score4; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score4+=1;if(score4==99)score4=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score4-=1;if(score4==0)score4=60;} second=score4; dis(); } else if(a5==0) { second=score5; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score5+=1;if(score5==99)score5=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score5-=1;if(score5==0)score5=60;} second=score5; dis(); } else if(a6==0) { second=score6; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score6+=1;if(score6==99)score6=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score6-=1;if(score6==0)score6=60;} second=score6; dis(); } else if(a7==0) { second=score7; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score7+=1;if(score7==99)score7=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score7-=1;if(score7==0)score7=60;} second=score7; dis(); } else if(a8==0) { second=score8; dis(); if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score8+=1;if(score8==99)score8=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score8-=1;if(score8==0)score8=60;} second=score8; dis(); } if(k==0){i=0;t=0;second=29;beep=1;delay(500);beep=0;TR0=1;} while(!k); } } } } 定时器子程序:
void Timer() { TMOD|=0x01; TH0=0xd8; //初值55536,计数10000次,每次1US,总计10ms TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时 void tim(void) interrupt 1 using 1 //为定时中断TR0 { TH0=0xd8; //重新赋值 TL0=0xf0; count++; if(count==100) //100*10ms=1秒 { count=0; second--; //秒减1 } } 延时子程序:
void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 显示子程序:
void display (uchar shiwei,gewei,xuanshou) //显示函数 { P2=0xfe; //打开显示时间十位的位选 P0=shiwei;//显示十位 delay(5); P2=0xfd; //个位位选 P0=gewei; delay(5); P2=0xf7; //选手位选 P0=xuanshou; delay(5); } 附录 B (抢答器原理图)

推荐访问:
上一篇:三年级期末数学试卷AB合卷2020.1
下一篇:语文s版一年级下册语文识字一第2课《合在一起成新字》课时练习C卷

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有