基于AT89S52单片机的抢答器设计Word文档下载推荐.docx
《基于AT89S52单片机的抢答器设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机的抢答器设计Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
![基于AT89S52单片机的抢答器设计Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-2/3/727d9373-56cf-4a69-bdfc-270f8877715f/727d9373-56cf-4a69-bdfc-270f8877715f1.gif)
1任务提出与方案论证
1.1设计要求
此设计采用AT89S52单片机为核心控制元件,结合数码管、蜂鸣器、发光二极管等器件构成一个简易的六路抢答器。
利用了单片机的延时电路、按键复位电路、时钟电路、定时中断等电路,设计的抢答器具有实时显示抢答。
具体要求如下:
1、设计一个可供6人进行的抢答器。
设置一个控制开关,用来控制系统的结束和抢答的开始。
2、抢答器具有数据锁存和显示的功能。
抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管行显示出选手的编号,同时扬声器给出音响提示。
此外,要封锁输入电路,禁止其他选手抢答。
优先抢答选手的编号一直保持到主持人将系统结束,然后重新开始为止。
3、抢答器具有定时抢答的功能,且一次抢答的时间设定30s。
当启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出声响。
4、参赛选手在设定的时间内抢答,抢答有效,定时显示器停止工作,显示器上分别显示选手的编号和抢答时刻的时间,并保持到将系统结束为止。
5、如果定时器抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00,按复位键清零。
1.2方案论证
方案一:
用以AT89S52为核心的单片机控制方案,通过相应的程序,并通过按键来进行电平识别,再由单片机输出相应的程序,并将相应数值通过数码来显示,运用这个方案来实现题目的要求,其硬件电路的设计简单,编程并不是很复杂,作品功能的调试只要稍微结合电路,修改一下相应程序即可。
方案二:
采用数字电路实现输出电压的控制方案,用加减计数器,通过加减键实现加计数或减计数,通过计数器的自动加减,锁存器的锁存显示等。
用这种方法来实现,其优点是不用编程,但其不足的之处是电路复杂,焊接工程量大,一旦焊接错误,就会给检查硬件带来很大的麻烦,而且调试也相对麻烦。
通过比较发现,用单片机来制作的抢答器,硬件电路比较简单,容易明白,且成本相对较低;
而用数电芯片来制作的抢答器,电路相对比较复杂,,成本相对较高。
综合考滤,最终选择方案一。
2总体设计
2.1AT89S52单片机介绍
AT89S52单片机内部包含了作为微型计算机所必须的基本功能部件,各功能部件相互独立的集成在同一块芯片上。
在此主要介绍AT89S52单片机的系统结构及其功能。
如图2-1所示。
图2-1AT89S52
2.1.1主要性能
本方案所使用的主要芯片是AT89S52,它与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
2.1.2功能特性描述
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提
供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.1.3引脚介绍
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;
在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体见表2-1。
在flash编程和校验时,P1口接收低8位地址字节。
表2-1P1的第二功能
引脚号
第二功能
P1.0
T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.2硬件电路总框图
该系统的方框图如图2-2所示,在AT89S52单片机的P1口接上六个开关用于六路抢答;
在RST脚接复位开关用于清零;
在P3.0口接蜂鸣器用于开始提示和超时后报警;
P2口接红色六个发光二极管;
在P0口接三个数码管用于显示倒计时时间和抢答者的编号。
该系统还包括电源部分和振荡器部分。
图2-2系统原理框图
2.3程序系统结构图
在本设计中包括了以下六个主要的程序:
主程序;
非法抢答程序;
倒计时程序;
正常抢答处理程序;
犯规处理程序;
显示及发声程序。
主流程图如2-3所示:
图2-3外部中断0流程图
3详细设计
本设计分为硬件设计和软件设计,这两者相互结合,不可分离;
从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。
只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务,随着集成电路技术的飞速发展,各种功能很强的芯片不断出现,使硬件电路的集成度越来越高,硬件设计的工作量在整个项目中的所占的比重逐渐下降。
3.1硬件设计及其功能介绍
为使硬件电路设计尽可能合理,应注意以下几方面:
(1)尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。
(2)留有设计余地。
在设计硬件电路时,要考虑到将来修改扩展的方便。
因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。
(3)程序空间,选用片内程序空间足够大的单片机,本设计采用AT89S52单片机。
(4)I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。
如有些新的信号需要采集,就必须增加输入检测端;
有些物理量需要控制,就必须增加输出端。
如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。
3.1.1系统原理图
如图3-1,P1.1-P1.6为六路抢答输入,数码管段选P0口,蜂鸣器输出为P3.0口。
图3-1系统原理图
3.1.2输入电路
抢答器输入信号由六个小按键控制,六个按键连接在P1口当有键按下的时候,就产生了有效的输入信号,使与这个按键相连的引脚变为低电平,产生一个低电平的输入信号,如图3-2。
图3-2键盘输入
它们各自有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;
矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。
3.1.3时钟电路
单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,外接晶体以及电容C1和C2构成并联谐振电路接在放大器的反馈回路中,决定单片机的工作速度。
如图3-3。
图3-3时钟电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;
二是对振荡器的频率进行微调。
电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性,晶体频率可在1.2MHz~12MHz之间任选,电容C1和C2的典型值在20pF~100pF之间选择。
C1,C2的典型值为30PF。
3.1.4复位电路
89S52的复位输入引脚RST为89S52提供了初始化的手段,可以使程序从指定处开始执行,在89S52的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作。
只要RST保持高电平,则单片机循环复位。
只有当RST由高电平变低电平以后,89S52才从0000H地址开始执行程序。
本系统采用按键复位方式的复位电路。
如图3-4。
图3-4复位电路
值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。
软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.1.5LED发光电路
6个红色发光二极管和6个电阻组成,与输入电路6个按键相对应,任一按键有效时则相对应的二极管显示红灯。
如图3-5。
图3-5LED发光电路
3.1.6数码管显示电路
显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。
如图3-6。
图3-6数码显示电路
该部分由两个共阳极LED数码管和一个带公共端的8电阻排组成,用来显示抢答器信号的具体路数和倒计时,数码管的使能端接到P1.6和P1.7,其余7个引脚分别单片机P0口相连,根据单片机引脚与数码管的连接关系,可以列出显示不同数字的段选码。
从而准确的输出抢答路数和时间。
3.1.7发声电路
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。
如图3-7。
图3-7发声电路
3.2软件实现及其仿真
系统软件由主程序、定时中断程序和INT0中断服务程序组成。
主程序的功能主要是完成内部各寄存单元的初始化,对接口电路的初始化,内部定时器的初始化,中断的初始化及调用显示程序对初始状态的显示以及对外部信号的等待处理,也就是说完成前期的准备工作等待随时对外部信号进行响应。
系统完成初始化后,循环检查各个功能,当开始键按下,外部中断0开始执行,定时器开始30秒倒计时,同时也判断是否有抢答键按下,当倒计时时间到或着有人抢答,单片机进入相应的功能处理。
本次作品的调试是通过单片机和编写程序来调试的。
首先,把编好的程序稍入单片机中,在利用单片机放到我们的电路板里进行每项功能的校验与调试,刚开始时我们的电路有些问题,经过修改电路后在重新调试才出功能,需要每实现一个功能就并入另外一个功能,最后使它们完整的结合在一起才算成功。
具体操作:
1、主持人按下开始键,显示抢答时间从30的倒计时,同时扬声器响,显示如图3-8所示;
图3-8
2、3号选手按下键抢答成功,数码管显示3号,并且对应的3号发光二极管发亮,立即进入答题状态如图3-9所示;
图3-9
3、若6位选手均未能在设定时间内正常抢答,系统同样进入报警状态,最后4秒数码管闪烁着显示,本系统所有的报警时间都设置为4s,30S时间结束后回到零状态,如图3-10所示。
图图3-10
综合各个测试合果,发现完全符合题目的要求,所以所有测试完全成功。
4总结
通过一个月的努力,我们顺利的完成了抢答器的制作,成功的完了此次实训,此次实训相对来说程序比较多,也有很多值得我们去学习的地方。
从作品的构思、整体调试这是一个比较复杂的过程,这是一次对我们的考验,这是给我们的一个锻炼机会。
我们很珍惜此次实训,用心的去完成每个步骤,努力去达到所要得到的理想效果。
作品完成了,我感觉到我们的各方面的能力都上了一层,包括画硬件电路图、画流程图、编程、设置等等。
实训能促进我们的进步,能够使我们对学习本专业增加信心,锻炼了我们各方面的能力。
下面说说我在做个系统的时候遇到的问题:
自己对单片机的程度设计还不是非常得心应手,应该努力恶补一下。
对电路不熟悉,对电路的不熟悉在设计过程中成为了我的绊脚石。
编程时不够仔细,往往一个小错误就导致了功能不能实现。
除了遇到的问题一一解决之外,我还学到了非常多的东西,我发现单片机的是非常强大,什么事情都能做,我还在设计之余学习了单片机的目前发展规律和市场,希望以后自己在这方面做做文章。
参考文献
[1]胡汉才.单片机原理及其接口技术(第二版)[M].北京:
清华大学出版社,2004
[2]周坚.单片机C语言轻松入门[M].北京:
航空航天大学出版社
[3]王文峰.数码显示六路抢答器的设计[J].井冈山师范学院学报.2000.05:
20-21
[4]陈越等.ISD全系列单片语音录放电路设计与应用[M].电子工业出版社.2005
[5]杨晓辉、张彤、姜俊海.智能抢答器的设计与制作[J].长春大学学报.2000.06:
24-25
源程序:
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
uchart,m,dd,temp=0xfe;
sbitd1=P3^0;
bitflag1,flag2;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
ucharcodedz[]={0xdb,0xee,0xed,0xeb,0xe7,0xde,0xdd,0xd7};
voidinti();
voidjc();
voiddelay(uchar);
voidxs();
voidbuzzer();
main()
{
while
(1)
{
inti();
while(flag2)
{
xs();
jc();
}
}
}
voidinti()
EA=1;
TMOD=1;
ET0=1;
ET1=1;
TR1=1;
EX0=1;
IT0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
P2=0xff;
dd=0;
flag2=1;
flag1=0;
voidjc()
ucharg,s;
P3=0x0f;
delay(10);
if(P1!
=0x0f)
g=P1&
0x0f;
P1=0xf0;
s=P1&
0xf0;
g=s|g;
for(s=0;
s<
8;
s++)
if(g==dz[s])break;
if(s==0)
dd=30;
flag1=1;
}
elseif(s<
7&
&
s>
0&
flag1==1)
{
dd=s;
flag1=0;
g=0xfe;
P2=_crol_(g,s-1);
}
elseif(s==7)
flag2=0;
}
voidxs()
uchar