抢答器.docx

上传人:b****6 文档编号:3297220 上传时间:2022-11-21 格式:DOCX 页数:18 大小:188.14KB
下载 相关 举报
抢答器.docx_第1页
第1页 / 共18页
抢答器.docx_第2页
第2页 / 共18页
抢答器.docx_第3页
第3页 / 共18页
抢答器.docx_第4页
第4页 / 共18页
抢答器.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

抢答器.docx

《抢答器.docx》由会员分享,可在线阅读,更多相关《抢答器.docx(18页珍藏版)》请在冰豆网上搜索。

抢答器.docx

抢答器

单片机课程设计说明书

 

抢答器

 

专业班级:

10自动化03班

学生姓名:

陈升奇

指导教师:

王欣

学号:

1002150303

一、设计要求及任务目的

1.1设计要求

本系统采用AT89C51单片机作为中央处理器。

其主要任务收集按键的信息,判断按键时否按下来执行相应彩灯的点亮方式

1.设计一款6路或以上的抢答器;

2.设计一个抢答控制开关(开始抢答后才允许答题者抢答),供主持人用;

3.设定抢答时间限制,超过时间后,该题作废;

4.*6路抢答器对应6个LED灯,显示当前对应的答题者;

5.*可以实现抢答犯规时,显示器显示犯规选手的编号;

6.*实现其他除1~5中提到的功能(创新部分)。

1.2任务目的

目的1:

熟悉相关数字芯片的功能和使用方法;

目的2:

通过实验掌握显示的接口电路及程序设计,熟悉各种操作指令,子程序的调用以及中断知识和计数器的计数。

 

二、设计内容及总体方案

2.1AT89c51单片机

2.1.1芯片介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

  

   GND:

接地

   P0口:

P0口为一个8位漏级开路双向I/O口

   P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口

   P2口:

P2口为一个内部上拉电阻的8位双向I/O口

    P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

P3口也可作为AT89C51的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。

   RST:

复位输入

    PSEN:

外部程序存储器的选通信号

   XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入

    XTAL2:

来自反向振荡器的输出。

2.1.4振荡器特性

XTAL1和XTAL2分别为反向放大器的输入和输出。

2.1.2管脚说明

 

图2.1.3AT89C51引脚

 

三、硬件电路设计

单片机(SCM)是单片微型计算机(SingleChipMicrocomputer)的简称。

它是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及输入输出适配器都集成在一块芯片上,构成一个完整的微型计算机。

随着SCM在技术上、体系上不断扩展其控制功能,国际上已经采用MCU(MicroControllerUnit)代替单片机的名词。

它的最大优点是体积小,可放在仪表内部。

但存储量小,输入输出适配器简单,功能较低。

目前,单片机在民用和工业测控领域得到最广泛的应用,早已深深地融入人们的生活中。

近年来,AT89C51在我国非常流行,它最大的特点是内部有可以多次重复编程的闪烁ROM,并且闪烁ROM可以直接用编程器来擦写(电擦写),使用起来比较方便。

一个单片机应用系统的硬件电路设计包含有两部分内容:

一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等能量不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。

二是系统配置,既要按照系统功能要求配置外围设备,如键盘显示器﹑打印机﹑A/D﹑D/A转换器等,又要设计合适的接口电路。

3.1总体设计

如图3-1,P1.0为开始抢答,P1.7为停止,P1.1-P1.6为6路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。

其中复位电路中电容C1取22μF,是给RST脚持续2个机器周期的充电时间,电阻R1取1kΩ,是控制时间大小;外部振荡电路中C2、C3是微调电容,取值30pF,一是帮助振荡器起振,二是对对振荡器的频率进行微调,X1为振荡器;S1-S6为选手抢答按键;K1为抢答开始按键;K2为结束按键;U1-U3为非门,对电平取反;R2-R8为上拉电阻,使P0口输出高电平。

图3-1抢答器硬件电路图

3.2单元设计

3.2.1外部振荡电路

图3-2外部振荡电路

一般选用石英晶体振荡器。

此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。

电路中两个电容C1,C2的作用有两个:

一是帮助振荡器起振;二是对振荡器的频率进行微调。

C1,C2的典型值为30PF。

3.2.2复位电路的设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:

图3-3复位接口外接电路

在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。

软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

3.2.3显示电路的设计

显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。

 

图3-4阴极七段数码管

3.2.4按钮输入电路的设计

抢答器的输入按钮使用常开开关,

图3-5抢答按键

这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”

现象就可以了。

这里采用最常用的方法即延时法,其的原理为:

因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

3.2.5发声

这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。

四、软件设计

4.1程序系统结构图

硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。

由功能分析得到以下的软件结构图:

 

 

图4-1软件系统结构图

4.2程序流程图

整个程序主要由定时器T0、定时器T1和主程序构成。

定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对P3.6取反,扬声器发声,改变定时器初值,可改变扬声器频率。

定时器程流程图如图4-2所示:

 

图4-2响铃程序流程图图4-3倒计时中断流程图

定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。

其流程图如图4-3所示;

主程序协调三个中断一起工作,实现抢答功能,其流程图如下:

 

图4-5主程序流程图

五.上机运行及调试结果

调试:

(1)开机

按电源开关,显示屏右边数码管亮,数码管显示“FFF”。

(2)测试各组抢答按键

  试按一下各组的抢答按钮,应立即显示该组的组别数字,同时机内喇叭发出"叮咚"的提示音,按K2键,返回“FFF”状态。

(3)启动抢答倒计时,开始抢答

  “FFF”状态下,当主持人宣布抢答开始时,马上按一下K1键,屏幕显示所设定的抢答倒计时时间并开始倒计时,提示倒计时时间马上临近结束。

倒计时到5以后,仪器发出"叮咚"的快要结束提示音,等到倒计时到0以后,显示屏返回“FFF”待命状态。

在"抢答"倒计时中,如果有参赛组抢答,仪器屏幕立即显示该组的组别号和倒计时,同时发出"叮咚"的抢答成功提示音。

需要返回“FFF”待命状态,按K2键即可。

(4)启动答题倒计时

  在有参赛组抢答成功后,屏幕显示所设定的答题倒计时时间并开始倒计时,等倒计时到5以后,仪器一直发出"叮咚"的快要结束提示音。

倒计时到0以后,显示屏返回“FFF”待命状态。

(5)提前取消倒计时

  无论是"抢答"还是"答题"的倒计时时间,需要提前退出,只要按一下K2键,即可返回到“FFF”待命状态。

(9)违规抢答

  当主持人读题过程中,而未宣布抢答开始时按下抢答按钮。

主显示屏将显示该违规组号,及发出提示音。

通过调试,结果完全符合抢答器设计要求。

 

六.总结

通过此次的课程设计,让我更进一步的巩固了单片机的各种知识。

但在设计的过程中,遇到了很多的问题,有一些知识已经不太清楚了,但是通过一些资料又重新的翻阅并且认真的复习了相关教科书中的内容。

弄懂相关的知识后,我就着手程序的编写,通过对相关知识的复习的查询,终于将程序写出来啦,并且向其他同学问自己程序的错误及不合理处,终于完成啦程序的编写。

然后又用keil仿真软件对程序进行调试,改正错误的地方终于完成啦该设计的软件部分。

对于硬件部分,特别是Proteus仿真软件的使用,不知是由于电脑的问题还是怎么,这个软件的安装就花了我很长的时间,好不容易安装好了,又对软件的使用一点都不熟悉,要从头开始学起,对着老师发给我们的例图进行仿真画图,刚刚开始时候真的很难下手,因为是英文版的软件,很多东西都看不太明白,都是通过自己一个个上网查询,才把仿真图画了出来,然后把写好的程序导入芯片,进行仿真,当看到程序正常运行的那一刻,心中真是有几分的喜悦。

终于完成啦硬件部分的设计。

虽然这次单片机抢答器设计很简单,但是由于是第一次搞这个所以还是花费了不小的精力,但是能成功也很欣慰啊。

这次学习给我留下了深刻的印象,使我受益匪浅。

而且对于论文的总体构思也有了很多经验,相信自己经过这一次的训练与学习,对于今后会更加努力,做得最好。

对于这次课程设计,知识的收获固然很重要,但是精神上的收获更难得,因为他让我明白啦坚持不懈和学无止境。

有困难不怕,只要坚持就能胜利。

我相信这次课程设计一定会是我大学里的一次非常重要的回忆。

 

参考文献

[1]51单片机原理与实践/高卫东,辛友顺,韩彦征编著.北京航空航天大学出版社

[2]刘红玲、邵晓根,《微机原理与接口技术》,中国电力出版社,2006年第一版

[3]冯博琴,《微型计算机原理及接口技术》,清华大学出版社

[4]任致程,《经典集成电路400例》机械工业出版社,2002

[5]张毅刚,《单片机原理及应用》,高等教育出版社

[6]沈美明,《IBM-PC汇编语言程序设计》,清华大学出版社

附录:

程序代码:

P1.0为开始抢答,P1.7为停止,P1.1-P1.6为6路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口。

OKEQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0000H

lJMPMAIN

ORG000BH

AJMPT0INT

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;允许2个中断,T0/T1

CLROK

SETBRING

SETBTR1

SETBTR0;允许计数运行控制位,一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了

START:

MOVR5,#0bH

MOVR4,#0bH

MOVR3,#0bH

SETBOK;抢答标志位,用于COUNT只程序中判断是否查询抢答

ACALLDISPLAY;未开始抢答时候显示FFF

JBP1.0,NEXT

ACALLDELAY

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

ACALLBARK;按键发声

MOVA,R1

MOVR6,A;送R1->R6,因为R1中保存了抢答时间

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

AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面

NEXT:

JNBP1.1,FALSE1

JNBP1.2,FALSE2

JNBP1.3,FALSE3

JNBP1.4,FALSE4

JNBP1.5,FALSE5

JNBP1.6,FALSE6

AJMPSTART

FALSE1:

ACALLBARK;按键发声

MOVR3,#01H

AJMPERROR

FALSE2:

ACALLBARK

MOVR3,#02H

AJMPERROR

FALSE3:

ACALLBARK

MOVR3,#03H

AJMPERROR

FALSE4:

ACALLBARK

MOVR3,#04H

AJMPERROR

FALSE5:

ACALLBARK

MOVR3,#05H

AJMPERROR

FALSE6:

ACALLBARK

MOVR3,#06H

AJMPERROR

COUNT:

MOVR0,#00H;重置定时器中断次数

MOVTH1,#3CH

MOVTL1,#0B0H;重置定时器

RECOUNT:

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

MOVB,#0AH

DIVAB;除十分出个位/十位

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

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

MOVR5,30H;取十位

MOVR4,31H;取个位

MOVA,R6

SUBBA,#07H

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

MOVA,R0

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

SETBRING

AJMPCHECK

FULL:

CJNEA,#14H,CHECK;下面系1s的情况,响并显示号数并清R0,重新计时

CLRRING

MOVA,R6

JZQUIT;计时完毕

MOVR0,#00H

DECR6;一秒标志减1

AJMPCHECK

LARGER:

MOVA,R0

CJNEA,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"

DECR6;计时一秒R6自动减1

MOVR0,#00H

CHECK:

JNBP1.7,QUIT;如按下停止键退出

ACALLDISPLAY

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

AJMPRECOUNT

ACCOUT:

JNBP1.1,TRUE1

JNBP1.2,TRUE2

JNBP1.3,TRUE3

JNBP1.4,TRUE4

JNBP1.5,TRUE5

JNBP1.6,TRUE6

AJMPRECOUNT

QUIT:

CLROK;如果按下了"停止键"执行的程序

SETBRING

AJMPSTART

TRUE1:

ACALLBARK;按键发声

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

CLROK;因为答题的计时不再查询抢答,所以就锁了抢答

AJMPCOUNT

TRUE2:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

ERROR:

MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

MOV34H,R3;犯规号数暂存与(34H)

HERE:

MOVA,R0

CJNEA,#0AH,FLASH;0.5s向下运行->灭并停响

SETBRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

CJNEA,#14H,CHECK1;下面系1s的情况,响并显示号数并清R0,重新计

CLRRING

MOVR0,#00H

MOVR3,34H;取回号数

MOVR5,#0BH

MOVR4,#0BH;显示FF和号数

AJMPCHECK1

CHECK1:

JNBP1.7,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:

SETBRING

CLROK

AJMPSTART;出口参数:

DISPLAY:

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

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

ACALLDELAY

MOVDPTR,#DAT2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

ACALLDELAY

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

ACALLDELAY

RET

DAT1:

DB00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;"灭","1","2","3","4","5","6","7","8","9","灭","F"

DAT2:

DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;第一个为零,其他与上相同,因为十位如果为零显示熄灭

DELAY1:

MOV35H,#08H

LOOP0:

ACALLDISPLAY

DJNZ35H,LOOP0

RET

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

BARK:

CLRRING

ACALLDELAY1

SETBRING;按键发声

RET

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

JBRING,OUT

CPLP3.6;RING标志位为0时候P3.6口不短取反使喇叭发出一定频率的声音

OUT:

RETI

T1INT:

MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1