《单片机原理与接口技术课程设计报告格式.doc》由会员分享,可在线阅读,更多相关《单片机原理与接口技术课程设计报告格式.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、TOC o 1-3 h z u 基于单片机的电子抢答器设计 PAGEREF _Toc26370 11.1. 设计意义11.2. 系统功能要求12. 方案设计23. 硬件设计34. 系统调试65. 设计总结66. 附 录A;源程序77. 附录B:电路图138.参考文献13第 18 页单片机原理及接口技术课程设计报告书题 目:基于单片机的抢答器设计 姓 名:学 号:专 业: 电气工程及其自动化指导老师: 设计时间: 2015年 6 月基于单片机的电子抢答器设计引言1.1. 设计意义概述所设计题目的意义。伴随着科技的进步和时代的发展,在很多公开竞争场合要求有公正的竞争裁决,比如证券、股票交易以及各种
2、智力竞赛等等,因此出现了抢答器。抢答器一般是由很多逻辑电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺活动等场合。抢答器的设计就是在这种社会条件下诞生的,这次设计用AT89S51单片机为核心控制元件,设计一个实用的抢答器。1.2. 系统功能要求 本方案以单片机作为主控核心,及晶振、数码管、蜂鸣器等构成八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断等电路
3、,设计的八路抢答器具有实时显示抢答选手的号码和抢答时间的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还利用C语言编程,使其实现一些基本的功能。本设计的系统实用性强、判断精确、操作简单、扩展功能强。它的功能实现是比赛开始,主持人读完题之后按下总开关,即计时开始,此时数码管开始进行30s的倒计时,直到有一个选手抢答时,对应的会在数码管上显示出该选手的编号,此时蜂鸣器会进行10S提示。如果在规定的30s时间内没有做出抢答,则此题作废,即开始重新一轮的抢答。 本抢答器分两种模式:模式1为抢答模式,此时Start键为抢答开始按键;模式2为抢答时间调整模式,此时Start键为时间增加功能。(时
4、间为循环增加,最大60)按键说明:NO1-NO8:选手抢答按键Start:模式1为抢答开始键,由主持人按下;模式2为抢答时间调整键Clear:短期按下为模式1的抢答复位功能;长期按下不放进入模式2,再次按下返回模式1。2. 方案设计抢答器的基本工作原理:在抢答竞赛或呼叫时,有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。在整个抢答器工作过程中,显示电路、声音电路等还要根据现场的实际情况向外电路输出相应信号。抢答器的工作流程分为:系统复位、正常流程、显示流程等几部分。抢答器的工作过程如下:1、如果想调节抢答
5、时间,长按clear键进入模式二调整。2、主持人按抢答开始键,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会显示其号数并立显示倒计时剩余的时间,并且锁定其他的选手抢答无效,所以只有第一个按抢答的选手有效。3、如果主持人未按“start”键,而有人按了抢答按键,抢答无效,不给予显示,并且开始下一轮的答题。 总而言之,本课题利用AT89C51单片机及外围接口实现的抢答系统设计了抢答器,该抢答器增加了新功能、提高了系统的可靠性、简化了电路结构、节约了成本,是一个实用的工程设计。系统的主要功能模块方框图如图2-1所示。图213. 硬件设计振荡电路: 80C51内部有时钟电路,故而我们只需
6、在外部链接一个12MHZ的晶振。电容一般采用30PF,如图31所示。图3-1复位电路: 单片机的第9脚RST为复位端。电容隔离电源和地,充电充满的时候流过的电流是0,所以接的是低电平,处于正常的状态,当按键按下的时候,电容被短路,电阻被接入到电路当中,5V电直接接到电阻R1上面,所以电阻R1上的压降就是5V,所以第九脚的电压为电源电压5V,实现按键复位,电容起的作用就是开机上电复位!具体如图32所示图32按键电路: 简单来说,按键电路主要通过开关的通断来改变I/O口的状态,从而起到控制作用,按键按下去时会产生电压,为防止I/O口被破坏,我们需要接一个电阻,具体如图33所示图33显示电路及译码器
7、电路: 显示电路使用四位七段数码管,它是共阴极。译码器采用74LS245译码器,它是8路同相三态同向总线收发器,可双向收发信号,具体如图34所示图34发声电路:图3-5软件设计硬件电路确定后,软件的编程要及硬件相匹配,软硬件才能结合完成所要实现的功能。由功能分析得到的软件结构图如4-1所示。图4-1 程序系统图程序流程图:源程序见附录4. 系统调试硬件部分由于时间关系没有做成实物,主要在protues软件上仿真,具体的电路图见附录。在软件部分的调试上遇到几个问题如下:1. 倒计时不准的问题。 由于采用51单片机内部定时器来实现,51单片机寄存器溢出很快,想要定时1S需要多次调用定时器中断服务程
8、序。考虑到中断服务程序中其他代码所需的运行时间,最终定时将会出现误差,对程序中的一些参数做出调整来降低误差,甚至消除误差。 2.数码显示问题。 在显示模块中锁存器会对显示内容进行锁存,但是对于多位数的显示就要用扫描的方式来显示倒计时的个位及十位。这会使倒计时的显示时长难以控制并且在扫描的过程中会占用CPU,为解决这些矛盾,在扫描过程中进行安检扫描时得有按键按下来打断时间的显示转去显示按键按下的结果,这样就避免了显示时间安检无效的问题,提高了按键的灵敏度。 3.抢答成功屏蔽问题 当有选手抢答成功后,其他选手抢答无效。解决方法是,当选手抢答成功后,程序立即跳出循环按键扫描程序,然后显示选手编号。5
9、. 设计总结本文研究及设计的八路多功能抢答器,采用了常用的通孔电子元器件,利用AT89C51单片机及外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来。理论联系实践,体现出大学生动手能力。通过查资料和搜集有关的文献,培养了自学能力和动手能力。并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过课程设计,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。把握重点、攻克难关,学到用到、活学活用。在设计过程中由于时间仓促有很多
10、地方难免存在不足之处,硬件设计已经完成,在软件设计中有些功能还尚未开发出来。但在以后的工作中,我们会严格要求自己,追求完美。整个设计通过了软件和硬件上的调试、仿真。我想这对于自己以后的学习和工作都会有很大的帮助的。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西及在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很
11、多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。但是,通过这次设计我也发现自己的很多不足之处。在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的工作和学习中得到改善。而且,通过这次设计,我懂得了学习的重要性,学会了坚持和努力,这将为以后的学习做出了最好的榜样!6. 附 录A;源程序由于本设计源程序过于复杂,故采用模块化编程,这里只放置主程序代码,具体代码见电子版:#include Key.h#inclu
12、de led.h#define KEY_VALID_VALUE 0 /主持人按键有效电平 #define MOD_TWO 0x49 /模式显示字符 #define ALARM_COUNT_TIME 1000 /选手回答时报警时间,10Ssbit KEY_START=P24;sbit KEY_CLEAR=P25;sbit ALARM_OUT=P26;const uchar displayMode=0x04;uint alarmCountTemp; /选手抢答报警计时 uchar clockCountLTemp=0x00; /抢答时间原始值,为BCD码式的 uchar clockCountHTem
13、p=0x03;uchar displayBuff4=0,0,0x7e,0; /数码管显示缓冲区,低两位为时间,最高位为抢答号 uchar musicFre4=0x10,0x20,0x30,0x40;uchar musicFreTemp;uchar musicFreCount;uchar alarm_can_out; /允许报警输出 uchar game_is_ok; /抢答器状态变量,0x01为抢答开始 uchar time_is_over;/抢答时间计数到变量 uchar key_is_press;uchar clockCountL; /抢答时间计数值低位 uchar clockCountH
14、; /抢答时间计数值高位uchar timer0Temp; /tiemr0 中断计数变量 uchar workMode; /抢答器工作模式,0为抢答模式,1为时间调整模式 void init_timer0(void) /定时10ms TMOD|=0x01; /GATE=0,TR=1运行;C/T=1,counter,0,timer;01十六进制 TH0=0xdc; TL0=0x00; TR0=1; /timer0 控制位,为1时启动timer0 ET0=1; /timer0 中断使能 void main() uchar gameKeyScan; init_led(); init_key(); i
15、nit_timer0(); clockCountL=clockCountLTemp; clockCountH=clockCountHTemp; displayBuffS_H=clockCountH+0; displayBuffS_L=clockCountL+0; gameKeyScan=0x00; game_is_ok=0x00; timer0Temp=0x00; musicFreTemp=0x00; time_is_over=0x00; key_is_press=0x00; workMode=0x00; alarm_can_out=0x00; alarmCountTemp=0x00; sei
16、(); while(1) ledSweepDisplay(displayBuff,displayMode,4); if(KEY_START=KEY_VALID_VALUE) if(workMode=0x00) /模式1 if(game_is_ok!=0x01) clockCountL=clockCountLTemp; clockCountH=clockCountHTemp; displayBuffS_H=clockCountH+0; displayBuffS_L=clockCountL+0; displayBuffNO=0; game_is_ok=0x01;/抢答开始 else /模式2 wh
17、ile(KEY_START=KEY_VALID_VALUE); if(clockCountLTemp0x09) clockCountLTemp+; else clockCountLTemp=0x00;if(clockCountHTemp0x05) clockCountHTemp+;else clockCountHTemp=0x00; clockCountL=clockCountLTemp; clockCountH=clockCountHTemp; displayBuffS_H=clockCountH+0; displayBuffS_L=clockCountL+0; else if(KEY_CL
18、EAR=KEY_VALID_VALUE) if(workMode!=0x00) workMode=0x00; displayBuffSET_MOD=0x7e; else if(game_is_ok!=0x01) delay(100); if(KEY_CLEAR=KEY_VALID_VALUE) delay(100); if(KEY_CLEAR=KEY_VALID_VALUE) delay(100); while(KEY_CLEAR=KEY_VALID_VALUE) workMode=0x01; /进入模式2 displayBuffSET_MOD=MOD_TWO; ledSweepDisplay
19、(displayBuff,displayMode,4); game_is_ok=0x00;time_is_over=0x00;alarm_can_out=0x00; clockCountL=clockCountLTemp; clockCountH=clockCountHTemp;displayBuffS_H=clockCountH+0;displayBuffS_L=clockCountL+0;displayBuffNO=0; if(game_is_ok=0x01) if(time_is_over!=0x01) gameKeyScan=get_key_value(); if(gameKeySca
20、n!=0x00) game_is_ok=0x00; musicFreCount=musicFre1; alarm_can_out=0x02; if(KEY_ONE=gameKeyScan) displayBuffNO=0x01+0; if(KEY_TWO=gameKeyScan) displayBuffNO=0x02+0; if(KEY_THREE=gameKeyScan) displayBuffNO=0x03+0; if(KEY_FOUR=gameKeyScan) displayBuffNO=0x04+0; if(KEY_FIVE=gameKeyScan) displayBuffNO=0x0
21、5+0; if(KEY_SIX=gameKeyScan) displayBuffNO=0x06+0; if(KEY_SEVEN=gameKeyScan) displayBuffNO=0x07+0; if(KEY_EIGHT=gameKeyScan) displayBuffNO=0x08+0; else/抢答开始后时间到 musicFreCount=musicFre0; alarm_can_out=0x01; void timer0_overflowing() interrupt 1 using 1 /timer0溢出中断,10ms TH0=0xdc; TL0=0x00; if(alarm_ca
22、n_out!=0x01)&(alarm_can_out!=0x02) ALARM_OUT=0; else if(alarm_can_out=0x01) if(musicFreTempmusicFreCount) musicFreTemp+; else musicFreTemp=0x00; ALARM_OUT=ALARM_OUT; else if(alarm_can_out=0x02) if(alarmCountTempALARM_COUNT_TIME) alarmCountTemp+; if(musicFreTempmusicFreCount) musicFreTemp+; else musi
23、cFreTemp=0x00; ALARM_OUT=ALARM_OUT;else alarm_can_out=0x00; alarmCountTemp=0x00; if(game_is_ok=0x01) if(timer0Temp0x00) clockCountL-; else if(clockCountH!=0x00) clockCountL=0x09; clockCountH-; else time_is_over=0x01; displayBuffS_H=clockCountH+0; displayBuffS_L=clockCountL+0;7. 附录B:电路图8.参考文献 1.王静霞.单片机应用技术(语言版)M.北京:电子工业出版社,2009年.2.蔡朝阳.单片机控制实习及专题制作M.北京:北京航空航天大学出版社,2006年. 3.杨凌霄.微型计算机原理及应用M.江苏:中国矿业大学出版社,2004年.4.丁建伟.抢答器电路设计J.兰州工业高等专科学校学报,2008,(04).5.胡学海.单片机原理及应用系统设计M.北京:北京电子工业出版社,2005年.