工程大学机电学院课程设计说明书课程设计名称: 单片机原理与应用课程设计题目:基于单片机的四路抢答器的设计指 导 教 师: 王XX 专 业 班 级:电气2124班学 生 姓 名: 武云 学 号:2 起 止 日 期:2014/7/7—7/18总 评 成 绩:课程设计任务书设计目的:设计一个基于单片机的四路抢答器包含计时和锁存功能设计要求:(1)抢答器同时供4名选手或4个代表队比赛,分别用4个按钮① ~ ④表示2)设置一个系统清除S1和抢答控制开关S2,该开关由主持人控制3)抢答器具有锁存与显示功能即选手按动按钮,锁存相应的编号,并在1602液晶屏上显示,同时蜂鸣器发出报警声响提示选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)当主持人启动"开始"键后,定时器进行减计时 (5)如果定时时间已到,无人抢答,本次抢答无效,系统禁止抢答,定时显示器上显示01s指导教师(签名):年 月 日前言电子技术和微型计算机的迅速发展,促进了微型计算机测量和控制技术的迅速发展和广泛应用,单片机的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。
它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机,抢答器就是常见的单片机随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易与各种智力竞赛等,因此出现了抢答器抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的同时又增加一系列的实用功能并简化其电路结构控制系统的三个模块为:显示模块、存储模块、抢答开关模块该系统通过开关电路四个按键输入抢答信号,利用1602液晶屏来完成显示功能,用按键来让选手进行抢答,在液晶屏上显示抢答最快的与时间,从而实现整个抢答过程本文主要介绍了单片机抢答器设计与工作原理,以与它的实际用途系统工作原理本系统采用AT89C51单片机作为核心工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号,单片机控制的智能抢答器设计基于单片机的四路抢答器摘要抢答器可以在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答成功者通过抢答者的指示灯、液晶屏显示和声音显示等手段指示出第一抢答者。
一般抢答器由单片机以与外围电路组成,分为四路、八路等不同,四路和八路的差别是,抢答器背面的接口有几组,和外形基本没有关系本设计是以四路抢答为基本理念利用AT89C51单片机与外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时能够正确地显示时间用开关做键盘输出,扬声器发生提示同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答无效;正确按键后有声音提示;抢答时间倒记时显示,满时后系统计时自动停止与主控强制复位;按键锁定,在有效状态下,按键无效关键字:液晶屏, AT89C51,按键Four Way Responder Based on Single Chip MicrocomputerABSTRACTResponder can contest, sports and entertainment activities (Responder activities), and accurate, impartial and visually determine the answer winner. Answer by those lights, LCD display and sound display means indicates that the first answer those. General Responder by the microcontroller and peripheral circuits, divided into four differences, such as different eight, four, and eight is the answer in the back of the interface has several groups, and the shape does not matter. The design is based on four basic concepts answer. Use AT89C51 microcontroller and peripheral interface Responder system, using single-chip timer / counter timing and counting principle, the software and hardware organically combined, allows the system to be timed correctly, and be able to display the time correctly. Switch to do with the keyboard output, speaker occur tips. And the system can be achieved: In answer, the only answer is only valid after the start, if the answer before the start, is invalid; the correct key voice prompts; Responder time countdown display, the timer stops automatically when the system is full and the master forced reset; keys locked in the active state, the key is invalid.Keywords: LCD display, AT89C51,Button目录第1章绪论71.1引言71.2方案设计8第2章硬件电路的工作原理92.1 51单片机的功能简介92.2液晶屏显示电路102.3时钟频率电路112.4 复位电路122.5 报警电路12第3章软件设计流程13第4章系统调试和结果分析16小结18参考文献19附录1 元器件清单20附录2 C语言程序21附录3 仿真电路图29第1章 绪论1.1引言随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。
本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气选手们都站在同一个起跑线上,体现了公平公正的原则抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器有的电路较复杂不便于制作,可靠性低,实现起来很困难;有的则用一些专用的集成块,而专用集成块的购买又很困难为适应高校等多代表队单位活动的需要而设计一个多功能抢答器,这种抢答器具有电路简单,元件普通,易于购买等优点,很好地解决了制作者制作困难和难于购买的问题1.2方案设计抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答通过抢答按键模块,连接按键进行抢答此电路完成的功能如图1-1所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。
此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在液晶屏上显示相应的,并锁存,同时禁止其他按钮的输入系统是采用模块化设计的智能抢答器,主控与参赛者设为终端分系统主控分系统有:开始与清零控制按钮、复位按钮、各种相关显示调控功能等参赛者分系统设有:抢答按钮、计时显示、提示功能等时钟电路图1-1抢答器系统结构框图第2章 硬件电路的工作原理2.1 51单片机的功能简介AT89C51是89系列单片机的标准型,它是与MSC-51系列单片机兼容的在部含有4KB或8KB可重复编程的Flash存储器,可进行1000次擦写操作全静态工作为0-24MHZ,有3级程序锁存器,部含有128-256字节的RAM,有32条可编程I/O口线,2-3个16位定时/计数器,6-8个中断源,通用的串行接口,低电压空闲与电源下降方式外部定时元件复位中断电源系统时钟ROMCPU定时/计数器串行I/O口并行I/O口RAM图2-1 AT89C51单片机的部结构图AT89C51单片机部由CPU、4KB的FPEROM ,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成单片微机部最核心的部分是CPU。
CPU主要功能是产生各种控制信号,控制存储器、输入/输出端口的数据传输、数据的算术运算、逻辑运算以与位操作处理等,CPU按其功能可分为运算器和控制器两部分2.2液晶屏显示电路如图2-2,使用液晶屏显示抢答成功者、时间液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以与影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点图2-2 液晶屏显示电路图2.3时钟频率电路单片机必须在时钟的驱动下才能工作在单片机部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机部的各个单元,决定单片机的工作速度时钟电路如图2-3所示图2-3时钟电路图一般选用石英晶体振荡器此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调单片机在工作时,由部振荡器产生或由外直接输入的送至部控制逻辑单元的时钟信号的周期称为时钟周期其大小是时钟信号频率的倒数,常用fosc表示图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。
2.4 复位电路单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图2-4所示:图2-4 复位电路图图2-4中由按键RESET1以与电解电容C3、电阻R2构成按键与上电复位电路由于单片机是高电平复位,所以当按键RESET1按下时候,单片机的9脚RESET管脚处于高电平,此时单片机处于复位状态当上电后,由于电容的缓慢充电,单片机的9脚电压逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电复位完毕,系统程序从0000H开始执行2.5报警电路我们知道,声音的频谱围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音本文设计如图2-5所示,此处用到了单片机23脚的IO端口功能,单片机通过部定时器的操作实现交替变换的波形输出驱动扬声器发声图2-5报警电路图第3章 软件设计流程本次设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰, 便于使用、维护以与调试C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度本次设计的主程序中包括时钟设计程序,定时器中断子程序,数码管显示程序以与按键控制子程序抢答器主流程图如图3-1所示:图3-1 抢答器主程序流程图抢答器定时中断流程图如图3-2:图3-2 抢答器定时器中断流程图第4章 系统调试和结果分析统调试包括硬件调试和软件调试,而且两者是密不可分的我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情况以与是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品软件调试一般包括分块调试和联机调试两个阶段程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。
这时该程序功能块已调试完毕,可去掉附加程序段其它程序功能块可按此法进行调试程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试在联调中如发现硬件问题也应与时修正,直到单片机系统的软件、硬件全部调试成功为止系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果1)图4-1为主持人按下清零键后的截图,此时液晶屏两项均显示0.图4-12)主持人按下启动键后的截图,液晶屏显示从10秒开始倒计时如图4-2:图4-23)选手按下时的截图,显示对应的选手编号,例如2号选手,如图4-3所示:图4-3本设计具有清零装置和抢答控制,可由主持人操纵具有定时功能,在10S无人抢答表示所有参赛选手对本题弃权10S时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答电路中的六个按键从上到下分别是清零键、开始键和四组选手的按键仿真现象与调试结果如图4-1、图4-2、图4-3所示。
小结本文研究与设计的四路多功能抢答器采用了通用的电子元器件,利用AT89C51单片机与外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来相较于传统亮灯指示抢答选手的设计,本次设计中采用了液晶屏显示抢答选手的方式,显示结果更加直观抢答电路中还加入了计时模块与报警模块,在主持人宣布抢答开始打开抢答计时开关的同时,液晶屏显示剩余抢答时间,若倒计时结束仍无人抢答,报警器响起提示主持人时间到并禁止选手抢答这些设计都提高了抢答效率,方便了主持人的操作对于单片机类设计,其硬件电路是比较简单的,主要是解决程序设计中的问题而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力因此在整个设计过程中大部分时间是用在程序上面的很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的当然,在设计过程中由于时间仓促有很多地方难免存在不足之处,硬件设计已经基本完成,在软件设计中有些功能还尚未开发出来我们还可以将设计的扩展功能增强:1、可以增加记分模块,可以设定初始积分,并记录每次抢答完成后的积分。
2、将抢答按键用无线实现,如红外线,使抢答者可以远距离进行抢答,并简化按键模块的线路布置如果提供相应的器材与时间上的宽限,一定可以完成上述扩展功能,进一步完善作品参考文献[1] 于海生等,微型计算机控制技术[M],:清华大学,2008.[2] 郭天祥,51单片机C语言教程——入门、提高、开发、拓展全攻略[M],电子工业[3] The measurement of oil consumption on engine[A].Proceedings of 4th International Symposium on Test and Measurement(Volume 2)[C],2001[4]增生.对《抢答器》的改进[J].电子制作,2000,(12).[5]蔡.单片机控制实习与专题制作[M].:航空航天大学,2006[6]丁建伟.抢答器电路设计[J].工业高等专科学校学报,2008,(04)[7]胡学海.单片机原理与应用系统设计[M].:电子工业,2005附录1元器件清单元件名称型号数量单片机AT89C511电解电容10uf1开关Button7电阻R(200)1电阻R(600)1电阻R(10k)9晶振CRYSTAL1电容10uf2液晶屏16021电源5v2附录2 C语言程序#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 = P2^0;sbit LCD1602_EN = P2^1;sbit sp=P2^2; //定义蜂鸣器端口sbit clear=P1^0; //定义清零键sbit start=P1^1; //开始键sbit key1=P1^2; sbit key2=P1^3;sbit key3=P1^4;sbit key4=P1^5; //key1到key4为选手按键 void delay(uint z) //延时函数{ uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--);}void WriteCmd_1602(unsigned char cmd){ LCD1602_RS = 0; LCDPORT = cmd; delay(1); LCD1602_EN = 1; delay(1); LCD1602_EN = 0; }void 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(uchar * 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){ WriteCmd_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'); 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(key4==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==0) //判断开始键,判断语句的作用是按下开始键后开始键失效 { delay(10); if(start==0&&flag3==0) { flag2=1; flag3=1; while(!start); } } } if(flag2==1) //按下开始键 { TR0=1; //启动定时器0 dis10s(); player(); }}void main(){ TMOD=0x01; //设置定时器0工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 Init_1602(); display_init(); while(1) //一直检测按键 { keyscan(); }}void T0_ser() interrupt 1{ TH0=(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(); }}附录3仿真电路图(1)主持人按下清零键后的截图,此时液晶屏两项均显示0:(2)主持人按下启动键后的截图,液晶屏显示从10秒开始倒计时:(3)选手按下时的截图,显示对应的选手编号,例如2号选手30 / 30。