1、课程设计(论文)题 目 名 称 多路数字抢答器设计 课 程 名 称 单片机原理及其应用 学 生 姓 名 学 号 系 、专 业 指 导 教 师 2013年 6月 24日摘 要近年来随着科技的飞速发展单片机的应用正在不断深入同时带动传统控制检测日新月异。此次设计提出一种用AT89C51单片机作为核心控制元件与电阻、液晶显示屏、蜂鸣器等构成硬件操作再利用C语言编程来控制抢答器的功能实现。本论文对抢答器的背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍使我们不仅对抢答器的原理及设计有了深入的了解也对单片机的设计研发过程有了更加深刻的体会。 本次设计的系统主要采用单片机控制、采用手动抢答的方式。有
2、人抢答后,系统自动封锁其他选手的抢答按钮,使其不再抢答,从而实现抢答功能。该系统还增加了抢答倒计时功能,可以调整。通过自主的设计、编程和调试出一个简单的四路抢答并在液晶屏显示抢答成功者号码;熟悉C语言编程;了解单片机仿真系统的使用方法,达到提高综合运用相关知识的能力;进一步熟悉和掌握Proteus7的使用方法;掌握单片机系统设计全部过程的目的。关键字: 抢答 单片机 液晶屏显示目 录第1章 前言1第2章 方案设计2第3章 硬件电路的工作原理33.1抢答器的电路图33.2 液晶屏显示电路33.3按键控制电路3第4章 软件设计54.1软件编程54.2系统调试和结果分析6总 结10参考文献11附录1
3、 源程序12第1章 前言电子技术和微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。因此一块芯片就构成了一台计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的
4、同时又增加一系列的实用功能。并简化其电路结构。控制系统的三个模块为:显示模块、存储模块、抢答开关模块。该系统通过开关电路四个按键输入抢答信号,利用1602液晶屏来完成显示功能,用按键来让选手进行抢答,在液晶屏上显示抢答最快的号码及时间,从而实现整个抢答过程。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。系统工作原理本系统采用AT89C52单片机作为核心。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号,单片机控制的智能抢答器设计。第2章 方案设计抢答器的设计方案要实现以下功能:(1)抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 S3表示。(
5、2)设置一个系统清除S1和抢答控制开关S2,该开关由主持人控制。(3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在1602液晶屏上显示,同时蜂鸣器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)。当主持人启动开始键后,定时器进行减计时 (5)如果定时时间已到,无人抢答,本次抢答无效,系统禁止抢答,定时显示器上显示01s。该设计采用AT89C52单片机作为控制系统核心。该系统可以完成信号识别,运算控制以及显示功能。抢答器的工作原理是采用单片机最小系统,用查询式键盘进行
6、抢答。通过抢答按键模块,连接按键进行抢答。此电路完成的功能如图1所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在液晶屏上显示相应的号码,并锁存,同时禁止其他按钮的输入。系统是采用模块化设计的智能抢答器,主控与参赛者设为终端分系统。主控分系统有:开始与结束控制按钮、时限设定、各种相关显示调控功能等。参赛者分系统设有:抢答按纽、计时显示、提示功能等。图1 抢答器原理图第3章 硬件电路的工作原理3.1抢答器的电路图如图(2)所示为电路
7、图,其工作原理为:接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,选手要在规定时间内完成抢答;定时器倒计时优先判断,编号锁存,扬声器提示。 图2 抢答器仿真电路图3.2 液晶屏显示电路使用液晶屏显示抢答成功者号码、时间。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。3.3按键控制电路键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生
8、键码。在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。独立式键盘,键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。如图3所示。图3 独立式键盘原理图最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形
9、式的键盘结构简单,按键识别容易。独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。第4章 软件设计4.1软件编程 本设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。本次设计的主程序中包括时钟
10、设计程序,定时器中断子程序,数码管显示程序以及按键控制子程序。抢答器主流程图如图4所示: 图4 抢答器主程序流程图抢答器定时中断流程图如图5:图5 抢答器定时器中断流程图4.2系统调试和结果分析系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。
11、这种调试可单独模拟进行,也可通过开发装置由软件配合进行。硬件联机调试则必须在系统软件的配合下进行。软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研
12、制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。具有清零装置和抢答控制,可由主持人操纵。具有定时功能,在10S内无人抢答表示所有参赛选手对本题弃权。10S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。电路中的六个按键从上到下分别是清零键、开
13、始键和四组选手的按键。仿真现象及调试结果如图6、图7、图8所示。1)图6为主持人按下清零键后的截图,此时液晶屏两项均显示0.1)运行设计,等待主持人开始。如图6:图62)主持人按下启动键后的截图,液晶屏显示从10秒开始倒计时。如图7: 图73)选手按下时的截图,显示对应的选手编号,例如3号选手,如图8所示: 图8总 结这次课程设计是基于单片机设计多路数字抢答器,让我对单片机学习也有了更深刻的认识,只有打下良好的基础才会学以致用,才会发挥出作用。在本次课程设计过程中遇到了许多困难,PROTEUS做出的仿真效果不符合要求,用C语言编写的程序也出现问题,令人头疼不已,后来在经过查找相关资料,在老师同
14、学的帮助下,终于改正了错误。完成这次课程设计,让我深刻的认识是单片机对于我们专业的重要性,我对单片机的学习还是不够精通,有了这次课程设计的体会,我一定会利用课余时间更深的了解单片机知识 。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准,所以这个课程设计对我们的作用是非常大的。经过二个星期课程设计制作,过程曲折可谓一波三折,点点滴滴无不令我回味无穷。没有经过实践永远都不会知道结果是怎样的,当实践的结果证实了你要得到的结论时那种心情真是不知如何表达。我也非常的坚信只要付出了一定会有收获,并且这个过程是很美的享受!汗水预示着结果也见证着收获。通过本次课程设计,我真正感受到了那种
15、快乐和喜悦!并且懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在此我非常要感谢的是我的指导老师刘伟春老师,感谢老师的细心认真的辅导,教给我许多原来不知道的知识。这次课程设计能够顺利的完成,当然有我个人的努力,但同时也离不开指导老师的答疑解惑和同学的帮助。参考文献 1 李泉溪. 单片机原理与应用实例仿真.北京航天航空大学出版社 2009年2 江世明. 基于Proteus的单片机应用技术. 电子工业出版社 2008年3 喻宗泉. 单片机原理与应用技术.西安电子科技大
16、学出版社 2005年4 万光毅. 单片机实验与实践教程. 北京航天航空大学出版社 2003年附录1 源程序#include#define uchar unsigned char#define uint unsigned intuchar num;/定义中断变量,num计满20表示1秒时间到uchar num1;/十秒倒计时显示初始值uchar flag1,flag2;/清零键及开始键按下标志位uchar flag3,flag4=0;/定义键盘按下标志位#define LCDPORT P0sbit LCD1602_RS = P20;sbit LCD1602_EN = P21;sbit sp=P2
17、2;/定义蜂鸣器端口sbit clear=P10;/定义清零键sbit start=P11;/开始键sbit key1=P12;sbit key2=P13;sbit key3=P14;sbit key4=P15;/key1到key4为选手按键void delay(uint z)/延时函数uint i,j;for(i=z;i0;i-)for(j=110;j0;j-);void WriteCmd_1602(unsigned char cmd)LCD1602_RS = 0;LCDPORT = cmd;delay(1);LCD1602_EN = 1;delay(1);LCD1602_EN = 0;vo
18、id WriteByte_1602(unsigned char date)LCD1602_RS = 1;LCDPORT = date;delay(1);LCD1602_EN = 1;delay(1);LCD1602_EN = 0;void Init_1602()LCD1602_EN = 0;WriteCmd_1602(0x38);WriteCmd_1602(0x0c); /光标不显示地址 WriteCmd_1602(0x06);WriteCmd_1602(0x01);void beep()/定义蜂鸣器函数sp=0;delay(500);sp=1;/delay(500);void dis(uch
19、ar * p)while(*p != 0)WriteByte_1602(*p+);void display_init()WriteCmd_1602(0x80);dis(Serial Number:);WriteCmd_1602(0x80 + 0x40);dis(Surplus Time:);WriteCmd_1602(0x80 + 0x40 + 13);dis(00s);void display_num(uchar a) /选手编号显示函数 WriteCmd_1602(0x80 + 15);WriteByte_1602(a);void clr()/清零函数(主持人按下清零键后数码管显示0) W
20、riteCmd_1602(0x80 + 15);WriteByte_1602(0);void dis10s()/十秒倒计时显示函数uchar shi,ge;shi=num1/10;ge=num1%10;WriteCmd_1602(0x80 + 0x40 + 13);WriteByte_1602(shi + 0x30);WriteCmd_1602(0x80 + 0x40 + 14);WriteByte_1602(ge + 0x30); void player()/选手按键检测函数if(key1=0&flag4=0)delay(10);if(key1=0&flag4=0)display_num(1
21、);TR0=0;flag1=flag2=0;flag4=1;beep();while(!key1);if(key2=0&flag4=0)delay(10);if(key2=0&flag4=0)display_num(2);TR0=0;flag1=flag2=0;flag4=1;beep();while(!key2);if(key3=0&flag4=0)delay(10);if(key3=0&flag4=0)display_num(3);TR0=0;flag1=flag2=0;flag4=1;beep();while(!key3);if(key4=0&flag4=0)delay(10);if(k
22、ey4=0&flag4=0)display_num(4);TR0=0;flag1=flag2=0;flag4=1;beep();while(!key4);void keyscan()/检测按键if(clear=0&flag2!=1)/判断清零键,判断语句的作用是按下开始键清零键失效delay(10);if(clear=0&flag2!=1)while(!clear);/等待按键释放flag1=0;flag2=0;flag3=0;flag4=0;num=0;num1=10;clr();/清零flag1=1;/按下清零键标志位if(flag1=1)/如果按下清零键if(start=0&flag3=
23、0)/判断开始键,判断语句的作用是按下开始键后开始键失效delay(10);if(start=0&flag3=0)flag2=1;flag3=1;while(!start);if(flag2=1)/按下开始键TR0=1; /启动定时器0dis10s();player();void main()TMOD=0x01;/设置定时器0工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1; /开定时器0中断Init_1602();display_init();while(1)/一直检测按键keyscan();void T0_ser() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;num+;if(num=20)num=0;num1-;if(num1=0)TR0=0; flag1=0;flag2=0;num=0;num1=10;clr();beep();16