电子抢答器控制系统的设计.docx
- 文档编号:12547559
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:24
- 大小:839.16KB
电子抢答器控制系统的设计.docx
《电子抢答器控制系统的设计.docx》由会员分享,可在线阅读,更多相关《电子抢答器控制系统的设计.docx(24页珍藏版)》请在冰点文库上搜索。
电子抢答器控制系统的设计
抢答器控制系统的设计
院系:
xxx
姓名:
xxx
学号:
xxx
专业:
xxx
指导教师:
xxx
成绩评定:
摘要
此次设计采用AT89C51单片机为核心控制元件,设计一个简易的抢答器,本方案以AT89C51单片机作为主控核心,与MAX232、发光二极管、数码管、蜂鸣器等构成硬件操作,再利用C语言编程,来控制抢答器的功能实现。
本设计的系统实用性强、判断精确、操作简单、扩展功能强。
关键字:
STC89C52单片机、动态显示、中断
目录
摘要2
1系统方案总体设计4
1.1控制芯片4
1.2数据显示4
1.3原理框图4
2系统硬件设计5
2.1AT89C51的组成及管脚介绍5
2.2电路设计8
2.2.1抢答器电路8
2.2.2发声电路8
2.2.3开始、复位按键输入电路的设计9
2.2.4时钟振荡电路9
2.2.5设定时间、加减时间电路10
2.2.6显示电路11
3系统程序设计11
3.1抢答器工作流程11
3.2流程图12
4Proteus仿真设计12
4.1利用Proteus仿真软件建立系统仿真模型12
4.2开始抢答13
4.3非法抢答13
4.4正常抢答14
参考文献14
附录15
1系统方案总体设计
1.1控制芯片
采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
单片机技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:
a、可靠性好:
单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
b、单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
c、控制功能强:
单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
1.2数据显示
在实现基本功能时,我们采用了四位数码管显示,后两位显示倒计时时间,第一位显示抢答组号,第三位置空,在此基础上还在程序里加了更改抢答时间和倒计时时间的模块,也可通过数码管显示,成为一个比较完整的系统。
1.3原理框图
图1-1原理框图
2系统硬件设计
2.1AT89C51的组成及管脚介绍
AT89C51内部有8个部件组成,即CPU、时钟电路、数据存储器、串行口、并行口(P0~P3)、定时计数器和中断系统,它们均由单一总线连接并被集成在一块半导体芯片上,即组成了单片微型计算机,AT89C51就是MCS-51系列单片机中的一种。
(1)CPU中央处理器
中央处理器是AT89C51的核心,它的功能是产生控制信号,把数据从存储器或输入口送到CPU,或将CPU数据写入存储器或送到输出端口。
还可以对数据进行逻辑和算术的运算。
(2)时钟电路
AT89C51内部有一个频率最大为12MHz的时钟电路,它为单片机产生时钟序列,但需要外接石英晶体做振荡器和微调电容调整频率。
(3)内存
内部存储器可分做程序存储器和数据存储器,但在AT89C51中无片内程序存储器。
(4)定时/计数器
AT89C51有两个16位的定时计数器,每个定时器和计数器都可以设置成定时的方式和计数的方式,但只能用其中的一个功能,以定时或计数结果对计算机进行控制。
(5)并行I/O口
AT89C51有四个8位的并行I/O口,P0,P1,P2,P3,以实现数据的并行输入输出。
(6)串行口
它有一个全双工的串行口,它可以实现计算机间或单片机同其它外设之间的通信,该串行口功能较强,可以作为全双工异步通讯的收发器,也可以作为同步移位器用。
(7)中断控制系统
AT89C51有五个中断源,既外部中断两个,定时计数器中断两个,串行中断一个,全部的中断分为高和低的两个输出级[5]。
AT89C51的制作工艺为HMOS,采用40管脚双列直插式DIP封装,引脚说明如下:
VCC(40引脚)正常运行时提供电源。
VSS(20引脚)接地。
XTAL1(19引脚)在单片机内部,它是一个反向放大器的输入端,该放大器构成了片内的震荡器,可以提供单片机的时钟信号,该是引脚也可以接外部的晶振的一个引脚,如采用外部振荡器时,对于AT89C51此引脚应该接地。
XTAL2(18引脚)在内部,接至上述振荡器的反向输入端,当采用外部振荡器时,对MCS51系列该引脚接收外部振荡信号,即把该信号直接接到内部时钟的输入端。
RST/VPD(9引脚)在振荡器运行时,在此引脚加上两个机器周期的电平将单片机复位,复位后应使此引脚电平保持不高于0.5V低电平以保证AT89C51正常工作。
在掉电时,此引脚接备用电源VDD,以保持RAM数据不丢失,当BVCC低于规定的值时,而VPD在其规定的电压范围内时,VPD就向内部数据存储器日工备用电源。
ALE/PROG(30引脚)当AT89C51访问外部存储器时,包括数据存储器和程序存储器,ALE9地址锁存允许0输入的脉冲的下沿用语锁存16位地址的低8位,在不访问外部存储器的时候,ALE仍有两个周期的正脉冲输出,其频率为振荡器的频率的1/6,在访问外存储器的是候,在两个周期中,ALE只出现一次,ALE断可驱动8个LSTTL负载,对于有片内EPROM的而言,在EPROM编程期间,此脚用于输入编程脉冲PROG。
PSEN(29引脚)此脚输出为单片机内访问外部程序存储器的读选通信号,在读取外部指令期间,PSEN有两次在每个周期有效,在此期间,每当访问外部存储器时,两个有效的PSEN将不再出现,同样这个引脚可驱动8个LSTTL负载。
EA/VPP(31引脚)当EA保持高电平时,单片机访问内部存储器,当PC值超过0FFFH时,将自动转向片外存储器。
当EA非保持低电平时,则只访问外部程序存储器,对8031而言,此脚必须接地。
AT89C51有一个全双工串行口,这个串行口既可以在程序下把CPU的8位并行数据变成串行数据一位一位的从发送数据线发送出去,也可以把串行数据接受来变成并行数据给CPU,而且这种串行发送和接收可以单独进行也可以同时进行。
AT89C51的串行发送和接收利用了P3口的第二功能,利用P3.1做串行数据接收线,串行接口的电路结构还包括了串行口控制寄存器SCON,电源及波特率选择寄存器PCON和串行缓冲寄存器SBUF,他们都属于SFR,PCON和SCON用于设置串行口工作方式和确定数据发送和接收,SBUF用于存放欲发送的数据起到缓冲的作用。
AT89C51的工作方式:
AT89C51的工作方式可以分做复位,掉电和低功耗方式等。
(1)复位方式
单片机复位后,程序计数器PC和SFR的状态。
复位后,PC初始话为0000H,使单片机能从0000H开始执行程序,故单片机除正常工作的程序运行出错或操作出错而导致死机时,需要复位键进行重新启动,复位不影响RAM存放的内容,因为复位操作是在带电的状态下将程序存储器的地址改变,而ALE和PSEN非在复位期间将输出高电平。
RST是复位信号的输入端,RST输入一个有效的高电平旧能使系统复位,当高电平持续24个振荡脉冲周期的时候,单片机完成了复位的操作,假如晶振的频率为6MHZ,则复位信号的持续时间不应小于4us。
复位可以是上电复位,按键手动复位,和二者混合式。
复位信号中的电阻和电容是为了保证RST断能保证两个机器周期以上的高电平来完成复位操作而特意设定的。
(2)掉电和低功耗方式
人们往往在程序运行中发生系统掉电的故障,使RAM和寄存器中的数据内容丢失,使人们丢失珍贵的数据而束手无策,AT89C51有掉电保护功能,是先把有用的数据保存,再用备用电源进行供电。
2.2电路设计
2.2.1抢答器电路
该电路有八个按钮分别接于P1.0~P1.7可实现两个功能:
一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。
如有再次抢答需由主持人将S开关重新置,“清除”然后再进行下一次抢答。
图2-1抢答器电路
2.2.2发声电路
用P3.6口和扬声器相连,主持人将控制开关拨到"开始"位置时,会发声,抢答电路和定时电路进人正常抢答工作状态;当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。
图2-2发声电路
2.2.3开始、复位按键输入电路的设计
复位是计算机的一个重要工作状态。
开始和复位键分别接于P3.0和P3.1口,在单片机工作时,接电之前,断电后也要复位。
在抢答器中复位则为定时做铺垫,在抢答之前要复位,抢答完也要复位。
按了复位键,显示屏的状态是“start”。
图2-3开始、复位电路
2.2.4时钟振荡电路
CPU的操作需要精确的定时,可用一个晶体振荡器产生稳定的时钟脉冲来控制AT89C51单片机上的XTAL1和XTAL2分别为振荡电路的输入和输出。
图2-4时钟振荡电路
2.2.5设定时间、加减时间电路
该电路主要是对答题时间和抢答时间调整设计的,抢答时间接P3.2,答题时间接P3.3,加一秒接P3.4,减一秒接P3.5
图2-5加减时间电路
2.2.6显示电路
图2-6显示电路
3系统程序设计
3.1抢答器工作流程
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P3.0按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。
当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。
接通电源后,液晶显示屏显示“Ready„„”,抢答器处于禁止状态,处于等待开始状态,此时有人抢答,会显示“error”,也可以调整抢答时间和回答问题时间,;主持人将开关置,“开始”状态,宣布“开始”抢答器工作,显示屏显示“go!
”,扬声器给出声响提示,定时器倒计时;选手在定时时间内抢答时,抢答器完成,显示组号,并且倒计时,时间到扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"开始、停止"状态开关。
3.2流程图
图3-1流程框图
4Proteus仿真设计
4.1利用Proteus仿真软件建立系统仿真模型
图4-1仿真模型
4.2开始抢答
图4-2开始抢答
4.3非法抢答
图4-3非法抢答
4.4正常抢答
图4-4正常抢答
参考文献
【1】(美)BruceEckel著陈昊鹏译《JAVA编程思想》(第四版),机械工业出版社;
【2】冯博琴吴宁主编,《微型计算机原理与接口技术》(第三版),清华大学出版社;
【3】张毅刚等编著,《新编MSC-51单片机应用设计》(第三版),哈尔滨工业大学出版社;
【4】戴梅蕚史嘉权编著,《微型计算机技术及应用》(第四版)清华大学出版社。
附录
C语言程序设计
#include
#include
sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚
sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚
sbitE=P2^2;
sbitring=P3^6;
sbitstart=P3^0;
sbitok=P3^1;
sbitadd=P3^4;
sbitsub=P3^5;
sbitD0=P1^0;
sbitD1=P1^1;
sbitD2=P1^2;
sbitD3=P1^3;
sbitD4=P1^4;
sbitD5=P1^5;
sbitD6=P1^6;
sbitD7=P1^7;
sbitD7=P1^7;
unsignedcharnum=0;
unsignedchara=30,b=60,n=0,qd,hd,d;
voiddisplay();
voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
voiddelay(unsignedcharn)
{
unsignedchari;
for(i=0;i delay1ms(); } voidnopp(unsignedcharn) { unsignedchari; for(i=0;i _nop_(); } bitlcd_bz() { bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1;//E=1,才允许读写 nopp(4);//空操作四个机器周期,给硬件反应时间 result=(bit)(P0&0x80);//将忙碌标志电平赋给result E=0; returnresult; } voidWriteInstruction(unsignedchardictate) { while(lcd_bz()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=1;//E置低电平 nopp (2);//空操作两个机器周期,给硬件反应时间 P0=dictate;//将数据送入P0口,即写入指令或地址 nopp(4);//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平(正跳变) nopp(4);//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } voidWriteData(unsignedchary) { while(lcd_bz()==1); RS=1;//RS为高电平,RW为低电平时,可以写入数据 RW=0; E=1;//E置低电平 P0=y;//将数据送入P0口,即将数据写入液晶模块 nopp(4);//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平(正跳变) nopp(4);//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } voidLcdInitiate(void) { delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x30);//显示模式设置: 8位数据,16×2显示,5×7点阵, delay(5);//延时5ms WriteInstruction(0x38); delay(5); WriteInstruction(0x0c);//显示模式设置: 显示开,有光标,光标闪烁 delay(5); WriteInstruction(0x06);//显示模式设置: 光标右移,字符不移 delay(5); WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delay(5); } voidDisplay(unsignedcharstring[]) { unsignedchari; i=0; while(string[i]! ='\0') {//显示字符 WriteData(string[i]); i++; } } /*voidbark() { ring=1; delay(10); ring=0; }*/ voidanswer() { ring=1; delay(500); ring=0; WriteInstruction(0x01); delay (1); Display("go! "); 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) { case1: Display("number: 1");hd=1;break; case2: Display("number: 2");hd=1;break; case3: Display("number: 3");hd=1;break; case4: Display("number: 4");hd=1;break; case5: Display("number: 5");hd=1;break; case6: Display("number: 6");hd=1;break; case7: Display("number: 7");hd=1;break; case8: Display("number: 8");hd=1;break; } n=0; //WriteInstruction(0x01); delay(5000); d=b; while(d+1); } voiddisplay() { unsignedchartm[3]={0x20,0,0}; unsignedchara1,b1; a1=d/10; tm[1]=a1+0x30; b1=d%10; tm[2]=b1+0x30; WriteInstruction(0x01); delay (1); Display(tm); } voidmain(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();//调用LCD初始化函数 Display("ready......"); while (1){ if(start) { if(! (D0&D1&D2&D3&D4&D5&D6&D7)) { WriteInstruction(0x01); delay (1); Display("error"); ring=1; delay(500); ring=0; delay(500); WriteInstruction(0x01);} } else answer(); } } voidInt0()interrupt0//中断服务程序 { WriteInstruction(0x01); Display("settingqd_tm"); delay(1000); WriteInstruction(0x01); d=a; display(); while (1) {if(! add) {a++; d=a; display(); delay(500);} elseif(! sub) {a--;d=a; display(); delay(500);} if(! ok) break;} } voidT0_timer()interrupt1//中断服务程序 { TH0=0X00; TL0=0XFF; ring=0; } voidInt1()interrupt2//中断服务程序 { WriteInstruction(0x01); delay (1); Display("settinghd_tm"); delay(1000); WriteInstruction(0x01); d=b; display(); while (1) {if(! add) {b++; d=b; display(); delay(500); } elseif(! sub) {b--;d=b; display(); delay(500);} if(! ok) break; } } voidT1_timer()interrupt3//中断服务程序 { TH1=0X3C;//重装初值 TL1=0XB0; num++; if(num==20) { num=0; display(); d--; } if(d==0) {TR1=0; ring=1; delay(500); ring=0;} }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 抢答 控制系统 设计