学术论文文档格式.docx
《学术论文文档格式.docx》由会员分享,可在线阅读,更多相关《学术论文文档格式.docx(34页珍藏版)》请在冰点文库上搜索。
![学术论文文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/3146f14e-fca8-4de4-a25f-e1328d51d237/3146f14e-fca8-4de4-a25f-e1328d51d2371.gif)
3.2.1主程序14
3.2.2查询程序15
3.2.3非法抢答处理程序16
3.2.4倒计时程序19
3.2.5正确抢答处理程序20
3.2.6犯规抢答程序21
3.2.7显示程序22
4系统调试与仿真25
4.1软件调试问题分析25
4.2Proteus仿真及部分截图26
5总结30
参考文献31
致谢32
内容摘要
随着科学技术的不断发展,促使人们学科学、学技术、学知识的手段多种多样。
抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低,所以有必要设计一个基于单片机的智能抢答器。
此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的抢答器,与晶振、数码管、蜂鸣器等构成六路抢答器,利用单片机的延时电路,按键复位电路、时钟电路、定时/中断等电路,设计的六路抢答器具有实时显示抢答选手的号码和抢答时间的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还利用汇编语言编程,使其实现一些基本的功能。
关键词
单片机;
矩阵式键盘;
显示;
驱动;
抢答
Abstract
Alongwiththedevelopmentofscienceandtechnology,tourgepeopletolearnscience,learntechnology,learningmeansmanyandvaried.Scare-answeringdeviceasatool,hasbeenwidelyappliedinallkindsofintelligenceandknowledgecompetitionsituation.Butviestoimplementuse了owerfrequency,andsomeeithermakecomplicatedorreliabilitylow,soitisnecessarytodesignabasedonsinglechipMachineintelligencecontestdevice.
ThisdesignispresentedforAT89S51asthecorecontrolelements,designasimpleviesImplement,withcrystals,digitaltube,buzzeriscomposedofsixviestoimplement,usingsingle-chipdelaycircuitandpressingKeyresetcircuit,clockingcircuitandtiming/interruptcircuits,etc,thedesignofsixviesinstrumentshavereal-timedisplayrobbedAcontestantnumberandviestimecharacteristics,andresetcircuit,whichisthebeginningofanewroundoftheansweragainGame,atthesametimealsoutilizetheCprogramminglanguage,makeitsimplementingsomebasicfunctionality.
KEYWORDS
Microcontroller;
Matrixkeyboard;
Display;
Drive;
Viesto
1绪论
1.1课题研究的相关背景
抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。
现在大多数抢答器均使用单片机(如MCS-51型)和数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或抢按后的计时、选手得分显示等功能。
本课题利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码。
用开关做键盘输出,扬声器发生提示。
系统达到要求:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;
抢答限定时间的时间可是在1-225s设定;
可以显示是哪位选手有效抢答和无效抢答,正确按键后有提示;
抢答时间时间倒记时显示,时间完后再复位复位;
按键锁定,在有效状态下,按键无效非法。
1.2设计任务与要求
设计一款智能抢答器比具备一下功能
(1)抢答器同时供6名选手或6个代表队比赛,分别用6个按钮S0~S5表示。
(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动"
开始"
键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。
(5)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
(6)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示FF。
1.3智能抢答器的优点
与普通抢答器相比,本作品有以下几方面优势
(1)具有清零装置和抢答控制,可由主持人操纵避免有人在主持人说“开始”前提前抢答违反规则。
(2)具有定时功能,在30秒内无人抢答表示所有参赛选手获参赛队对本题弃权。
(3)30秒时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。
2硬件电路设计
2.1单片机控制系统结构简图
图2-1控制系统结构简图
此系统是利用AT89C51作为核心器件作为中间桥梁。
选手抢答和主持人控制按钮都是通过产生一定的信号脉冲传入单片机中。
通过单片机按一定方式的处理输出我们想要的信号,此处输出信号为数码管的显示和喇叭发音。
2.2AT89C51各引脚中文简介
图2-2AT89C51的引脚图
引脚说明如下:
VCC
AT89C51电源正极输入,接+5V电压。
GND
电源接地端。
XTAL1
接外部晶振的一个引脚。
在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。
它采用外部振荡器时,此引脚应接地。
XTAL2
在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。
当采用外部振荡器时,则此引脚接外部振荡信号的输入。
RST
AT89C51的复位信号输入引脚,高电位工作,当要对芯片复位时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。
ALE/PROG
ALE是英文"
ADDRESSLATCHENABLE"
的缩写,表示允许地址锁存允许信号。
当
访问外部存储器时,ALE信号负跳变来触发外部的8位锁存器(如74LS373),将端口P0的地址总线(A0-A7)锁存进入锁存器中。
在非访问外部存储器期间,ALE引脚的输出频率是系统工作频率的1/16,因此可以用来驱动其他外围芯片的时钟输入。
当问外部存储器期间,
将以1/12振荡频率输出。
EA/VPP
该引脚为低电平时,则读取外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031中,EA引脚必须接低电位,因为其内部无程序存储器空间。
如果是使用AT89C51或其它内部有程序空间的单片机时,此引脚接成高电平使程序运行时访问内部程序存储器,当程序指针PC值超过片内程序存储器地址(如8051/8751/89C51的PC超过0FFFH)时,将自动转向外部程序存储器继续运行。
此外,在将程序代码烧录至8751内部EPROM、89C51内部FALSH时,可以利用此引脚来输入提供编程电压(8751为2lV、AT89C51为12V、8051是由生产厂方一次性加工好)。
PSEN
此为"
ProgramStoreEnable"
的缩写。
访问外部程序存储器选通信号,低电平有效。
在访问外部程序存储器读取指令码时,每个机器周期产生二次PSEN信号。
在执行片内程序存储器指令时,不产生PSEN信号,在访问外部数据时,亦不产生PSEN信号。
P0
P0口(P0.0~P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。
外部不扩展而单片应用时,则作一般双向I/O口用。
P0口每一个引脚可以推动8个LSTTL负载。
P2
P2口(P2.0~P2.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。
每一个引脚可以推动4个LSTL负载。
P1
P1口(P1.0~P1.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),其输出可以推动4个LSTTL负载。
仅供用户作为输入输出用的端口。
P3
P3口(P3.0~P3.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。
其特殊功能引脚分配如下:
P3.0RXD串行通信输入
P3.1TXD串行通信输出
P3.2INT0外部中断0输入,低电平有效
P3.3INT1外部中断1输入,低电平有效
P3.4T0计数器0外部事件计数输入端
P3.5T1计数器1外部事件计数输入端
P3.6WR外部随机存储器的写选通,低电平有效
P3.7RD外部随机存储器的读选通,低电平有效
2.3单片机主机系统电路
图2-3本次设计的硬件图(利用protues软件设计)
2.4时钟频率电路的设计
单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;
二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc表示。
如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µ
s。
图2-4外部时钟频率电路
2.5复位电路的设计
使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。
从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。
硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。
上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。
硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。
但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。
软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。
对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。
而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。
有的编程人员用020000(LJMP0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。
软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。
由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。
在所有的指令中,只有RETI指令能够清除中断激活标志。
前文各处提案到的出错处理程序ERR主要完成这一功能,其他的善后工作交由复位后的系统去完成。
单片机现了“死机”、“程序跑飞”等现象,这主要是单片机复位电路设计不可靠引起的。
。
在这种情况下,系统有时会出现一些不可预料的现象,如无规律可循的“死机”、“程序走飞”等。
而用仿真器调试时却无此现象发生或极少发生此现象。
这些现象,都可认为是由于单片机复位电路的设计不当。
在此由于设备设计比较简单,所以采用基本的复位电路。
单片机复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
下图所示的RC复位电路可以实现上述基本功能。
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态。
图2-5复位电路
2.6显示电路的设计
数码管采用的是4位一体七段共阳数码管,其中A~G段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1,COM3,COM4分别接到单片机的P2.0,P2.1,P2.2,由单片机来决定当前该显示的是哪一位。
在图中还有七个电阻,连接在P0口上,用作P0口的上拉电阻,保证P0口没有数据输出时候处于高电平状态。
通过查表法,将其在数码管上显示出来,其中P0口为字型码输入端,P2口低3位为字选段入段。
在这里我们通过查表将字型码送给7段数码管显示的数字。
数码管的段码由单片机的P2口输出,输出段码为0xf9,0xa4,0xbo,0x99,0x92,
0x82段码对应的数字为1—6。
由于80c51单片机埠的输出电流在10mA左右输出电压在5V,所以在单片机输出口上串联一个限流电阻。
图2-64位七段数码管显示电路图
2.7键盘扫描电路的设计
键盘是人与微机系统打交道的主要设备。
关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。
站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。
在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。
它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;
矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。
其次就是消除在按键过程中产生的“毛刺”
现象。
这里采用最常用的方法,即延时重复扫描法,延时法的原理为:
因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
2.7.1抢答按钮
抢答按钮信号从单片机P1口输入。
80C51单片机的4个I/O口由于结构不一样,带负载能力不同。
P1、P2和P3口都能驱动三个LSTTL门,并且不需外加电阻就能直接驱动MOS电路。
图2-6抢答按钮电路
2.7.2设置按钮
设置按钮有四个分别为:
开始、结束、加一、减一、复位按钮。
单片机P1.0、P1.7、P3.2、P3.3分别对设置按钮信号进行采集。
图2-7设置按钮电路
2.8发声电路设计
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。
此设计通过P3.6输出信号控制蜂鸣器发声。
图2-8发声电路
3系统软件设计
3.1主程序系统结构图
图3-1软件系统结构图
3.2程序流程
在本设计中包括了以下八个主要的程序:
主程序、非法抢答程序、抢答时间调整程序、回答时间调整程序、倒计时程序、正常抢答处理程序、犯规处理程序、显示及发声程序。
P1.0为开始抢答,P1.7为停止,p1.1-p1.6为六路抢答输入数码管段选P0口,位选P2口,蜂鸣器输出为P3.6口。
3.2.1主程序
OKEQU20H;
抢答开始标志位
RINGEQU22H;
响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#0FH;
初设抢答时间为15s
MOVR2,#0AH;
初设答题时间为10s
MOVTMOD,#11H;
设置未定时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;
越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;
50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;
允许四个中断T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;
一开始就运行定时器,以开始显示FFF
;
果想重新计数重置TH1/TL1就可以了
3.2.2查询程序
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;
未开始抢答时候显示FFF
JBP1.0,NEXT
ACALLDELAY
JBP1.0,NEXT;
去抖动
否者跳到非法抢答查询
ACALLBARK;
按键发声
MOVA,R1
MOVR6,A;
送R1->
R6,因为R1中保存了抢答时
间
SETBOK;
抢答标志位,用于COUNT只程序中判
断
是否查询抢答
MOVR3,0AH;
抢答只显示计时,灭号数
AJMPCOUNT;
进入倒计时程序,“查询有效抢答的
程序”
在COUNT里面
NEXT:
JNBP1.1,FALSE1
JNBP1.2,FALSE2
JNBP1.3,FALSE3
JNBP1.4,FALSE4
JNBP1.5,FALSE5
JNBP1.6,FALSE6
AJMPSTART
3.2.3非法抢答处理程序
FALSE1:
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
FALSE3:
MOVR3,#03H
FALSE4:
MOVR3,#04H
FALSE5:
MOVR3,#05H
FALSE6:
MOVR3,#06H
INT0SUB:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
先在两个时间LED上显示R1
JNBP3.2,INC0
JNBP3.3,DEC0
JNBP1.7,BACK0
INC0:
CJNEA,#63H,ADD0;
如果不是99,R2加1,如果加到99了
R1就置0新加起
MOVR1,#00H
ACALLDELAY1
ADD0:
INCR1
DEC0:
JZSETR1;
如果R1为0,R1就置99
DECR1
SETR1:
MOVR1,#63H
BACK0:
RETI
INT1SUB:
MOVA,R2
ACALLDISPLAY
JNBP3.2,INC1
JNBP3.3,DEC1
JNBP1.7,BACK1
INC1:
MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ADD1:
INCR2
DEC1:
JZSETR2
DECR2
SETR2:
MOVR2,#63H
BACK1:
3.2.4倒计时程序