《课程设计(论文)基于80C52单片机的多路数字定时抢答器设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于80C52单片机的多路数字定时抢答器设计.doc(36页珍藏版)》请在三一办公上搜索。
1、课程设计任务书学生姓名: XXX 专业班级:电子科学与技术1302班指导教师: XX 工作单位: 信息工程学院 题 目: 多路数字定时抢答器设计 初始条件: 本课程设计既可以选用集成电路:74LSl48,74LS279,74LS48,74LSl92,NE555,74LS00,74LSl21和其它器件等,实现八路定时抢答功能。又可以使用单片机系统构建多路数字定时抢答器。要求用蜂鸣器和光电二极管作声光报警器件,工作电源Vcc为+5V。 要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周。2、技术要求: 可同时供8名选手(或代表队)参赛,其编号分
2、别是0到7,各用一个抢答按钮,按钮的编号与选手的编号相对应。给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其它选手抢答。优先抢答选手的编号一直保持到主持人将系统清零为止。 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即进行减计时,并用显示器进行显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。 参赛选手在设定的时间
3、内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统进行短暂的报警,并封锁输入电路,禁止选手超时后抢答,定时显示器上显示00。 画出总体电路原理图。3、查阅至少5篇参考文献。按武汉理工大学课程设计工作规范要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。时间安排:1、 2015 年 6 月 29 日集中,作课设具体实施计划与课程设计报告格式的要求说明。2、 2015 年 6 月 30 日 至 2015 年 7 月 1 日,方案选择和电路设计。3、 2015 年 7 月
4、2 日 至 2015 年 7 月 3 日,电路调试和设计说明书撰写。4、 2015 年 7 月 4 日上交课程设计成果及报告,同时进行答辩。 课设答疑地点:鉴主14楼电子科学与技术实验室。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要II1 设计任务11.1设计基本要求11.2设计扩展12 设计方案的选取22.1方案一22.2方案二23 主要元件介绍43.1 80C52RC单片机芯片介绍43.1.1芯片简介43.1.2芯片引脚图43.1.3芯片主要引脚介绍43.2 74HC573芯片介绍53.2.1芯片简介53.2.2芯片引脚图63.2.3芯片真值表63.3四位七段数
5、码管介绍73.3.1引脚图73.3.2真值表74 设计原理阐述84.1抢答电路84.2时钟电路设计原理84.3单片机复位电路94.4报警电路94.5显示电路104.6开始、计时加减电路105 软件设计115.1软件设计思想115.2 软件逻辑框图117 总结体会13参考文献14附录1 整体电路图15附录2元件清单16附录三 软件程序17摘要 在现实社会中,各种竞赛都要应用到抢答器。因此,抢答器成为了我们生活中必不可少的一种竞赛辅助工具。本次课设所要做的便是一种简易而使用的“八路数字定时抢答器”,可以满足基本的抢答功能。抢答器主要有抢答电路、定时电路、驱动电路、显示电路、总控制电路组成。结合功能
6、实现的难易程度和经济成本,本课设采用单片机来完成。单片机具有强大的“I/O”口,并且电路设计简单,编程方便且可改写,完全足以完成课设要求。关键词: 八路数字定时抢答器;单片机;编程;I/O多路数字定时抢答器设计1 设计任务1.1设计基本要求 可同时供8名选手(或代表队)参赛,其编号分别是0到7,各用一个抢答按钮,按 钮的编号与选手的编号相对应。 给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢 答的开始。 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立 即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。此外, 要封锁输入电路
7、,禁止其它选手抢答。优先抢答选手的编号一直保持到主持人将系 统清零为止。1.2设计扩展 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节 目主持人启动“开始”键后,要求定时器立即进行减计时,并用显示器进行显示, 同时扬声器发出短暂的声响,声响持续时间0.5秒左右。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选 手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统进行短暂的报 警,并封锁输入电路,禁止选手超时后抢答,定时显示器上显示00。 画出总体电路原理图。2 设计方案的选
8、取2.1方案一八D锁存器优先编码器译码电路译码显示抢答电路脉冲产生电路主持人控制开关定时电路译码电路显示电路集成单稳态触发器报警电路图1 方案一原理框图方案一,主要采用逻辑电路来完成。抢答电路有八个独立按键代表八个人的抢答;八D锁存器将抢答电路的信息进行锁存,并送入编码电路中进行编译;译码电路是采用三八译码器,做数码管的驱动电路;译码显示采用七段共阴或者共阳数码管显示“0-8”数值;脉冲产生电路的主要作用是产生秒脉冲,用于定时电路的秒进位;主持人通过对八D锁存器的使能端的控制来控制抢答的与否;定时电路采用集成芯片74LS192来达到定时作用;集成单稳态触发器可以产生固定时间的脉冲信号,可以用于
9、报警电路0.5秒的报警时间。此方案,所用芯片较多,各模块电路之间要进行连接,比较麻烦,完成度极低。2.2方案二 报警电路 单片机(80C52)显示电路 控制电路定时电路 图2 方案二原理框图方案二是用单片机来完成。单片机一共有40个引脚,其中28个“I/O”口,强大的“I/O”口足以完成一个简易抢答器。报警电路采用蜂鸣器来做报警信号的产生;显示电路采用二位七段共阳数码管显示定时时间和抢答者的序号;定时电路采用按键来控制计时加和减;控制电路主要为控制抢答的开始和单片机复位功能。各电路之间的交流主要由软件来完成。此方案,所用芯片集成度高,电路所需芯片较少,电路连接简单,成本较低。但,对软件编程功底
10、要求很高。综上所述,采用第二种方案来完成本课设3 主要元件介绍3.1 80C52RC单片机芯片介绍3.1.1芯片简介 80C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本。80C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此
11、外,80C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。8051片内有 ROM,无须外接外存储器和373,更能体现“单片”的简练。3.1.2芯片引脚图 80C52单片机芯片引脚图见图3:图3 80C52的单片机引脚图3.1.3芯片主要引脚介绍 并行I/O接口P0X: 当作为通用的I/O口时,P0口的引脚以“开漏”的方式输出, 所以必需外加上拉电阻。当作为外部程序或数据存储器的数据/地址总线时,内部控 制信号为高电平,P0口的引脚可以在数据/地址总线的
12、作用下实现上拉,不需要外加 上拉电阻。 P1X:具有内部的上拉功能,可作为准双向口(用作输入时引脚被拉成高电平)使用。 作为专用功能引脚,相应的口锁存器必须为1状态。 P2X:具有内部的上拉功能,可作为准双向口(用作输入时引脚被拉成高电平)使用。作为外部程序或数据存储器的高地址总线。 P3X:具有内部的上拉功能,可作为准双向口(用作输入时引脚被拉成高电平)使 用。作为专用功能引脚,相应的口锁存器必须为1状态。 EA/VPP : 访问程序存储器控制信号,当其为低电平时,对ROM的读操作限定在外部的程序存储器,当其为高电平时,对ROM的读操作是从内部存储器开始的,并可延至外部程序存储器。 ALE/
13、PROG : 编程脉冲 PSEN : 外部程序存储器读选通信号,在读外部ROM时PSEN是低电平有效,以实现 对ROM 的读操作。 RST/VPD : 复位信号,当输入信号延续2个周期以上的高电平有效,用以完成单片机复位初始化操作。 XTAL : 时钟晶振输入端3.2 74HC573芯片介绍3.2.1芯片简介 74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件。当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至输出被关闭时,新的数据也可以置入。这种电路可以驱动
14、大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。3.2.2芯片引脚图 其引脚D0D7与Q0Q7为输出端;OE为使能端,只有在其为低电平是,芯片才能正常工作;LE为输入使能端,只有在其高电平下,芯片才能正常使能。 74HC573引脚图见图4图4 74HC573引脚图3.2.3芯片真值表 CE端输入低电平,LE端输入高电平时,74HC573芯片才能正常使能工作。 真值表见表1:输入输出CELEDQHXXZLLX不变LHLLLHHH表1 74HC573真值表3.3四位七段数码管介绍3.3.1引脚图 四位七段数码管引
15、脚图见图5: 图5 四位七段数码管引脚图 1-6脚依次是e d dp c g 4,12-7脚依次是1 a f 2 3 b3.3.2真值表 四位七段数码管真值表见表2:显示十进制数二进制数码对应十六进制码dpgfedcba000111111C0H100000110F9H201011011A4H301001111B0H40110011099H50110110192H60111110182H700000111F8H80111111180H90111111190H表2 四位七段数码管真值表4 设计原理阐述4.1抢答电路 抢答电路采用八个弹片按键做抢答按钮,从S1-S8分别依次接入单片机的P2.7-P2
16、.0引脚。当按下按键是,表示抢答,低电平有效,将有效信号传入对应的单片机引脚中,进行软件烧写。当有效信息传入单片机时,单片机对其他按键进行封锁,不容许其抢答,只锁存有效抢答按键。 抢答电路图见图6:图6 抢答电路4.2时钟电路设计原理 CPU的定时精确工作需要一个晶振振荡器产生稳定的时钟脉冲来控制89C52。 因此时钟电路采用11.0592MHZ的晶振来产生时钟脉冲,分别接入89C52的XTAL1引脚和XTAL2引脚。 时钟电路见图7:图7 时钟电路图4.3单片机复位电路 复位是单片机的一个重要部件,可以将单片机工作状态恢复到上点之前。接在89C52的RST引脚。 单片机复位电路见图8:图8
17、单片机复位电路4.4报警电路 报警电路是本次课设的重点要求,当有人抢答时,会发出提示声音,或者没有开始抢答和抢答无效时会发出报警声音。接在89C52的P1.7引脚上。 报警电路见图9:图9 报警电路4.5显示电路 显示电路采用四位共阳数码管来显示倒计时的时间和抢答者的序号。通过74HC573做驱动芯片来驱动控制数码管的显示。其引脚接在89C52的P0.0-P0.7引脚上。 显示电路见图10:图10 显示电路图4.6开始、计时加减电路 S11位开始按键,当,S11按下时,抢答开始。S9和S10位定时设置按键。S9位计时键按键S10位计时加按键。S9-S11依次接入89C52的P3.5-P3,7引
18、脚。 开始、计时加减电路见图11:图11 开始、计时加减电路图5 软件设计5.1软件设计思想本抢答器的软件系统主要包括以下几个部分: 主程序:主程序的功能主要是完成各寄存器单元的初始化,对89C52单片机接口电路的初始化, 内部定时器的初始化,中断的初始化及调用显示程序。 对开始抢答的处理:当主持人按下开始按键是,程序部分采用中断方式进行处理。在中断处理程 序中完成相应操作,修改计时单元的数据发出计时提示声音。 按键扫描程序:主要用于各按键的扫描,检测那一个按键发出有效信号。 显示程序:采用动态扫描显示,显示倒计时时间和抢答者的序号。5.2 软件逻辑框图软件逻辑框图见图12:图12 软件逻辑框
19、图6 实物图 实物正面图见图12:图12 实物正面图 实物背面焊接图见图13:图13 实物背面焊接图7 总结体会经过正确的硬件设计与焊接、软件正确调试,成功的实现了本课设的所有要求。八人一起抢答,每一次只有一个人或者无人为有效抢答,不存在多人抢答有效。数码管显示倒计时和抢答者序号也为正确数字。此系统操作简单可靠,简易而准确。实为一次成功的课设。通过本次的课程设计,锻炼了我的硬件和软件能力。从设计硬件开始,利用Multisim软件画出仿真电路图,通过上网查阅资料和翻阅书籍,充分了解89C52单片机芯片各个引脚的功能,确定每一个电路应接入什么引脚,确保自己设计的电路图是可行的。在到软件烧写,用ke
20、il软件进行C语言的编程,利用模块化将程序的难度降低。在这一次的课设中,遇到了很多的问题。首先就是硬件问题,刚开始采用逻辑电路来完成这一次的课设,当因为自己设计的逻辑电路太过复杂,经过焊接调试之后,多次进行寻找错误,当最终还是以失败告终。因此不得不重新选择用单片机来完成这一次的课设。在焊接单片机时几乎没有遇到多少问题,硬件焊接一次性成功。但是软件也是出了一些问题,在数码管显示上和抢答按键上都出现了问题。经过自己一遍又一遍的调试,终于成功解决了所有问题。可以说,这一次的课设让我收获很大,从硬件设计到软件烧写,都锻炼了我的能力,为自己以后更好的学习单片机以及其他东西打下了坚实的基础。参考文献1伍时
21、和.数字电子技术基础.清华大学出版社.20092宋学松、李冬明、崔长胜.手把手教你学51单片机.清华大学出版社.20143郭天祥.51单片机C语言教程.电子工业出版社20134康华光、陈大钦、张林.电子技术基础.华中科技大学出版社。20025谢自美.电子线路设计.华中科技大学出版社.20106孙梅生.电子技术基础课程设计.高等教育出版社.2012附录1 整体电路图附录2元件清单序号名称型号数量151芯片STC89C52RC12芯片底座40引脚13复位按键4脚直插134蜂鸣器有源5V15四位共阳数码管LG5641BH16锁存器74HC57327芯片底座20脚28三极管NPN805019三极管NP
22、N9012410瓷片电容30PF直插511晶振11.0592MHZ112电解电容10uF/25V113排阻10K*8114电阻100、10K直插各1015排针2.45MM1附录3 软件程序/Responder.c#include#define LED_DATA_PORT P0 /0亮,共阳数码管 #define ADJUST 0 /抢答器处于调整状态 #define ANSWER 1 /抢答状态 /单片机IO口位声明,51单片机可以对IO的每一位或Px八位单独进行读写操作 sbit com4=P11; /1亮 sbit com3=P10; sbit key1=P21; sbit key2=P2
23、3; sbit key3=P25; sbit key4=P27; sbit key5=P20; sbit key6=P22; sbit key7=P24; sbit key8=P26; sbit key9=P35;/倒计时减 sbit key10=P36;/倒计时加 sbit key11=P37;/清零端,控制端 sbit beep=P17; /1响 unsigned char num1=0,time=15; /num1是用来辅助定时器计数,累计时间到一秒,time为倒计时 unsigned char shi=0,ge=0; /倒计时time的十位和个位 unsigned char resul
24、t=0; /抢答结果 unsigned char state=ADJUST; /抢答器状态,初始为调整状态 unsigned char flag=0;/结束标识,状态标识,0复位,没有有效信号;1有人抢答,结束抢答过程;2时间到,无人抢 答,结束抢答过程 const unsigned char ledNum = /0 1 2 3 4 5 6 7 8 9 A B C D E F 不显示-0(18)H(19)h(20)C(21)0(22)n(23) 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 ; void Delay(unsigned int
25、 t) while(-t); /延时函数,n毫秒 void Delay_ms(unsigned int n) unsigned int i,j; for(i=n;i0;i-) for(j=110;j0;j-); /开始声音void SoundStart(void) beep=1; Delay_ms(200); beep=0; /报警声音void SoundWarning(void) unsigned char i; for(i=0;i20;i+) /报警声音 beep=1; Delay_ms(i); beep=0; Delay_ms(20-i); /结束声音void SoundOver(voi
26、d) unsigned char i; for(i=0;i80;i+) beep=1; Delay(100); beep=0; Delay(100); /按键扫描,扫描K1-K8unsigned char KeyScan_8(void) unsigned char num=0;if(key1=0) Delay_ms(10);if(key1=0) num=1;Delay_ms(10); while(!key1);return num;if(key2=0) Delay_ms(10);if(key2=0) num=2;Delay_ms(10);while(!key2);return num;if(k
27、ey3=0) Delay_ms(10);if(key3=0) num=3;Delay_ms(10);while(!key3);return num;if(key4=0) Delay_ms(10);if(key4=0) num=4;Delay_ms(10);while(!key4);return num;if(key5=0) Delay_ms(10);if(key5=0) num=5;Delay_ms(10);while(!key5);return num;if(key6=0) Delay_ms(10);if(key6=0) num=6;Delay_ms(10);while(!key6);ret
28、urn num;if(key7=0) Delay_ms(10);if(key7=0) num=7;Delay_ms(10);while(!key7);return num;if(key8=0) Delay_ms(10);if(key8=0) num=8;Delay_ms(10);while(!key8);return num;return num; /按键扫描函数为控制开关unsigned char KeyScan_3(void) unsigned char num=0; if(key9=0) Delay_ms(10);if(key9=0) num=9;while(!key9);return
29、num; if(key10=0) Delay_ms(10);if(key10=0) num=10;while(!key10);return num; if(key11=0) Delay_ms(10);if(key11=0) num=11;while(!key11);return num; return num; /按键扫描,只扫描控制端清零端unsigned char KeyScan_1(void) unsigned char num=0;if(key11=0) Delay_ms(10); if(key11=0) num=11; while(!key11); return num; retur
30、n num; /定时器初始化void InitInter(void) TMOD=0X11; TH0=(65535-45872)/256; TL0=(65535-45872)%256; EA=1; ET0=1; TR0=1;/关闭中断void CloseInter(void) TR0=0;ET0=0;EA=0;/重新打开中断void OpenInter(void) num1=0; TH0=(65535-45872)/256; TL0=(65535-45872)%256; EA=1; ET0=1; TR0=1;/关闭数码管显示void DisplayClose(void)com3=0;com4=0
31、;LED_DATA_PORT=0XC0;/倒计时显示,调用该函数之前要先关闭显示/因为是动态扫描,所以要循环里边一直重复执行void DisplayTime(void) /DisplayClose();LED_DATA_PORT=ledNumshi;com4=1;Delay(200);com4=0;LED_DATA_PORT=ledNumge;com3=1;Delay(200); com3=0;/显示结果,序号void DisplayResult(void) DisplayClose();LED_DATA_PORT=ledNumresult; com3=0;com4=1;Delay(200);
32、com3=com4=0;/按键释放void KeyFree(void) if(KeyScan_8() Delay_ms(10); if(KeyScan_8() state=ADJUST; SoundWarning(); LED_DATA_PORT=0X00; com4=1; while(KeyScan_8(); com4=0; /定时器调整进程 void ProcessAdjust(void) time=15;shi=time/10; ge=time%10;while(!state) switch(KeyScan_3() case 9: /倒计时减 time-; if(time30) time
33、=1; shi=time/10; ge=time%10; break; case 11: state=ANSWER; break; default:; DisplayTime(); KeyFree(); /定时器抢答过程 void ProcessAnswer(void) KeyFree(); flag=0; OpenInter(); SoundStart(); while(flag=0) DisplayTime(); switch(KeyScan_8() case 1: result=1; flag=1; break; case 2: result=2; flag=1; break; case
34、 3: result=3; flag=1; break; case 4: result=4; flag=1; break; case 5: result=5; flag=1; break; case 6: result=6; flag=1; break; case 7: result=7; flag=1; break; case 8: result=8; flag=1; break; default:; CloseInter();/关闭中断 if(flag=1) DisplayTime(); SoundOver(); while(state) DisplayResult();if(KeySca
35、n_1()=11)state=ADJUST; else/无人抢答 DisplayClose(); SoundWarning(); while(state) DisplayTime();if(KeyScan_1()=11)state=ADJUST; void main(void) unsigned int i=0;/ DisplayClose(); beep=0; TMOD=0X11; while(1) switch(state) case ADJUST: ProcessAdjust(); break; case ANSWER: ProcessAnswer(); break; default:;
36、 /定时器0中断服务void Timer0(void)interrupt 1 TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1+;if(num1 = 20) /一秒时间到 num1=0; time-; shi=time/10; ge=time%10; if(time=0) /抢答时间到,关闭中断,封锁电路,设置time初值 /time=10/倒计时初值为10 flag=2; 本科生课程设计成绩评定表姓 名XXX性 别男专业、班级电子科学与技术1302班课程设计题目:多路数字定时抢答器课程设计答辩或质疑记录:成绩评定依据:最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日