当前位置:文档之家› 基于AT89C51单片机多人抢答器设计

基于AT89C51单片机多人抢答器设计

编号6 单位代码

学号

分类号

密级

课程设计

基于AT89C51单片机的多人抢答器设计

学院名称:工学院

专业名称:机械设计制造及其自动化

学生姓名:葛

学生学号:

指导老师:朱煜钰

2014年10月30 日

摘要

多路数字抢答器在各种智力竞赛中经常用到。在各校举行的各种竞赛中我们也经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性。为解决这个问题,我准备借本次课程设计的机会制作一个八路数显抢答器。一方面加深我们对所学习的知识的了解,巩固模拟、数字电路知识,也提升我们解决日常生活中常见问题的能力,掌握一般设计方法与设计步骤。积累实际设计制作经验,为走向更复杂更实用的应用领域奠定基础。控制系统主要由单片机控制电路、存储器接口电路及显示电路组成。具体以AT89C51单片机为系统工作核心,负责控制各个部分协调工作。在其外围接上了复位电路、上拉电阻、数码管、按钮及扬声器,用到的元器件有晶振X1、电容C1、C2、C3、电阻RP1,P3.0、P3.1由主持人控制,分别为抢答停止和开始键。P1.0-1.7是8组输入口,P2.0-P2.3为数码管的段选口,位选口用的是P.0-P0.6口输出,外部中断0、1和P3.3和P3.4为抢答计时调整口,实现对各队的计时,并且加减调整,外部中断0、1实现对答题时间的调整,P3.4和P3.5分别实现了对时间的加一和减一,P3.6为蜂鸣口的控制口,安装了led灯。其中用到了WAVE软件,集成调试环境,集成编辑器、编译器、调试器,支持软件模拟等。同时也用到了PROTEUS软件,通过仿真可完全实现对所设计系统的功能的模拟。

关键词:多路数字抢答器;AT89C51; WAVE; PROTEUS;

目录

1绪论 (1)

1.1引言 (2)

1.2抢答器原理 (2)

2硬件设计 (3)

2.1晶振复位及开始抢答电路 (3)

2.2选手抢答键 (3)

2.3显示与显示驱动电路 (4)

2.4蜂鸣音频及LED灯输出电路 (4)

3软件设计 (5)

3.1系统流程图 (5)

3.2显示抢答违规流程图 (7)

3.3抢答成功流程图 (7)

4系统仿真 (8)

4.1仿真步骤 (8)

5课程设计总结与体会 (10)

参考文献 (10)

附录 (12)

附录A (12)

附录B (23)

1绪论

1.1引言

单片机作为计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。对于计算机专业的学生来说,即使暂时没有从事单片机的应用与开发,学习单片机也有很重要的意义。学习它,不仅为将来可能从事该方面的开发打下基础,另一方面,由于单片机作为微型计算机的一个种类,麻雀虽小,五脏俱全,可以把它当作微型计算机的一个简化模型来看待,学习单片机可以加深对微型计算机工作原理的理解,更加清楚计算机的脉络。同时,提供了一个实际应用手段。21世纪,是一个信息技术飞速发展的时代,智力竞赛是一种形式比较活泼的教育方式,是人们休闲娱乐生活的一部分。这些竞赛一方面充实了人们的娱乐生活,另一方面也提高了人们努力汲取相关领域的知识的兴趣。智力竞赛,也就是几个参赛选手之间在规定的时间,规定的地点相互竞争的比赛。

抢答是各种竞赛常用的一种形式。在抢答赛中,往往要有主持人宣布抢答的开始,还要确定是哪个选手抢到了答题权,具体答题的时间有时也要设定。这些如果仅凭主持人的主观判断,很容易出现误判的情况。因此,在竞赛中,抢答器就扮演了一个非常重要的角色。

抢答器由计数器、寄存器、集成定时器和译码显示等组合、时序电路组成。可分为抢答电路,定时电路,报警电路等几个单元部分。每个单元电路分别可以处理一些抢答竞赛中的基本问题。

本次课程设计设计的是一个多路定时抢答器,是一个多于两位选手参赛的一个抢答器,具有锁存和显示功能。同时有主持人控制系统的清零和抢答的开始。抢答开始后,若有任何一名选手按动抢答按钮,抢答器就会显示该选手编号直至系统被主持人清零,并有扬声器发出提示,同时其他人再抢答就无效了。这次设计的抢答器还有自动定时功能,主持人可以设定选手答题的时间。当主持人启动“开始”键后,定时器会自动减计时,这个会显示在显示器上。选手只有在抢答时间内抢答才有效,若在答题时间内没有选手答题,时间到时,报警电路就会发出警报亮灯并且禁止抢答。

1.2抢答器的原理

抢答器的工作原理是采用单片机最小系统,用程序查询方式采用动态显示组号。主持人按下开始抢答键才可以抢答。主持人没有按下开始抢答按纽(P3.0),有人抢答则抢答违规,报警并显示组号,主持人按下开始抢答开关重新抢答。主持人按下开始抢答按纽(P3.0),蜂鸣响声提示,数码管30秒倒计时抢答,蜂鸣器响声提示并显示他的组号,30秒内有人抢答则开始60秒倒计时(60秒内必须回答完问题),最后五秒倒计时警报。单片机最小系统、抢答按键模块(四位并行数码显示)、显示模块、显示驱动模块、抢答开关模块、蜂鸣器音频输出模块。

1.3单片机控制原理

单片机(SCM)是单片微型计算机(Single Chip Microcomputer)的简称。它是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及输入输出适配器都集成在一块芯片上,构成一个完整的微型计算机。它的最大优点是体积小,可放在仪表内部。但存储量小,输入输出适配器简单,功能较低。目前,单片机在民用和工业测控领域得到最广泛的应用,早已深深地融入人们的生活中。

简单的说,用单片机系统来设计抢答器,实现两组的抢答时间即使是相差几微秒,也可分辨出哪组优先答题。

2 硬件设计

2.1晶振复位及开始抢答电路

,提供89C51的时钟脉冲使89C51工作,复位电路是单晶振的频率为12MH

Z

片机初始化,使单片机重新开始执行程序。当复位开关按下RST由低电平变为高电平,则程序从头开始执行,在此次课程设计电路中当一个问题结束主持人后按下复位开关后进行下一题的准备。

图1复位及开始抢答电路

2.2选手抢答键

89C51的P1口做一个为选手抢答的输入按键引脚,P1.0至P1.7轮流输出低电位,给每一个选手编号1至8,当选手按下按钮时,P1口个端口的电平变化从P1口输入,经单片机处理后从P0输出由数码管显示抢答者编号。

图2选手抢答电路

2.3显示与显示驱动电路

此电路包括显示和驱动,显示采用数码管,驱动用P2口,违规者编号、抢答30秒倒计时、正常抢答者编号和回答问题时间60秒倒计时,数码管采用动态显示。驱动电路P2口,查询显示程序利用P0口做段选码口输出P2低3位做位选码输出,当为低电平则能驱动数码管使其显示数字。在+5V电压下接10k的电阻,保证正常压降。

图3显示与显示驱动电路

2.4蜂鸣器音频及LED灯输出电路

通过控制不同频率的矩形脉冲来控制蜂鸣器发声。此次课程设计中只需要一些简单的提示声音和稍微显眼的灯控,有抢答违规,开始抢答,抢答时间结束和回答时间到得提示声和亮灯提醒。

图4输出电路

3 软件设计3.1系统流程图

图1系统流程图

3.2显示抢答违规流程图 3.3抢答成功流程图

图2显示抢答违规流程图 图3抢答成功流程图

4 系统仿真

4.1仿真步骤

1)程序设计后,用汇编软件(伟福6000)编译,生成.HEX文件。

2)在proteus中加载.HEX文件。

3)点击开始仿真软件,进行仿真。仿真效果如下:

5课程设计的总结与体会

自接触单片机以来,一直觉得单片机非常难,这次的课程设计我开始是以老师布置题目为主要选择对象的,但是后面发现,像八路数字抢答器在我脑海中根本没得一点意象,上网搜了很多资料,也感觉不怎么很懂,于是问老师怎么弄,后面发现老师的意见和我的原本的程序和图只有几个地方不同,于是便将两者综合了一下,经调试和运行后,发现还行的通,于是便开始了忐忑的正文模版之路,以为快搞完了,后面发现其实程序和图还是要细细的弄懂才能写好报告,于是我又将程序和图细细的剖析了一遍,然后慢慢将流程图和proteus图画好和截取下来,经过最近这段时间的在电脑前面的驻守,觉得只要自己肯付出和努力,发现其实很多的东西不是那么难懂的,以后还是要好好提升自己的动手能力和独立思考的能力。

参考文献

[1] 张迎新. 《单片机初级教程》.北京航天航空大学出版社 2000年.

[2] 康华光. 《电子技术基础(模拟部分)》.第四版高等教育出版社 1999年.

[3] 喻宗泉. 《单片机原理与应用技术》.西安电子科技大学出版社 2005年.

[4] 万光毅. 《单片机实验与实践教程》. 北京航天航空大学出版社 2003年.

[5] 张俊谟. 《单片机初级教程》.北京航天航空大学出版社 2000年.

附录 A(源文件)

OK EQU20H;抢答开始标志位

RING EQU 22H;铃声标志位

ORG 0000H

AJMP MAIN

ORG 00003H

AJMP INT0SUB

ORG 000BH

AJMP TOINT

ORG 0013H

AJMP INT1SUB

ORG 001BH

AJMP T1INT

ORG 0040H

MAIN: MOV R1,#3O;初设抢答时间30S

MOV R2,#60;初设答题时间60S

MOV TMOD,#11H;设置未定时器/模式1

MOV TH0,#0F0H

MOV TL0,#0FFH;越高发生频率越高、越尖

MOV TH1,#3CH

MOV TL1,#0B0H;5Oms为一次溢出中断

SETB EA

SETB ET0

SETB ET1

SETB EX0

SETB EX1;允许四个中断TO、T1、INT0、INT1

CLR OK

CLR RING

SETB TR1

SETB TR0;开始就运行定时器,以开始显示FFF,如果想要重新计数,重置TH1/TL1就可以了

;=====查询程序======

START: MOV R5,#0BH

MOV R4,#0BH

MOV R3,#0BH

ACALL DISPLAY;未开始抢答时显示FFF

JB P3.0,NEXT;

ACALL DELAY

JB P3.0,NEXT;去抖动,如果“开始键”按下就向下执行,否则跳到非法抢答查询

ACALL BARK;按键发声

MOV A,R1

MOV R6,A;送R1到R6,因为R1中保存了抢答时间

SETB OK;抢答标志位,用于COUNT子程序中判断是否查询抢答MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号

MOV R3,#0AH;抢答只显示计时,灭号数

AJMP COUNT;进入倒计时程序,“查询有效抢答的程序”在COUNT里面NEXT: JNB P1.0,FALSE1

JNB P1.1,FALSE2

JNB P1.2,FALSE3

JNB P1.3,FALSE4

JNB P1.4,FALSE5

JNB P1.5,FALSE6

JNB P1.6,FALSE7

JNB P1.7,FALSE8

AJMP START

;=======非法抢答处理程序=======

FALSE1:MOV R3,#01H

AJMP ERROR

FALSE2:MOV R3,#02H

AJMP ERROR

FALSE3:MOV R3,#03H

AJMP ERROR

FALSE4:MOV R3,#04H

AJMP ERROR

FALSE5:MOV R3,#05H

AJMP ERROR

FALSE6:MOV R3,#06H

AJMP ERROR

FALSE7:MOV R3,#07H

AJMP ERROR

FALSE8:MOV R3,#08H

AJMP ERROR

;======INTO(抢答时间R1调整程序)======

INT0SUB:MOV A,R1

MOV B,#0AH

DIV AB

MOV R5,A

MOV R4,B

MOV R3,#0AH

ACALL DISPLAY ;先在两个时间LED上显示R1

JNB P3.4,INC0 ;P3.4为加1s键,如果按下跳到INC0

JNB P3.5,DEC0 ;P3.5为减1s键,如果按下跳到DEC0

JNB P3.1,BACK0 ;P3.1为确定键,如果按下跳到BACK0

AJMP INT0SUB

INC0:MOV A,R1

CJNE A,#63H,ADD0;如果不是99,R2加到99,R1就置0重新加起

MOV R1,#00H

ACALL DELAY1

AJMP INT0SUB

ADD0:INC R1

ACALL DELAY1

AJMP INT0SUB

DEC0:MOV A,R1

JZ SETR;如果R1为0,R1就置99

DEC R1

ACALL DELAY1

AJMP INT0SUB

SETR:MOV R1,#63H

ACALL DELAY1

AJMP INT0SUB

BACK0:RETI

;=======INT1(回答时间R2调整程序)========== INT1SUB:MOV A,R2

MOV B,#0AH

DIV AB

MOV R5,A

MOV R4,B

MOV R3,#0AH

ACALL DISPLAY

JNB P3.4,INC1

JNB P3.5,DEC1

JNB P3.1,BACK1

AJMP INT1SUB

INC1:MOV A,R2

CJNE A,#63H,ADD1

MOV R2,#00H

ACALL DELAY1

AJMP INT1SUB

ADD1:INC R2

ACALL DELAY1

AJMP INT1SUB

DEC1:MOV A,R2

JZ SETR

DEC R2

ACALL DELAY1

AJMP INT1SUB

BACK1:RETI

;======倒计时程序(抢答倒计时和回答倒计时都跳到该程序)===== REPEAT:MOV A,R2;使用锦囊是重新计时

MOV R6,A

CLR RING

COUNT:MOV R0,#00H;重新定时器中断次数

MOV TH1,#3CH

MOV TL1,#0B0H;重置定时器

RECONT:MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6

MOV B,#0AH

DIV AB;除十分出个位/十位

MOV 30H,A;十位存于(30H)

MOV 31H,B;个位存于(31H)

MOV R5,30H;取十位

MOV R4,31H;取个位

MOV A,R6

SUBB A,#07H

JNC LARGER;大于5s跳到LARGER,小于等于5s会提醒

MOV A,R0

CJNE A,#0AH,FULL;1s中0.5s向下运行

CLR RING

AJMP CHECK

FULL:CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0重新计

SETB RING

MOV A,R6

JZ QUIT;计时完毕

MOV R0,#00H

DEC R6;一秒标志减1

AJMP CHECK

LARGER:MOV A,R0

CJNE A,#14H,CHECK;如果1s向下运行,否则跳到查询“停/显示”

DEC R6;计时一秒R6自动减1

MOV R0,#00H

CHECK:JNB P3.1,QUIT;如按下停止键退出

JNB OK,CHECKK;只在回答倒计时才有效

AJMP NEXTT

CHECKK:JNB P3.0,REPEAT;判断是否使用锦囊

NEXTT:ACALL DISPLAY

JB O K,ACCOUNT;如果是抢答倒计时,如果是查询抢答,否则跳过查询继续倒计数(这里起到锁抢答作用)

AJMP RECONT

ACCOUNT:MOV A,36H

JNB ACC.0,TRUE1

JNB ACC.1,TRUE2

JNB ACC.2,TRUE3

JNB ACC.3,TRUE4

JNB ACC.4,TRUE5

JNB ACC.5,TRUE6

JNB ACC.6,TZ1

JNB ACC.7,TZ2

AJMP RECONT

TZ1:JMP TRUE7

TZ2:JMP TRUE8

QUIT:CLR OK;如果按下了“停止键”执行的程序

CLR RING

相关主题
文本预览
相关文档 最新文档