首页 > 范文大全 > 正文

单片机在八位智能抢答器中的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇单片机在八位智能抢答器中的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:智能抢答器作为一种电子产品已广泛应用于各种智力和知识竞赛场合。本系统就是采用AT89C51单片机为核心而设计的八路智能抢答器。硬件设计是借用单片机AT89C51为中心的控制模块,软件设计是采用汇编语言编程。在对系统工作原理充分研究的基础上,选择合适的元件型号和参数,再用Proteus绘图软件画出电路原理图,最后根据电路接口编写软件程序。

关键字:抢答器 AT89C51 Proteus 汇编语言

中图分类号:TP368.12

1前言

当今的社会竞争日益激烈,选拔人才,评选优胜,知识竞赛之类的活动愈加频繁,比赛中为了准确、公正、直观地判断出第一抢答者,这就要有一种抢答设备作为裁判员,于是抢答器应用而生。但目前所使用的抢答器有很多的缺点,有的电路较复杂不便于制作,可靠性低,实现起来很困难;有的则用一些专用的集成块 ,而专用集成块的购买又很困难。本文设计的八路智能抢答器,具有元件普通 ,易于购买等优点,很好地解决了制作困难和难于购买的问题,在国内外学校、企事业单位已经普遍应用。

2 硬件设计

本设计分为硬件设计和软件设计,这两者相互结合,不可分离。从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务。本系统硬件设计原理图如图2-1所示:

该抢答器系统的硬件设计是以单片机为中心控制模块,采用模块化设计的八路智能抢答器,具有6个模块,分别为:按键输入模块、显示模块、时钟模块、复位模块、报警模块和核心控制模块。

系统的主要功能模块原理框图如图2-1所示。

按键输入模块共有15个按键,分为抢答按键和控制按键。抢答按键共有8个,分别为S1S8,供抢答选手进行抢答使用,P1口为八个按键抢答信号的输入口,低电平有效。控制按键有7个,分别为S9S15,其中S9和S10分别为“抢答时间调整键”和“回答时间调整键”, 其对应的IO接口分别为P3.2和P3.3;S11和S12分别为时间“加1”和“减1”按键,其对应的IO接口分别为P3.4和P3.5;S13和S14分别为“抢答开始按键”和“抢答停止按键”,其对应的IO接口分别为P3.0和P3.1;S15为主持人复位键。

显示模块本系统采用共阳极LED数码管显示,一个数码管用来显示抢答到问题的选手号码,两个用来显示倒计时时间,一个未使用的数码管作为以后的扩展使用。

时钟信号用来提供单片机片内各种操作的时间基准。单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。本系统中采用的是内部时钟方式。

复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。当5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。

报警模块在本系统中为附加模块,它的主要用途就是起到提示并引起人们的注意。它只有在两种情况下才发出报警,一是“开始抢答”按键没有按下时,选手就按下了“抢答键”,报警电路发出报警,提示有选手发生抢答;二是每道题的抢答时间和问题的回答时间在倒计时5秒时,报警电路发出报警,提示选手倒计时的时间即将耗尽。

核心控制模块就是人们所谓的CPU,它是整个系统的总控制部分,本系统的核心控制模块为51系列的单片机AT89C51,只有我们通过软件程序的编写,并将程序写入单片机,该系统才会正常工作。

3软件设计模块设计

该系统应用程序由主程序和子程序模块组成。系统应用程序采用结构化模块设计,从功能上看,主要包括:主程序、时间调整程序、报警程序、非法抢答查询程序、倒计时子程序、正确抢答处理程序和延时程序等。本系统部分程序设计如下:

3.1主程序

在本文的程序设计中,主要体现在定时/计数器中断和外部中断两类中断源的特定设置。

主程序:

OK EQU 20H ;抢答开始标志位

RING EQU 22H ;响铃标志位

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP INT0SUB

ORG 000BH

AJMP T0INT

ORG 0013H

AJMP INT1SUB

ORG 001BH

AJMP T1INT

ORG 0040H

MAIN: MOV R1,#0AH ;初设抢答时间为10s

MOV R2,#1EH ;初设答题时间为30s

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

MOV TH0,#0F0H

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

MOV TH1,#3CH

MOV TL1,#0B0H ;50ms为一次溢出中断

SETB EA

SETB ET0

SETB ET1

SETB EX0

SETB EX1 ;允许四个中断,T0/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

JNB P3.2,INT0SUB ;抢答倒计时调整

JNB P3.3,INT1SUB ;回答倒计时调整

JB P3.0,NEXT

ACALL DELAY

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

ACALL BARK ;按键发声

MOV A,R1

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

SETB OK ;抢答标志位

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

AJMP COUNT ;进入倒计时程序,“查询有效抢答的程序”在COUNT里

3.2非法抢答查询子程序

在主持人未按下“抢答开始键”时,为防止参赛选手发生抢答,专门设计了非法抢答查询子程序。当有选手发生抢答时,系统会将选手的号码保持下来,并送到LED显示装置进行显示,同时调用非法抢答子程序。

非法抢答查询子程序:

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

3.3时间调整子程序

该智能抢答器的强大时间是可以根据实际需要进行调整的,如果想调节抢答和回答时间,按下“抢答时间调整键P3.2”或“回答时间调整键P3.3”。此时,LED显示装置会显示当前抢答或回答时间的设定值,如果想加1S,按下“加1”键P3.4;如果想减1S,按下“减一”键P3.5。LED显示装置会自动显示修改后的抢答或回答时间。时间的设定值范围是0~99S,0S再减1S会变成99S,同理99S再加1S会变成0S。

抢答时间调整程序:

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键,如按下跳到INCO

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

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

AJMP INT0SUB

INC0: MOV A,R1

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

MOV R1,#00H

ACALL DELAY1

AJMP INT0SUB

ADD0: INC R1

ACALL DELAY1

AJMP INT0SUB

DEC0: MOV A,R1

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

DEC R1

ACALL DELAY1

AJMP INT0SUB

SETR1: MOV R1,#63H

ACALL DELAY1

AJMP INT0SUB

BACK0: AJMP START ;中断返回

回答时间调整程序:

INT1SUB: MOV A,R2

MOV B,#0AH

DIV AB

MOV R5,A

MOV R4,B

MOV R3,#0AH

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

JNB P3.4,INC1 ;P3.4为+1s键,如按下跳到INC1

JNB P3.5,DEC1 ;P3.5为-1s键,如按下跳到DEC1

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

AJMP INT1SUB

INC1: MOV A,R2

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

MOV R2,#00H

ACALL DELAY1

AJMP INT1SUB

ADD1: INC R2

ACALL DELAY1

AJMP INT1SUB

DEC1: MOV A,R2

JZ SETR2 ;如果R2为0, R2就置99

DEC R2

ACALL DELAY1

AJMP INT1SUB

SETR2: MOV R2,#63H

ACALL DELAY1

AJMP INT1SUB

BACK1: AJMP START ;中断返回

3.4显示处理程序

显示程序:

DISPLAY:MOV DPTR,#DAT1 ;查表显示程序,利用P0口做段选码口输出,P2低三位做位选码输出