八路抢答器课程设计说明书-.doc

上传人:教**** 文档编号:88285633 上传时间:2023-04-24 格式:DOC 页数:35 大小:3.45MB
返回 下载 相关 举报
八路抢答器课程设计说明书-.doc_第1页
第1页 / 共35页
八路抢答器课程设计说明书-.doc_第2页
第2页 / 共35页
点击查看更多>>
资源描述

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

1、 单片机课程设计 题 目: 八路抢答器 院 别: 机电学院 专 业: 机电工程 摘 要本课程设计主要由硬件部分和软件部分组成。硬件部分中,STC89C52是核心,时钟电路、复位电路、显示电路以及电源电路等为辅助部分;软件部分是用汇编语言编程,用Keil软件来编译、调试的。本设计是以八路抢答为基本理念。将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,蜂鸣器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,抢答限定时间为30s和回答问题的时间为10s;可以显示是哪位选手有效抢答;抢答时间和回答问题时间倒记时显示,倒计时时间到蜂鸣器将

2、响起提醒主持人;按键锁定,在有效状态下,按键无效非法。 关键词单片机;数码管;抢答器;八路抢答器目 录前言1一、系统的主要功能、作用以及主要技术性能指标21.1系统主要功能21.2作用21.3主要技术性能指标2二、总体设计32.1系统整体方案设计32.2工作原理32.3组成原理框图4三、系统设计53.1接口电路设计53.2程序设计93.3硬件调试143.4 KeiL调试153.5开发板调试15四、设计总结16参考文献16附录17 前言目前,抢答器已经作为一种必不可少的工具广泛应用于各种智力和知识竞赛场合,但一般的抢答器可靠性低,使用寿命短,介于这些不方便因素,此次设计提出了用STC89C52单

3、片机为核心控制元件,设计一个简易的八路抢答器。本次设计的系统实用性强、判断精确、操作简单。在学习了数字电子技术和单片机原理及应用这两门课程之后,该课程设计加深对理论知识的理解,学习理论知识在实际中的应用,培养动手能力和解决问题的能力。熟悉Keil及Ptoteus软件的调试和仿真。通过实践提高对数字电路、单片机的认识。启发我们的思维,锻炼团结互助的精神。一、系统的主要功能、作用以及主要技术性能指标1.1系统主要功能1.1.1抢答功能 当主持人按下开始抢答按键后,八路按键中任一路按键首先按下都将闭锁其他各路按键,抢答成功,通过单片机程序处理后在数码管上显示抢答者的分组号。1.1.2限时抢答 设定抢

4、答时间 30s(可调整),当主持人按下抢答按键后,30s 内抢答有效,抢答时间已过,报警并封锁各路按键,抢答无效。1.1.3限时答题 设定答题时间 10s(可调整),当抢答者按下答题按键后开始倒计时,数码管显示剩余时间,剩余时间为 0 则发出报警信号。1.1.4显示功能 在数码管上可显示抢答时间倒计时、 答题倒计时及抢答成功者的分组号。1.2作用抢答器是一个机关学校开展智力竞赛活动必不可少的设备,其广泛应用于学校、教育部门、企业事业工会组织、俱乐部等单位组织举办各种知识、技术竞赛及文娱活动时作抢答工具使用。1.3主要技术性能指标(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0S7

5、表示。(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。(3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动开始答题键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间1秒。(5)参赛选手在设定的时间内进行抢答,抢答有效,显示器上显示选手的编号和答题的时间,并保持到主持人将系统清除为止。二、总体设计2.1系统整体方案设计该抢答器以STC89C52单片机为控

6、制核心,其他外围电路包括复位电路、时钟电路、报警电路、LED显示电路、抢答按键等。利用C语言编程,使其实现复位、定时和报警的功能。通过按键扫描输出按键信息,并通过单片机将它转化为在七段数码上显示的字符型。单片机的P1口为8组抢答按键的输入口,P0.0P0.7为双位数码管的段选口,P2.0P2.7为一位数码管的段选口,P3.0P3.1为双位数码管的位选口,P3.2为一位数码管的位选口。P3.7和P3.4分别实现时间调整的加1和减1功能;P3.6为报警电路的控制口。2.2工作原理接通电源后,主持人将系统复位清零,抢答器处于禁止状态,编号显示为零,定时器显示设定时间“30”秒;主持人按下“开始按钮,

7、宣布开始,抢答器开始工作。双位数码管“30”秒开始倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,单位数码管显示抢答选手编号,双位数码管显示回答时间“10”秒,并禁止二次抢答。主持人按下回答倒计时“开始”,双位数码管开始“10”秒倒计时,倒计时时间到,蜂鸣器发出报警信号,主持人停止选手答题并按下“复位”按键停止系统工作。如果再次抢答必须由主持人再次操作“开始”状态开关。2.3组成原理框图图2.3.1组成原理框图三、系统设计3.1接口电路设计3.1.1时钟电路设计MCS- 51的时钟可以由两种方式产生, 一种是内部方式,

8、利用芯片内部的振荡电路; 另外一种为外部方式. 本论文根据实际需要和简便, 采用内部振荡方式. MCS- 51内部有一个用于构成振荡器的高增益反相放大器, 引脚 XTAL1 和 XTAL2 分别是此放大器的输入端和输出端. 这个放大器与作为反馈元件的片外晶体或陶瓷谐振器一起构成一个自激振荡器.MCS- 51 虽然有内部振荡电路, 但要形成时钟, 必须外接元件所以实际构成的振荡时钟电路.外接晶体以及电容 C1 和 C2 构成并联谐振电路接在放大器的反馈回路中,对接电容的值虽然没有严格的要求, 但电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性。晶体频率可在1. 2MH

9、z 12MHz 之间任选, 电容C1和 C2 的典型值在 20pF 100pF 之间选择, 考虑到本系统对于外接晶体的频率稳定性要求不高, 所以采取比较廉价的 11.0592MH晶振, 根据调试电容选择 30pF。如图3.1.1所示图3.1.1晶振电路图3.1.2独立式按键键盘设计键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独

10、立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。 独立式按键键盘:用于输入高低电平,八位选手抢答时高低电平发生变化,如图3.1.2所示。图3.1.2独立按键接线图3.1.3数码管显示部分设计 LED动态显示是单片机中应用最为广泛的一种显示方式,其接口电路是把所有显示器的8个笔划段a-dp 同名端并联在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制,CPU的字段输出口送出字形码时,所有显示器由于同名端并连接收到相同的字形码,但究竟哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以

11、就可以自行决定何时显示哪一位了,在轮流点亮扫描过程中,每位显示器的点亮时间表是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉将就尽管实际上各位显示器并非间时点亮,但只要扫描速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。抢答器倒计时显示电路:有一个双位数码管和一个单位数码管组成,双位数码管显示30s倒计时,单位数码管显示成功抢答选手编号,如图3.1.3所示。图3.1.3选手抢答成功显示号码图3.1.4蜂鸣器电路设计利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的巨型波,接上喇叭就能发出一定频率的声音,单片机通过内部定时器的操作实现交替变换的波形

12、输出驱动扬声器发声,有选手抢答成功,使蜂鸣器发出声音,如图3.1.4所示。图3.1.4蜂鸣器接线电路图根据上述对抢答器系统各个部分的电路设计,设计的完整系统电路图如图 3.1.5所示:图3.1.5完整系统仿真电路图3.2程序设计系统程序分为主程序、子程序两部分 开始设置定时方式程序初始化倒计时设置显示程序设计置赋值初值键盘扫描程序序中断位设置标志位设置等待中断 返回3.2.1 主程序 图3.2.1 主程序流程框图主程序是系统上电或复位后首先要执行的程序,主程序主要完成系统的初始化、扫描显示、扫描键盘等工作。程序流程如图3.2.1所示,对单片机进行初始化,包括设置堆栈、倒计时30S设置、定时器T

13、0设置,外部中断设置,键盘扫描设置,初始化状态时显示00。开始程序初始化按键按下显示相应内容程序开始倒计时键盘扫描程序等待中断返回3.2.2 倒计时30s子程序图3.2.2 定时器T0中断子程序框图当程序开始进入这个子程序,开始进行初始化,然后进行倒计时的设置,设置为30S倒计时,等待主持人按下“开始”键。开始倒计时,检测有没有键按下,若有,单位数码管显示号码,双位数码管显示“10”秒;若没有,继续倒计时并显示,倒计时计完为止,中断退出,返回到中断入口处。开始程序初始化按键按下显示相应号码与倒计时时间键盘扫描程序序序返回键盘扫描程序按键按下倒计时开始等待中断3.2.3倒计时10s子程序图3.2

14、.3 倒计时10s子程序框图当程序开始进入这个子程序,开始进行初始化,然后进行倒计时的设置,设置为10S倒计时,等待主持人按下“开始”键。开始倒计时,倒计时时间到,中断退出,返回到中断入口处。开始程序初始化键盘扫描程序返回译码电路显示号码及时间优先编码电路等待中断是否有选手按键按下3.2.5 选手按键程序图3.2.5 键盘扫描程序框图键盘扫描时先判断是否允许扫描,是的话允许键盘扫描,否的话即不允许键盘扫描。不允许扫描就返回调用,结束该程序。允许扫描时开始扫描P1口看有没有选手按下答题键,按下时此口变为低电平0,如果没有选手按键,则继续扫描,倒计时30秒结束后无键按下,则结束此循环,等待主持人重

15、新按下“开始”键才重新开始循环。开始选手号码在数码管1显示出来键盘扫描程序序序返回倒计时开始等待中断是否有按键按下倒计时在数码管2显示出来3.2.6 数码管显示程序 图3.2.6 显示子程序框图进入显示子程序先把选手的号码显示于单位数码管,然后是选手的答题时间十秒钟倒计时显示在双位数码管,个位显示在双位数码管的第一位上,十位显示在双位数码管的第二位上,同时等待倒计时开始,若开始数码管上显示的数字则开始进行减计算,进行倒计时至到结束或等待中断。 3.3硬件调试硬件调试的调试比较困难。因为是调试所以先不能对元件进行焊接,只能把各个元件用导线连接起来。调试的整体过程是:各个系统逐个调试,各部分调试成

16、功后再进行组装后的整体调试。调试过程包括:1. 显示部分的调试问题:数码管的显示不稳定,不停的闪烁。分析:没有考虑到干扰及环境的制约。解决方案:采用电容滤波尽可能去除纹波和干扰。2. 显示部分的调试问题:数码管显示数据不齐全分析:程序编制存在问题。解决方案:使用程序编制软件KeiL与仿真软件Protues进行程序的检查与仿真。3. 控制部分的调试问题:按下电源按键后电路无任何反应。分析:焊接电路可能存在短路。解决方案:使用万用表检测,发现短路部分,使用烙铁使短路部分断开。4. 控制部分的调试问题:按下电源按键后数据显示有时正常有时又不正常。分析:按键接触不良。解决方案:使用万用表检测,发现按键

17、按下后不稳定,更换质量更好的按键。5. 声音部分的调试问题:按下电源按键后,蜂鸣器在程序的运行下无反应。分析:蜂鸣器焊接不良或正负极接反。解决方案:检查蜂鸣器的焊接,若焊接不良或正负极接反将其焊接正常。 3.4 KeiL调试启动Keil软件,选择“Project”菜单下的“New Project”命令,输入项目的文件名,选择存储路径,点击“保存”按钮。在“Select Device”窗口中选择“Atmel”下的“STC89C52” 芯片,单击“确定”按钮。展开“Project Workspace”窗口中的“Target 1”, 右击 “Target 1”,选择“Options for Targ

18、et Target 1”,选择“Target”选项在Keil (MHZ)右边输入“12m”。选择“Debug”选项,选择“Use Keil Monitor-51 Driver”。单击“Settings”按钮,串口选择“COM1”,波特率选择“38400”,单击“OK”按钮。右击“Source Group 1”,选择“Add files to Group Source Group 1,在文件类型中选择“Asm Source file”,找到将要编译的程序,单击 “ADD”按钮,然后再单击“CLOSE”按钮。单击“Rebuild all target files”,在“Build”窗口中观察编译结

19、果,根据提示修改程序,直到没有错误出现。3.5开发板调试根据程序的设计在开发板上分别连接好各个端口的连接线,用串口线把计算机和试验箱的仿真头连接好。单击Keil软件上的“Start/Stop Debug Session”按钮,再单击“RUN”按钮,运行程序。观察试验箱上出现的效果,分析程序的对错,直到调试出正确的结果。图4.3开发板四、设计总结单片机课程设计是学习单片机的一个重要环节。本次课程设计加深了我们对所学理论知识的理解,并能将其熟练应用,做到理论与实际相结合。我们小组此次的课题是八路抢答器。针对八路抢答器,我们小组通过上网查阅各种类似的设计,查找相关的知识,确定基本设计方案,通过仿真验

20、证方案的可行性,并根据我们所设计好的电路到赛格电子商城去购买原材料。采购完原材料后,我们就要开始根据我们的电路进行电路板的焊接。电路的焊接考虑的方面很多,不仅要注意到元件的排版,还要考虑元件的正负极以及各个引脚的含义。在小组的通力合作下,我们很快的就把电路焊接好,接下来的任务就是将写好的程序下载到芯片中了。按键电路的设计是本设计任务的一个难点,一点要注意考虑按键的“抖动”效应。根据实际情况,选用独立式键盘并采用“软件”的方式来消除按键的“抖动”效应。通过这次课程设计,我们明白学习是一个不断积累的过程,在工作、生活中都应该不断地学习,努力的提高自己的知识和综合素质。知识必须通过应用才能实现其价值

21、。有些东西以为学会了,但真正到用的时候才是真的学会了。这次的课程设计是累并快乐着,此次课程设计让我们学到了很多课内学不到的东西,比如独立思考解决问题,出现差错时的随机应变能力以及与人合作共同提高的能力,都让我们受益匪浅。总体来说,通过这次课程设计学习,让我们对各种电路都有了大概的了解,也学会了常用绘图软件的使用,在平时的理论学习中遇到的问题都一一解决,加深了我们对专业的了解,为以后的学习打下了好的开端。参考文献1、徐爱钧主编 单片机原理实用教程 电子工业出版社2、阎石主编 数字电子技术基本教程 清华大学出版社3、郭天祥主编 51单片机C语言教程 电子工业出版社附录311、C语言编码程序如下/*

22、单片机课程八路抢答器c语言程序设计*/#include #define uchar unsigned char#define uint unsigned intsbit wela1=P30; /定义倒计时位选sbit wela2=P31;sbit wela_hao=P32; /定义号码位选sbit set=P33; /定义号码时间设置按键sbit answer=P34; /定义回答倒计时开始sbit clear=P35; /定义系统清除位sbit buzzer=P36; /定义蜂鸣器sbit host=P37; /定义开始位sbit key1=P10; /定义按键sbit key2=P11;

23、sbit key3=P12;sbit key4=P13;sbit key5=P14;sbit key6=P15;sbit key7=P16;sbit key8=P17;uchar hao,shu,shu1,shu2,shi,ge,t0,t1,start,flag;int jia;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void init();/*初始函数申明*/void display(uchar shi,uchar ge,uchar hao

24、);void delay(uint z);void keyscan1();void keyscan();void main() init(); while(1) buzzer=0; display(shi,ge,hao); if(set=0) delay(5);if(set=0) jia=-jia; TR0=0; TR1=0; buzzer=1; delay(10); while(!set); buzzer=0; if(jia0) display(shi,ge,hao); buzzer=0; if(host=0)/主持人 delay(5); if(host=0) flag=1; start=1

25、; buzzer=1; delay(5); while(!host); if(clear=0)/系统清除 delay(5); if(clear=0) TR0=0; TR1=0; shu1=10; shu=shu2; hao=0; delay(5); start=3; buzzer=1; delay(5); while(!clear); TR0=0; /给0关闭倒计时30s程序 TR1=0; /给0关闭倒计时10s程序 shi=0; ge=0; if(flag=1) if(start=0)/选手按下,显示倒计时10秒 wela1=1; wela2=1; delay(1);TR0=0; displ

26、ay(shi,ge,hao); delay(1); if(answer=0) delay(5); if(answer=0) TR0=0; TR1=1; buzzer=1; delay(5); while(!answer); if(start=1)/主持人按下,抢答倒计时30秒 wela1=1; wela2=1; delay(1); TR0=1; TR1=0; display(shi,ge,hao); delay(1); keyscan(); void init()/*初始化*/ wela1=1; /关掉倒计时位选 wela2=1; shi=0; ge=0; t0=0; t1=0; flag=0

27、; shu=30; /抢答倒计时时间 shu1=10; /回答倒计时时间 shu2=30; wela_hao=0; hao=0; jia=1; buzzer=0; TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=0; TR1=0;void display(uchar shi,uchar ge,uchar hao)/*数码管动态扫描*/ P0=tableshi; wela1=1; wela2=

28、0; delay(5); P0=tablege; wela1=0; wela2=1; delay(5); wela_hao=0; P2=tablehao; delay(5);void keyscan1() if(host=0) delay(5);if(host=0) shu=shu+1; shu2=shu; buzzer=1; delay(5); while(!host); buzzer=0; if(answer=0) delay(5);if(answer=0) shu=shu-1; shu2=shu; buzzer=1; delay(5); while(!answer); buzzer=0;

29、 void keyscan()/*按键扫描函数*/ if(key1=0) delay(5);if(key1=0) hao=1; P2=tablehao; start=0; TR0=0; shi=1; ge=0; TR0=0; buzzer=1; delay(5); while(!key1); if(key2=0) delay(5);if(key2=0) hao=2; P2=tablehao; start=0; TR0=0; shi=1; ge=0; buzzer=1; delay(5); while(!key2); if(key3=0) delay(5);if(key3=0) hao=3; P

30、2=tablehao; start=0; TR0=0; shi=1; ge=0; buzzer=1; delay(5); while(!key3); if(key4=0) delay(5);if(key4=0) hao=4; P2=tablehao; start=0; TR0=0; shi=1; ge=0; buzzer=1; delay(5); while(!key4); if(key5=0) delay(5);if(key5=0) hao=5; P2=tablehao; start=0; TR0=0; shi=1; ge=0; buzzer=1; delay(5); while(!key5

31、); if(key6=0) delay(5);if(key6=0) hao=6; P2=tablehao; start=0; TR0=0; shi=1; ge=0; buzzer=1; delay(5); while(!key6); if(key7=0) delay(5);if(key7=0) hao=7; P2=tablehao; TR0=0; shi=1; ge=0; start=0; buzzer=1; delay(5); while(!key7); if(key8=0) delay(5);if(key8=0) hao=8; P2=tablehao; TR0=0; shi=1; ge=0

32、; start=0; buzzer=1; delay(5); while(!key8); void delay(uint z)/*延时函数*/ uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void time0() interrupt 1/*定时器0*/ TH0=(65536-50000)/256; TL0=(65536-50000)%256; shi=shu/10; ge=shu%10; t0+; if(t0=20) t0=0; shu-; shi=shu/10; ge=shu%10; if(shu=0) while(1) shu=0; hao=0; w

33、ela1=1; wela2=1; buzzer=buzzer; delay(200); display(shi,ge,hao); void time1() interrupt 3/*定时器1*/ TH1=(65536-50000)/256; TL1=(65536-50000)%256; shi=shu1/10; ge=shu1%10; t1+; if(t1=20) t1=0; shu1-; shi=shu1/10; ge=shu1%10; if(shu1=0) while(1) shu1=0; hao=0; wela1=1; wela2=1; buzzer=buzzer; delay(200); display(shi,ge,hao); 2、实物照片与宣传海报如下实物图宣传海报图

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

当前位置:首页 > 教育专区 > 教案示例

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

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