1、 西安文理学院物理与机械电子工程学院专业课程设计报告专业班级 测控技术与仪器 课 程 51单片机技术与设计 题 目 基于51单片机的抢答器设计 学 号 学生姓名 指导教师 2014年 5月基于 51单片机的八位抢答器设计摘要 随着电子技术的飞速发展,基于单片机的控制系统已应用于工业、农业、电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存
2、放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用 AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时。同时使液晶显示屏能够正确地显示时间,并且给出指令的提示,扬声器发生提示。系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s 设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有声音的提示;抢答时间和回答问题时间倒记时显示,满时后系
3、统计时有声音提示;抢答倒计时时间和回答问题时间均可通过硬件的按键调整。关键词:AT89C51;单片机;液晶显示屏;抢答器;智能目录第 0 页目录1 引言 .12 设计任务与要求概述 .12.1 题目 .12.2 设计任务 .12.3 设计要求 .12.4 设计目的 .13 方案总体设计 .23.1 方案 .23.1.1 控制芯片 .23.1.2 显示方式 .23.1.3 程序语言的选择 .23.2 原理框图 .34 硬件电路设计 .34.1 抢答器的工作原理 .34.2 单元电路设计 .34.2.1 抢答器电路 .34.2.2 发声电路设计 .44.2.3 开始、复位按键输入电路的设计 .44
4、.2.4 时钟震荡电路 .44.2.5 设定时间、加减时间电路设计 .44.2.6 显示电路的设计 .55 软件设计 .65.1 抢答器工作流程 .65.2 流程框图 .66 电路仿真调试 .76.1 上电准备状态 .76.2 开始抢答 .76.3 非法抢答 .86.4 正常抢答 .87 实验仪器及元器件清单 .98 设计总结 .99 致谢 .9目录第 2 页10 参考文献 .10附录一 系统电路图 .11附录二 程序清单 .11西安文理学院课程设计报告第 0 页1 引言目前各种各样的竞赛越来越多,无论是学校、工厂、军队还是益智性电视节目,其中用到抢答器的概率非常大。目前很多抢答器基本上采用小
5、规模数字集成电路设计,使用起来不够理想。因此设计一 款 更 易 于 使 用 和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称。所以若利用单片机来设计抢答器,便使以上问题得以解决。 针 对 以上情况,本 课 程 设 计 出以 AT89C51 单片机为核心的八路抢答器。它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过液晶显示屏显示相应的路数和答题时间以及各项命令等,使竞赛真正达到公正、公开、公平。2 设计任务与要求概述2.1 题目8路比赛抢答器2.2 设计任务 利用8051单片机中断系统,制作一个有8个按键的比
6、赛抢答器,可供8名选手比赛的抢答,每组设置一个抢答按钮,按钮的编号与选手的编号对应,主持人设置控制开关,用来控制系统的清零和抢答的开始,在有人按键时进行对应选手显示。2.3 设计要求1 完成系统的硬件电路设计与软件设计;2 采用汇编或 C 语言编程;3 采用 Proteus、KeilC 等软件实现系统的仿真调试;4 论文要求思路清晰,结构合理,语言流畅,书写格式符合要求。2.4 设计目的1 综合运用相关课程中所学的理论知识去完成这一设计课题。2 通过查阅手册和相关文献资料,培养自己独立分析和解决问题的能力。3 进一步熟悉单片机和常用接口电路,加深对专业知识和理论知识学习的认识和理解。4 学会电
7、路的设计与程序的调试。5 学会撰写课程设计论文。6 培养严肃认真的工作作风和严谨的科学态度。西安文理学院课程设计报告第 1 页3 方案总体设计3.1 方案3.1.1 控制芯片我们采用 51 系列单片机 AT89C51 作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。单片机技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。MCS-51 单片机特点如下:a、可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的 CPU,程序指令和数据都可以写在 ROM 里,许多信号通道都
8、在同一芯片,因此可靠性高,易扩充。b、单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。c 、控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。3.1.2 显示方式在实现基本功能时,我们采用了四位数码管显示,后两位显示倒计时时间,第一位显示抢答组号,第三位置空,在此基础上还在程序里加了更改抢答时间和倒计时时间的模块,也可通过数码管显示,成为一个比较完整的系统。后来在实现拓展功能时,我们想加入语音显示的模块,发现 proteus 软件无法仿真,就改为用液晶显示屏 1602 显示。1602 液晶显示屏也叫 1602
9、 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,它可以通过简短的英文提示和数字使人明确看到比赛进行的整个过程。3.1.3 程序语言的选择一开始实现基本功能时,使用数码管作为显示,采用了汇编语言,比较高效,条理也清晰;后来做拓展功能时改用液晶显示屏显示,发现液晶显示屏使用 c 语言编程更便捷高效,就整体使用了 c 语言。西安文理学院课程设计报告第 2 页抢答按扭优先编码器码电路锁存器
10、译码电路 译码显示主持人按钮开关控制电路 报警电路秒脉冲产生电路 定时电路 译码电路 显示电路3.2 原理框图图 3.1 原理框图4 硬件电路设计4.1 抢答器的工作原理用单片机的两个外部中断作为修改时间的选择按钮,选择修改抢答倒计时时间还是回答问题时间;用定时器1作为时间的控制。4.2 单元电路设计4.2.1 抢答器电路该电路有八个按钮分别接于 P1.0P1.7可实现两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。如有再次抢答需由主持人将 S 开关重新置,“清除”然后再进行下一次抢答。如图4.1图4.1 抢答器电路西安文理学
11、院课程设计报告第 3 页4.2.2 发声电路设计用 P3.6口和扬声器相连,主持人将控制开关拨到“开始“位置时,会发声,抢答电路和定时电路进人正常抢答工作状态;当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。如图4.24.2.3 开始、复位按键输入电路的设计复位是计算机的一个重要工作状态。开始和复位键分别接于 P3.0和 P3.1口,在单片机工作时,接电之前,断电后也要复位。在抢答器中复位则为定时做铺垫,在抢答之前要复位,抢答完也要复位。按了复位键,显示屏的状态是“start”。如图4.3图4.2 发声电路 图4.3 开始、复位电路4.2.4 时钟震荡电路CPU 的操作需要精确
12、的定时,可用一个晶体振荡器产生稳定的时钟脉冲来控制 AT89C51单片机上的 XTAL1和 XTAL2分别为振荡电路的输入和输出。如图4.44.2.5 设定时间、加减时间电路设计该电路主要是对答题时间和抢答时间调整设计的,抢答时间接 P3.2,答题时间接 P3.3,加一秒接 P3.4,减一秒接 P3.5。如图4.5西安文理学院课程设计报告第 4 页图4.4 时钟振荡电路 图4.5 加减时间电路4.2.6 显示电路的设计本系统通过液晶显示屏来显示各提示信息。如图4.6图4.6 显示时间电路西安文理学院课程设计报告第 5 页5 软件设计5.1 抢答器工作流程为了能够达到抢答的公平、公正、合理,应该
13、在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下 P3.0按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭 T0、调用显示程序、封锁键盘。接通电源后,液晶显示屏显示“Ready”,抢答器处于禁止状态,处于等待开始状态,此时有人抢答,会显示“error”,也可以调整抢答时间和回答问题时间,;主持人将开关置,“开始”状态,宣布“开始”抢答器工作,显示屏显示“go!”,扬声器给出声响提示,定时器倒计时;选手在定时时间内抢答时,抢答器完成,显示组号,
14、并且倒计时,时间到扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作“开始、停止“状态开关。5.2 流程框图图 5.1 流程框图西安文理学院课程设计报告第 6 页6 电路仿真调试6.1 上电准备状态图6.1 上电准备状态6.2 开始抢答图6.2 开始抢答西安文理学院课程设计报告第 7 页6.3 非法抢答图6.3 非法抢答6.4 正常抢答图6.4 正常抢答西安文理学院课程设计报告第 8 页7 实验仪器及元器件清单表 7-1 实验仪器及元器件清单8 设计总结通过这次课程设计,我更进一步地认识了抢答器的工作原理,掌握了它的调整及测试方法。本系统
15、通过采用 AT89C51 单片机作为核心,以八个按键输入抢答信号,以液晶显示屏显示,根据烧录到单片机中的程序控制整个系统的工作流程,整体性好,效率高,实现了抢答器的智能化。在这过程之中也遇到了一些问题,比如对汇编语言理解还不够,将其转化为 C 语言时在时序上出现一些问题,还有 C 语言基础也需要加强,编程能力有待提高。9 致谢通过此次的课程设计,让我更进一步的巩固了单片机的各种知识。但在设计的过程中,遇到了很多的问题,有一些知识已经不太清楚了,但是通过一些资料又重新的翻阅并且认真的复习了相关教科书中的内容。此次的课程设计树立了对自己工作能力的信心,相信会对今后的学习工作生活都有非常重要的影响,
16、而且大大的提高了动手能力,使我充分的体会到了创造过程中的探索的艰难和成功的喜悦。虽然这次做出的作品还存在很多需要改进的地方,但是在整个设计过程中所学习到的东西是这次实训所得到的最大收获跟财富,使我终身受益。最后,我要感谢指导老师老师和杨浩辉同学在我将系统的汇编语言改为C 语言时对我无私的帮助。器件名称 规格型号 数量微处理器 AT89C51 1极性电容 1uF 1电阻(排阻) RESPACK8 9电容 10uF 2晶振 12MHZ 1按钮 15液晶显示屏 LM020L 1扬声器 BUZZER 1西安文理学院课程设计报告第 9 页10 参考文献【1】戴梅蕚 史嘉权 编著, 微型计算机技术及应用
17、(第四版)清华大学出版社,北京,2008.3【2】 (美)Bruce Eckel 著 陈昊鹏 译JAVA 编程思想 (第四版) ,机械工业出版社,北京,2007.6(2013.11 重印)【3】冯博琴 吴宁 主编, 微型计算机原理与接口技术 (第三版) ,清华大学出版社,北京密云胶印厂,2011.6【4】张毅刚等 编著, 新编 MSC-51 单片机应用设计 (第三版) ,哈尔滨工业大学出版社,哈尔滨东林印务有限公司,2008.4西安文理学院课程设计报告第 10 页附录一 系统电路图图附录 系统电路图附录二 程序清单#include /包含单片机的头文件#include /包含_nop_()函数
18、定义的头文件sbit RS=P20; /寄存器选择位,将 RS 位定义为 P2.0 引脚sbit RW=P21; /读写选择位,将 RW 位定义为 P2.1 引脚sbit E=P22;sbit ring=P36;sbit start=P30;sbit ok=P31; sbit add=P34;sbit sub=P35;sbit D0=P10;sbit D1=P11;sbit D2=P12;sbit D3=P13;sbit D4=P14;sbit D5=P15;sbit D6=P16;西安文理学院课程设计报告第 11 页sbit D7=P17;unsigned char num=0;unsign
19、ed char a=30,b=60,n=0,qd,hd,d;void display();void delay1ms()unsigned char i,j; for(i=0;i10;i+)for(j=0;j33;j+); void delay(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();void nopp(unsigned char n)unsigned char i;for(i=0;in;i+)_nop_();bit lcd_bz()bit result;RS=0; /根据规定, RS 为低电平,RW 为高电平时,可以读状
20、态RW=1;E=1; /E=1,才允许读写nopp(4); /空操作四个机器周期,给硬件反应时间 result=(bit)(P0 /将忙碌标志电平赋给 resultE=0;return result;void WriteInstruction (unsigned char dictate) while(lcd_bz()=1); /如果忙就等待RS=0; /根据规定,RS 和 R/W 同时为低电平时,可以写入指令RW=0; E=1; /E 置低电平nopp(2); /空操作两个机器周期,给硬件反应时间P0=dictate; /将数据送入 P0 口,即写入指令或地址nopp(4); /空操作四个机
21、器周期,给硬件反应时间E=1; /E 置高电平(正跳变)西安文理学院课程设计报告第 12 页nopp(4);/空操作四个机器周期,给硬件反应时间E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令void WriteData(unsigned char y)while(lcd_bz()=1); RS=1; /RS 为高电平,RW 为低电平时,可以写入数据RW=0;E=1; /E 置低电平P0=y; /将数据送入 P0 口,即将数据写入液晶模块nopp(4);/空操作四个机器周期,给硬件反应时间E=1; /E 置高电平(正跳变)nopp(4);/空操作四个机器周期,给硬件反应时间E=
22、0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令void LcdInitiate(void)delay(15); /延时 15ms,首次写指令时应给 LCD 一段较长的反应时间WriteInstruction(0x30); /显示模式设置:8 位数据,162 显示,57 点阵, delay(5); /延时 5msWriteInstruction(0x38); delay(5); WriteInstruction(0x0c); /显示模式设置:显示开,有光标,光标闪烁delay(5);WriteInstruction(0x06); /显示模式设置:光标右移,字符不移delay(5);
23、WriteInstruction(0x01); /清屏幕指令,将以前的显示内容清除delay(5);void Display(unsigned char string) unsigned char i;i = 0;while(stringi != 0) / 显示字符WriteData(stringi);i+;/*void bark()ring=1;delay(10);ring=0;西安文理学院课程设计报告第 13 页 */void answer()ring=1;delay(500);ring=0;WriteInstruction(0x01);delay(1);Display(“ go! “);
24、TR1=1 ;qd=1;d=a;while(1)/TR0=1;if(!D0)n=1;break;if(!D1)n=2; break;if(!D2)n=3;break; if(!D3)n=4; break; if(!D4)n=5;break; if(!D5)n=6;break; if(!D6)n=7;break; if(!D7)n=8;break;WriteInstruction(0x01);switch(n) case 1:Display(“ number:1 “);hd=1;break;case 2:Display(“ number:2 “);hd=1;break; case 3:Displ
25、ay(“ number:3 “);hd=1;break;case 4:Display(“ number:4 “);hd=1;break;case 5:Display(“ number:5 “);hd=1;break;case 6:Display(“ number:6 “);hd=1;break;case 7:Display(“ number:7 “);hd=1;break;case 8:Display(“ number:8 “);hd=1;break; n=0;西安文理学院课程设计报告第 14 页/WriteInstruction(0x01);delay(5000);d=b;while(d+1
26、) ; void display()unsigned char tm3=0x20,0,0;unsigned char a1,b1;a1=d/10;tm1=a1+0x30;b1=d%10;tm2=b1+0x30;WriteInstruction(0x01);delay(1);Display(tm);void main(void) /主函数TMOD=0X11; /选择定时器方式 1 TH0=0X00; /给定时器赋处置TL0=0XFF; TH1=0X3C; TL1=0XB0;EA=1;ET1=1; /开总中断EX0=1;ET0=1; EX1=1;TR1=1;LcdInitiate(); /调用 L
27、CD 初始化函数 Display(“ready“);while(1) if(start)if(!(D0delay(1);Display(“ error “);ring=1;delay(500);ring=0;delay(500);西安文理学院课程设计报告第 15 页WriteInstruction(0x01); else answer(); void Int0() interrupt 0 /中断服务程序 WriteInstruction(0x01);Display(“ setting qd_tm“);delay(1000);WriteInstruction(0x01);d=a;display(
28、);while(1)if(!add) a+;d=a;display();delay(500);else if(!sub) a-;d=a;display();delay(500);if(!ok)break; void T0_timer() interrupt 1 /中断服务程序 TH0=0X00;TL0=0XFF;ring=0; void Int1() interrupt 2 /中断服务程序 WriteInstruction(0x01);delay(1);Display(“ setting hd_tm“);delay(1000);WriteInstruction(0x01);d=b;display();西安文理学院课程设计报告第 16 页while(1)if(!add) b+;d=b;display();delay(500);else if(!sub) b-;d=b;display();delay(500);if(!ok)break;void T1_timer() interrupt 3 /中断服务程序 TH1=0X3C; /重装初值TL1=0XB0;num+;if(num=20)num=0;display(); d-; if(d=0) TR1=0 ;ring=1;delay(500);ring=0;