单片机 80C51智能抢答器Word格式文档下载.docx
《单片机 80C51智能抢答器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机 80C51智能抢答器Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
![单片机 80C51智能抢答器Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/27/3e15f788-e4e2-4841-8a1f-f9dd9f7ab90c/3e15f788-e4e2-4841-8a1f-f9dd9f7ab90c1.gif)
根据设计内容,要求学生结合已学过的知识,查阅资料,选择适合的单片机芯片,掌握其使用方法,使用KEIL与PROTEUS软件实现系统的仿真,调试,画出硬件电路图和软件流程框图,编写相应的程序,最后完成任务。
2、课程设计要求
1、正确设计,计算定时,计数的各个单元电路
2、按键控制电路实现。
按键锁定,在有效抢答状态下,按键无效非法。
3、抢答限定时间和回答问题的时间可在1~99设定;
在抢答中,只有开始后抢答才有效,如果在开始抢答前无效;
4、数码管能够正确地显示时间。
可以显示是哪位选手有效抢答和无效抢答;
抢答时间和回答问题时间倒计时显示,满时后系统计时自动复位;
二、单片机抢答器硬件电路设计
1、整体方案设计
电子智能抢答计分器在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
为了完成这个任务设计时系统能显示抢答组号、各组计分并能计分显示以及比赛结束时能发出报警声三个要求;
电子智能抢答计分器主要是由硬件部分和软件部分构成,硬件和软件分开设计;
系统综框图如下:
图1-1系统框架图
A.抢答器的工作原理
抢答器的工作原理是利用单片机的定时器T0、T1中断完成,其余状态循环调用显示子程序,用4个共阴极LED数码管来显示,用P0口作为数码管的八个段选,用P2口中的P2.0、P2.1、P2.2、作为4个数码管其中3个位选,P1口接4个按键,提供选手抢答,P3.0-P3.5四个接四个按键,提供开始、结束、答题时间调整、抢答时间调整,加1、减1调整之用。
抢答功能:
通过四路按键配合程序来实现抢答功能。
当主持人按下抢答键开始抢答后,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及其当前时间。
抢答限时:
主持人按下抢答键后,设置5秒为抢答时间(此时间可在1-99秒之间修改)。
若5秒内无人抢答,倒计时为0时发出报警,说明该抢答题目作废。
此时闭锁所有抢答按键,只有当主持人再次按下抢答键开始下一次抢答方可抢答。
答题限时:
当选手按下按钮时,启动倒计时(此倒计时时间可在1~99秒之间修改),倒计时为0时发出报警,说明答题时间到。
2、各模块电路设计
1、控制系统及所需元件
A.芯片的选择
抢答器电路的核心是89C51单片机,其内部带有4KB的FLASHROM,无需外扩程序存储器;
抢答器没有大量的运算和暂存数据现有的128B篇内RAM已经能满足容量需求,故不需外扩片外RAM,系统配有8位8段数码显示管,管采用共阴数码管,作为时钟的显示输出。
控制系统主要由单片机应用电路、存储器、接口电路、显示接口电路组成;
其中单片机采用的是AT89C51单片机使系统工作的核心,它主要负责控制各个部分协调工作。
所需元件:
该系统的核心器件是AT89C51,其外部接上复位电路、上拉电阻、数码管、按钮及扬声器。
元件为:
晶体振荡管X1,电容C1、C2、C3,电阻RP1,P3.0和P3.1有裁判控制分别是抢答停止和开始键;
P1.0-P1.7是8组抢答的输入口;
P2.0-P2.3口为数码管的段选口;
位选口用的是P0.0-P0.6口输出,外部中断0、1和P3.3,P3/4为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整。
P3.4、P3.5分别实现了时间的加一和减一;
P3.6为蜂鸣器控制口。
智能抢答器用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,并允许在系统内改写或用编程器编程。
该智力竞赛抢答器的准确度很高,其误差主要由晶振自身的误差所造成。
AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。
其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128个字节。
89C51单片机有4个8位的并行I/O口:
P0口,P1口,P2口和P3口。
各个接口均由接口锁存器,输出驱动器和输入缓冲器组成。
P1口是唯一的但功能口,仅能用作通用的数据输入/输出口。
P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。
在需要外部程序存储存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。
P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号。
B.复位电路的设计
图2-1复位电路原理图
该复位电路采用上电自动复位和手动复位两种复位方式,图中网络标号所指9连接到单片机的复位引脚。
要实现复位只需在,51系列单片机的RESET引脚上加上5ms的高电平就可以了。
上电复位是利用电容的充电来实现的,即上电瞬间RESET端的电位与Vcc相同,随着电容上储能增加,电容电压也逐渐增大,充电电流减小,RESET端的电位。
这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。
通常若采用12MHz的晶振时,复位元件参数为22μF的电解电容和10kΩ的电阻。
按钮复位电路是通过按下复位按钮时,电源对RESET端维持两个机器周期的高电平实现复位的。
C.晶振电路的设计
MSC-51单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。
本设计中采用内部时钟方式。
单片机内部有一个反相放大器,XTAL1、XTAL2分别为反相放大器的输入端和输出端,外接定时反馈元件组成振荡器(内部时钟方式),产生时钟送至单片机内部各元件。
时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越快。
一般来说单片机内部有一个带反馈的线性反相放大器,外界晶振(或接陶瓷振荡器)和电容就可组成振荡器,如图2-2所示。
加电以后延时一段时间(约10ms)振荡器产生时钟,不受软件控制,图中Y1为晶振,震荡产生的时钟频率主要由Y1确定。
电容C1,C2的作用有两个:
一是帮助振荡器起振,二是对振荡器的频率起微调作用,典型值为30pF。
晶振电路的设计如图2-2所示:
图2-2晶振电路原理图
D.数码显示管的选择
图2-3
数码显示管用来作为时间的显示输出,一般用7段数码显示管。
本次设计中采用7段共阴数码显示管应用简单、可靠性高、成本低,作为显示输出。
连接时段选信号接在P0口的P0.0~P0.6七个I/O口上,P1口是准双向I/O接口在输出驱动部分具有驱动4个TTL负载的能力,即输出电流不大于400μA,所以在接电阻时选择接510Ω限流电阻。
而在位选方面采用单片机P2口的P2.0~P2.2三个I/O口作为位选信号的输出口如图2-3
E.按钮输入电路的设计
抢答器的输入按钮使用常开开关,
图2-4抢答按键
这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”
现象就可以了。
这里采用最常用的方法即延时法,其的原理为:
因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
F.蜂鸣器
蜂鸣器的发声主要用于对有抢答时的报警信号,以提示主持人。
蜂鸣器的发声由三极管放大电压、电流来驱动,其中三极管的基集接单片机的P0.7口,以提供导通基集电流,从而经放大后达到蜂鸣器的发声电压、电流。
其电路图如2-5所示:
图2-5.蜂鸣器电路
3、整体硬件电路图
三、单片机抢答器软件设计
1、流程图
3.1程序系统结构图
硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。
由功能分析得到以下的软件结构图:
图3-1软件系统结构图
3.2程序流程图
整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。
定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对P3.7取反,扬声器发声,改变定时器初值,可改变扬声器频率。
定时器程流程图如下:
图3-2响铃程序流程图
定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。
其流程图如下:
图3-3倒计时中断流程图
外部中断0用于调整倒计时时间,流程图如下:
图3-4调整抢答时间流程图
主程序协调三个中断一起工作,实现抢答功能,其流程图如下:
2、根据流程图编写程序
见附录
四、系统调试
1、硬件调试过程
1.按键电路的制作和调试
通过根据设计方案,对相应的I|O接口,将按键焊在电路板上,使用万用表进行调试。
首先,将万用表调到“测量通断档”红笔与黑笔放在按键两端,此时按键不必合如有报警声则检查故障,如果没有则进行下一步;
将按键按下,如果发出报警,则正常,否则检查连接线路,和按键问题。
2.复位电路调试
即使复位电路虽然简单,但其作用非常重要。
一个单片机系统能否正常运行,首先要检查是否能复位成功。
初步检查可用示(波)器探头监视RST引脚,按下复位键,观察是否有足够幅度的波形输出,没有则检查。
3.报警电路的制作与调试
通过既定的设计方案将报警电路焊接在电路板上,给硬件接上电源,正常不会报警,再接地线,另一根接单片机P3.6口,如果报警则正常,反之请检查虚焊及软件编程问题。
4.显示装置的制作与调试
给硬件电路接上电源,这时数码管全灭,用一根导线的一端接地线,另一端依次触碰AT89C51的P0口,正常时每碰一个脚,对应的灯亮。
若不亮查看是否虚焊,或电路问题。
5.时钟电路调试
用示(波)器可以查看时钟信号的有无,是不是稳定,幅度是否达到设定的数值,频率是否正常。
如果时钟信号不正常,要检查产生时钟信号的电路。
2、软件调试过程
软件的调试必须在开发系统的支持下进行。
先分别调试通过各个模块程序,然后调试主程序,再将各部分连接进行调试。
调试的范围可以有小到大、逐步增加,必要的中间信号可以先作设定。
通常交叉使用单步运行、断点运行、连续运行等多种方式,每次执行完毕后,检察CPU执行现场、RAM的有关内容、I/O口的状态等。
发现一个问题,就解决一个,直至全部通过。
3、系统调试
把AT89C51芯片固定在电路板上,通电系统正常可看到:
没按下“开始抢答键”显示“FFF”,如果有选手抢答(如3),则显示“3FF”,并且成闪烁状态;
当按下“开始抢答键”显示器开始倒计时,如果倒计时5S内没人抢答,则系统每秒都会报警提醒选手,当时间耗尽就显示“FFF”。
如果有人抢答,则显示选手号和倒计时。
另外。
在任何时候按下“停止”按键中止一切进程,显示“FFF”。
上述均是正常工作情况,如果调试中不能做到上几点,应排错修改,完善智能抢答器功能,来实现任务。
五、项目总结
在大学时间里,我们大多数接触的是课堂授课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
很明显做类似的课程设计就为我们提供了良好的实践平台,来锻炼我们。
本次课程设计大概持续了好长时间,我们设计的课题是八路抢答器,抢答器主要是由单片机、主持人按键和选手抢答按键以及显示部分组成;
抢答器主要功能是:
实现主持人按下允许抢答按键后数码管显示FFF,并允许选手抢答;
当有有选手抢答时,其他选手再抢答无效;
在有选手抢答后,数码管显示抢答选手号,对应选手抢答指示LED灯闪烁五次,同时蜂鸣器响一声。
当主持人再次按下按键后数码管显示FFF,又开始下一题的抢答。
整个过程不够流畅,专业知识与实际问题结合的不够灵活,思维不够敏捷,确实费了不少心思,设计结果也不是太理想,但我们已经尽力了,我们也学到了好多。
我总结出以下几点:
在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;
要有一个清晰的思路和一个完整的的软件流程图;
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题,最后我们终于完成了任务。
六、体会与改进意见
我认识到了自学的重要性,以及学以致用的道理。
我在图书馆及网络上查阅了大量的资料,同时也认识到了朋友的重要作用。
本次的抢答器的设计,让我重新认识了以前所学习的专业知识,我觉得此次设计让我更加巩固了所学的知识并在设计的过程中学会了与时俱进,克服了工作的枯燥感,让我受益匪浅。
在学习单片机这门课程的时候,我们应该好好的记笔记,课下好好的做练习题才能把汇编语言程序设计灵活的运用到单片机的应用上,在单片机这门课程的学习上,我们还应该知道一种常用的仿真软件proteus软件,可以让你我们更为清晰的掌握C89C51单片机的实际应用上的设计。
在今后的学习过程中,应该多看一些专业方面的书籍,以丰富自己的知识。
由于知识水平的局限和动手能力不足,设计中可能会存在着一些不足,带来一些困扰。
单片机课程设计实习很快要结束了,在这个过程中我深刻的认识到了自己的不足,也获得了很多难得的经验和知识。
在本课程设计即将完成之际,我要对所有支持和帮助我的老师和同学表示衷心的感谢。
我要感谢我们的指导老师,他给了我们精确地的指导,让我学到了很多知识,掌握了Keil的编程和Proteus的仿真的方法,也获得了实践锻炼的机会。
其次要感谢我们的单片机课程老师段老师,他平时授课认真,对我们要求严格负责,在相关知识的积累和应用上给了我们极大的帮助。
我还有我的伙伴,他做事认真。
还要感谢周围同学的帮助。
七、附录
程序代码:
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0100H
MAIN:
MOVR1,#0AH
MOVR2,#1EH
MOVTMOD,#11H
MOVTH0,#0F0H
MOVTL0,#0FFH
MOVTH1,#3CH
MOVTL1,#0B0H
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1
CLROK
CLRRING
SETBTR1
SETBTR0
FEIFA:
JNBP1.0,FEIFA1
JNBP1.1,FEIFA2
JNBP1.2,FEIFA3
JNBP1.3,FEIFA4
JNBP1.4,FEIFA5
JNBP1.5,FEIFA6
JNBP1.6,FEIFA7
JNBP1.7,FEIFA8
AJMPSTART
FEIFA1:
MOVR3,#01H
AJMPERROR
FEIFA2:
MOVR3#02H
FEIFA3:
MOVR3,#03H
FEIFA4:
MOVR3,#04H
FEIFA5:
MOVR3,#05H
FEIFA6:
MOVR3,#06H
FEIFA7:
MOVR3,#07H
FEIFA8:
MOVR3,#08H
ERROR:
MOVR0,#00H
MOV34H,R3
HERE:
MOVA,R0
CJNEA,#60H,Flash
MOVR3,#0AH
MOVR4,#0AH
MOVR5,#0AH
AJMPCHECK1
Flash:
CJNEA,#0CH,CHECK1
SETBRING
MOVR3,#34H
MOVR4,#0BH
MOVR5,#0BH
CHECK1:
JNBP3.1,QUIT1
MOVR3,34H
ACALLDISPLAY
AJMPHERE
QUIT1:
DISPLAY:
MOVDPTR,#DAT1
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0FBH
MOVP0,A
ACALLDELAY2
MOVDPTR,#DAT2
MOVA,R5
MOVP2,#0FEH
MOVA,R4
MOVP2,#0FDH
RET
DAT1:
DB0FFH,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,0FFH,8EH
DAT2:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,0FFH,8EH
TRUE1:
ACALLBAOJING
MOVA,R2
MOVR6,A
AJMPCOUNT
TRUE2:
MOVR3,#02H
AJMPCOUNT
TRUE3:
TRUE4:
TRUE5:
TRUE6:
TRUE7:
TRUE8:
BAOJING:
SETBRING
ACALLDELAY1
ACALLDELAY1
RETEND