单片机6路抢答器课程设计.docx
《单片机6路抢答器课程设计.docx》由会员分享,可在线阅读,更多相关《单片机6路抢答器课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
![单片机6路抢答器课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/11/1d37eab9-70a6-444d-8e76-36b12e75f0a4/1d37eab9-70a6-444d-8e76-36b12e75f0a41.gif)
单片机6路抢答器课程设计
单片机原理及应用
课程设计报告书
题目:
六路抢答器的设计
姓名:
蒋舟
学号:
1110702210
专业:
电子信息工程
指导老师:
沈兆军
设计时间:
2014年11月
信息工程学院
目录
1.引言1
1.1.1
1.2.2
2.方案设计2
3.硬件设计6
4.软件设计9
5.系统调试12
6.设计总结14
7.参考文献15
8.附录A;源程序22
六路抢答器的设计
1引言
随着电子技术的飞速发展,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能化控制所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说智能化控制与自动控制的核心就是单片机。
基于单片机的控制系统已广泛应用于各行业。
此次设计提出了以AT89C51单片机为核心控制元件,设计一个简易的八路抢答器,AT89C51单片机为主控核心,与晶振、数码管、蜂鸣器等构成八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时器/计数器等设计的八路抢答器不仅具有实时显示抢答选手的号码和抢答时间的功能,同时还利用汇编语言编程,使其实现复位、定时和报警的功能。
本次设计的系统实用性强、判断精确、操作简单、扩展功能强。
1.1.设计意义
概述所设计题目的意义。
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能化控制所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说智能化控制与自动控制的核心就是单片机。
目前,抢答器已经作为一种必不可少的工具广泛应用于各种智力和知识竞赛场合,但一般的抢答器可靠性低,使用寿命短,介于这些不方便因素,此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的八路抢答器。
本方案以AT89C51单片机作为主控核心,与晶振、数码管、蜂鸣器等通过外围接口实现的八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时器/计数器等,设计的八路抢答器不仅具有实时显示抢答选手的号码和抢答时间的功能,同时还利用汇编语言编程,使其实现复位、定时和报警的功能。
本次设计的系统实用性强、判断精确、操作简单、扩展功能强。
1.2.系统功能要求
此次设计的抢答器具有同步显示的功能,并且有蜂鸣器的辅助,使得整个设计更加完整。
在每次竞赛开始前,主持人读完比赛规则,可以对抢答器进行的时间进行预设。
时间设定按键组共有4个按键,其中一个键为抢答时间修改键,一个为回答时间按键,剩下的两个按键为加一和减一按键。
比赛开始,主持人读完题之后按下“开始键”,即抢答开始,蜂鸣器提示一次,此时数码管开始显示30s的倒计时;直到有一个选手按下抢答键,对应的会在数码管上显示出该选手的编号和回答剩余的时间,同时蜂鸣器也会发出一次提示音,以示有人抢答本题;如果在规定的30s时间内没有人做出抢答,则此题作废,开始新一轮的抢答。
在抢答和回答时间的最后5s,蜂鸣器都会给予报警提示。
在倒计时过程中,主持人可以随时按“停止键”结束本次回答或者抢答。
在主持未按下开始键,若果有人按下抢答键,则属于犯规抢答,此时,数码管上会显示违规选手的编号,同时蜂鸣器会以1s一次的频率发出警告。
在每次抢答前后,主持人都可以按下复位键让系统清零,此时数码管上会显示“FFF”。
2方案设计
根据所要实现的功能,我们先大概将抢答器的硬件分为这几部分:
CPU、声音电路、显示电路、定时电路、开始结束键输入和抢答按键输入。
硬件图如图2-2所示。
图2-2抢答器硬件原理图
2.1控制器的选择
控制器主要用于对显示、抢答、音乐、计分等模块进行控制。
采用AT89C51作为系统控制器的CPU方案。
单片机算术运算功能强、软件编程灵活、自由度大,可以用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。
2.2模块的选择
显示模块主要是显示时间和编号。
使用传统的数码管显示。
数码管具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护的优点,同时其精度高,称量快,精确可靠,操作简单。
数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。
2.3键盘的选择
键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。
键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。
在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。
独立式键盘接口中使用几根I/O线,就有几个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。
因此可以根据实际需要对键盘中的按键灵活编码。
独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。
2.4AT89C51单片机简单概述[4]
AT89C51单片机属于51系列单片机,本次设计所用的核心元件即为AT89C51,本节主要介绍了AT89C51的管脚功能。
MSC-51单片机是美国英特尔公司于1980年起推出的第二代产品。
与8084相比,8051的硬件结构和指令系统均有很大改进,可支持更大存储空间扩充了更多的I/O功能,速度提高了2-5倍。
1.主要特性:
(1)适于控制应用的8位CPU。
(2)扩展的逻辑处理能力。
(3)4KB片内程序存储空间。
其片外可寻址的范围为64KB,主要用于存放已编程的程序,也可存放一些原始数据和表格。
(4)128B的片内数据RAM。
其片外数据存储器的寻址范围为64KB用于存放可读写的数据,如运算的中间结果和最终结果。
(5)32根双向可单独寻址的输入输出线。
(6)2个16位定时/计数器,片内时钟发生器。
它可以设置为计数方式,对外部事件进行计数,也可以设置为定时方式进行定时。
(7)全双工异步发送/接收器。
(8)具有5个中断源,可编程为两个优先级的中断系统,它可以接收外部中断请求、定时器/计数器中断申请和串行口中断申请。
2.程序指令
AT89C51单片机的时序单位有四个,分别是节拍、状态、机器周期和指令周期。
节拍与状态:
我们把振荡脉冲的周期定义为节拍(P),振荡脉冲经过两个分频后即得到整个单片机工作系统的时钟信号,把时钟信号的周期定义为状态(S),这样一个状态就有两个节拍,前半个周期相应的节拍我们定义为P1,后半周期对应的节拍定义为P2。
机器周期:
AT89C51有固定的机器周期,规定一个机器周期有6个状态,分别表示为S1-S6,而一个状态包含两个节拍,那么一个机器周期就有12个节拍,即一个机器周期包含12个振荡脉冲,即机器周期就是振荡脉冲的12分频,如果使用12MHZ的时钟频率,一个机器周期就是1us。
AT89C51单片机结构说明
AT89C51单片机的管脚图如图2-1所示:
图2-1AT89S51单片机管脚图
◆VCC:
电源端。
◆GND:
接地端。
◆P0口:
P0口是一组8位漏极开路双向I/O口,在访问外部存储器时用作8位低地址线和数据总线。
◆P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,向P1口写入“1”时,P1口被内部电路上拉为高电平,可用作输入口。
当作为输出口时,被外部拉低的P1口会因为内部上拉电阻的存在而输出电流。
◆P2口:
P2口为一个内部上拉电阻的8位双向I/O口,当P2口被写“1”时,其管脚被内部电路上拉为高电平,可作输入口。
当作为输出口时,被外部拉低的P2口会因为内部上拉电阻的存在而输出电流。
在访问外部程序存储器和外部数据存储器时,P2口可作为地址总线的高八位地址线。
◆P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,当P3口写入“1”后,它们被内部电路上拉为高电平,并用作输入口。
当作为输出口时,被外部拉低的P3口会因为内部上拉电阻的存在而输出电流。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
◆RST:
复位信号输入端。
当振荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。
◆ALE/PROG:
ALE是地址锁存允许信号。
它的作用是把CPU从P0口分时输出的低8位地址锁存在锁存器中。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,可用作外部时钟或定时。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
如果CPU在外部执行状态ALE禁止,置位无效。
◆/PSEN:
读片外程序存储器选通信号输出端。
当执行外部程序存储器数据时,/PSEN将产生负脉冲作为外部程序存储器的读选通信号。
在访问外部数据存储器和内部程序存储器时,/PSEN无效。
◆/EA/VPP:
读片内与片外程序存储器的选择端。
当/EA为高电平时,低4KB的地址为片内程序存储器单元,高于4KB以上的地址为片外程序存储器单元;当/EA为低电平时,则只能读片外程序存储器。
◆XTAL1:
片内振荡电路反向放大器的输入端,采用外部时钟时该引脚接地。
XTAL2:
片内振荡电路反向放大器的输出端,采用外部时钟时该引脚为振荡信号的输入端。
3硬件设计
3.1时钟频率控制电路
单片机必须在时钟的驱动下才能工作。
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
时钟频率控制电路如图3-1所示。
图3-1外部振荡电路
内部时钟振荡器一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1、C2选用30PF大小,其作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
单片机在工作时,由内部振荡器产生或由外部直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数。
该设计中时钟频率选为12MHz。
3.2复位电路的设计
在抢答器中复位是为定时做铺垫的,在抢答之前要复位,抢答完毕要复位,按了复位键之后LED显示F。
单片机的复位引脚RST出现2个机器周期以上的高电平时即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图3-2所示。
图3-2复位电路
图中复位电路由按键和电解电容C3、电阻R9构成的按键及上电复位电路。
由于单片机是高电平复位,所以当按键按下时,单片机的9脚RESET管脚处于高电平,此时单片机处于复位状态。
当上电后由于电容缓慢充电,单片机的9脚电压逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电复位完毕,系统程序从0000H开始执行。
3.3报警电路的设计
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个管脚的高低电平,则在该管脚上就能产生一定频率的矩形波,接上蜂鸣器就能发出一定频率的声音,若利用延时程序控制高低电平的持续时间,就能改变输出频率,从而改变蜂鸣器发出的音调。
在本设计中此电路起到报警功能。
它会在第一位选手按下抢答按钮时响一次,以提示有人抢答本题,并且在该选手的60秒抢答过程中或30秒等待过程中剩余最后5秒时响起,以提示到此题结束还有5秒钟。
本次设计如图。
3-3所示,图中用到单片机的10、11和16管脚。
10管脚具有读入功能,11管脚具有输出功能,而16管脚具有外部数据写功能,单片机通过内部定时器的操作实现交替变换的波形输出驱动蜂鸣器发生。
图3.3报警电路
3.4显示电路的设计[3]
显示功能与硬件的关系极大,显示电路有两种选择,液晶屏显示和传统数码管显示。
液晶屏具有轻薄、无辐射危险、可视面积大、分辨率高和抗干扰能力强的特点,但是由于显示信息少、编程工作量大和成本偏高。
而数码管具有低耗能、低损耗、低压、寿命长和精确度高、操作简单的优点,本设计中采用的是4位七段数码管显示。
数码管显示通常显示分为动态显示和静态显示。
其中,静态显示的特点是显示稳定不闪烁,编程简单,显示亮度高,但占用I/O口多,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
而动态显示的稳定性虽没静态显示的好,编程复杂,但是相对静态显示而言占用的端口资源少。
本设计采用的是动态显示方法。
通过查表法将值在数码管上显示出来。
其中单片机的P0口为字型码输入端,P2口得低三位为字选段输入端。
4位七段数码管显示电路如图3.4。
图3-4七段数码管显示电路
数码管有共阴极和共阳极两种接法。
共阴极接法,各发光二极管的阴极连在一起并接地,当某一发光二极管的阳极输入高电平时,则该段发光;共阳极接法,各发光二极管的阳极连在一起并接电源,当某一发光二极管的阴极输入低电平时,则该段发光。
本设计采用4位一体的七段共阴极数码管,其中A-G段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1,COM3,COM4分别接到单片机的P2.0,P2.1,P2.2,由单片机来决定当前该显示的是哪一位。
在电路图中还有6个220欧姆的电阻分别连接在P0口上,用作P0口的上拉电阻,保证P0口没有数据输出时处于高电平状态。
3.5键盘扫描电路的设计
键盘扫描电路由两部分组成:
抢答电路和定时电路。
键盘是人机交互的主要设备,键盘电路分为独立式和矩阵式。
其中,独立式键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵式键盘硬件电路比独立式键盘电路复杂,而且程序设计繁琐,但它节省端口,适合于多按键电路。
本设计基于简单硬件电路要求的基础上,采用的是独立键盘的方式。
在定时电路的设计中,有1个抢答时间调整按键、1个回答时间调整按键、加一按键、减一按键和1个开始按键、1个结束按键。
电路图如图3.5所示。
图3-5定时电路图3-6抢答电路图
图中和AT89C51芯片的12管脚连接的为抢答时间30s的调整按键,和13管脚连接的为回答时间60s的调整按键,与14管脚连接的为加一按键,与15管脚连接的为减一按键。
这四个按键用于主持人对回答时间和抢答时间的调整。
开始按键与单片机的10管脚连接,停止按键与11管脚连接。
这里用到了单片机10、11管脚复合功能中的IO端口功能,单片机通过读取10、11脚的P3.0、P3.1的IO端口值来判断当前是否处于抢答开始状态或抢答结束状态。
当主持人按下开始键,抢答电路和定时电路将进入正常抢答状态;当回答完毕,主持人可以按下结束键停止计时。
抢答电路完成两个功能:
一是分辨出选手按键先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是其他选手操作无效。
抢答电路如图3-6所示,图中6个抢答按键分别接入单片机的P1.0-P1.5端口,单片机通过读取P1.0-P1.5的值来判断当前输入的是6个抢答按键中的哪一个。
如果主持人未按下开始按键判断到有人违规操作,蜂鸣器会发出警报声,并且数码管会显示出犯规者的编号。
4软件设计
4.1.系统主程序设计思路
为了能达到公平、公正、合理的设计理念,应该在主持人发布抢答命令之前设定好抢答时间。
当时间设定好了之后,主持人发布抢答命令。
按下开始按键后,程序开始打开,定时中断开始倒计时,然后调用键盘扫描子程序,当扫描到有人按下了抢答键,马上关闭抢答中断计时器T1,调用显示程序,此时封锁抢答键盘,启动计时器T0。
4.2.主程序框图
根据抢答器设计要求,其软件设计部分流程图如图4-1:
图4.1主程序流程图
4.3.键盘扫描程序设计
抢答选手的抢答程序设计是本设计的关键。
键盘扫描流程图如图4-2所示。
图4-2键盘扫描程序流程图
4.4.显示程序设计
本次设计的显示部分在按下开始键时,后两个数码管显示倒计时间,以1s变换一次,并且调用延时程序,此时定时器采用中断方式,可以充分利用CPU。
在有选手按下抢答键时,第一个数码管显示选手号,最后两个数码管显示倒计时,定时器同样采用中断方式。
除此之外,本设计数码管具有闪烁功能,当有违规抢答时,第一个数码管会显示选手号,后两个数码管会闪烁显示FF,一个周期为每秒1次。
以示抢答无效,此时定时器采用定时中断的工作方式。
连接时段选信号接在P0口的P0.0~P0.6七个I/O口上,P1口是准双向I/O接口在输出驱动部分,所以在接电阻时选择接220Ω限流电阻。
而在位选方面采用P2口的P2.0~P2.2,用单片机P2.2三个I/O口作为位选信号的输出口。
5系统调试
5.1.KeiluVision2软件调试
软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
本设计用到了KeiluVision2软件,首先打开KeiluVision2,将程序输入;然后进行调试,将程序中的语法错误和逻辑错误纠正,调试完毕后,创建HEX文件,HEX文件用于烧写芯片,将制定程序写入已设计好的电路板中,使其能根据我们的要求实现相应的功能;最后将HEX文件烧写入AT89C51芯片,运行电路,让其实现八路抢答的功能。
如图5-1所示。
图5-1KeiluVision软件
5.2.Protues仿真
本设计用到Proteus仿真软件。
首先将电路图根据设计要求在软件中准确地画出,即进行ISIS原理图设计,我们的仿真也是完全基于ISIS原理图模块下进行的,Proteus有两种截然不同的仿真方式:
交互式仿真和基于图表的仿真,在本设计中我们用到的是交互式仿真,用于校验所设计的电路是否能正常运行。
如图5-2所示。
图5-2八路抢答器原理图
然后将KeiluVision2生成的HEX文件链接到该中原理图,即设计文档的建立。
如图5-3所示。
图5-3建立设计文档
文档建立好之后,按Ctrl+F12开始运行,然后按F12,执行程序。
6设计总结
此次设计主要以硬件系统为基础,硬件系统关系到电子产品的好坏,如系统的抗干扰性,安全性和可行性等,所以要合理地选择,合理地安排,尽量减少干扰,以提高系统性能。
单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机,以减少对其的干扰,防止程序的混乱现象。
硬件系统的好坏很大部分在于经验,比如焊接是否干净利落,器件是否完好,操作是否规范等,所以我们要有好的动手能力。
而软件设计确实设计的核心,具有多样化,灵活性高,易移植等优点。
首先我们要深深领会各指令的含义才能更加熟练应用。
中断的合理利用可以有效减少对CPU的占用,更好的处理好其他功能。
延时的应用会顺利地实现显示,鸣笛等功能,同时还可以去掉系统固有的不稳定性。
定时的应用则比较实际,能实现我们所需的功能。
软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。
在此次设计中,我总结了很多不足,同时也学到了很多新的知识,并且巩固了课堂知识,但最终设计的系统仍有不足,敬请提出!
7参考文献
[1]孙蕙芹.单片机实用教程.北京:
中国电力出版社,2009
[2]贾海瀛.数字电子技术与实训.北京:
机械工业出版社,2008.1
[3]李雅轩.模拟电子技术-2版.西安:
西安电子科技大学出版社,2006.7
[4]张立科.单片机典型模块设计实例导航.第一版.人民邮电出版社,1988
[5]李响初.基于MCS-51单片机的智能时钟控制系统设计.世界电子元件,2007,7:
97~98
[6]Proteus入门讲义XX文库
[7]C51KeiluVision2XX文库
8附录A;源程序
OKEQU20H;抢答开始标志位
RINGEQU22H;响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT00
ORG000BH
AJMPT00
ORG0013H
AJMPINT11
ORG001BH
AJMPT11
ORG0040H
MAIN:
MOVR1,#30;设抢答时间30s
MOVR2,#60;设答题时间60s
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
LOOP:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;调用显示FFF子程序
JBP3.0,LOOP1;判断未开始答题,若有人按下抢答,跳到LOOP1非法抢答处理程序
ACALLDELAY
JBP3.0,LOOP1;判断已开始答题,则向下执行
ACALLBARK;蜂鸣器响
MOVA,R1
MOVR6,A;将R1中30s送入R6
SETBOK;复位,用于COUNT中判断是否查询抢答
MOVR7,#01H;读抢答键按下数,要求只读一次有用信号
MOVR3,#0AH;抢答时间指显示计时,不显示号数
AJMPCOUNT;进入COUNT倒计时子程序,查询有效抢答程序
LOOP1:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
AJMPLOOP;非法抢答查询程序,若没有跳回主程序
FALSE1:
MOVR3,#01H;1号选手违规
AJMPERROR;跳转到ERROR非法抢答处理程序
FALSE2:
MOVR3,#02H
AJMPERROR
FALSE3:
MOVR3,#03H
AJMPERROR
FALSE4:
MOVR3,#04H
AJMPERROR
FALSE5:
MOVR3,#05H
AJMPERROR
FALSE6:
MOVR3,#06H
AJMPERROR
;====中断====
INT00:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;在时间LED上显示抢答时间30s
JNBP3.4,INC0
JNBP3.5,DEC0
JNBP3.1,BACK0
AJMPINT00
I