基于单片机的抢答器设计.docx

上传人:b****5 文档编号:11649102 上传时间:2023-03-29 格式:DOCX 页数:23 大小:166.45KB
下载 相关 举报
基于单片机的抢答器设计.docx_第1页
第1页 / 共23页
基于单片机的抢答器设计.docx_第2页
第2页 / 共23页
基于单片机的抢答器设计.docx_第3页
第3页 / 共23页
基于单片机的抢答器设计.docx_第4页
第4页 / 共23页
基于单片机的抢答器设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于单片机的抢答器设计.docx

《基于单片机的抢答器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的抢答器设计.docx(23页珍藏版)》请在冰豆网上搜索。

基于单片机的抢答器设计.docx

基于单片机的抢答器设计

基于单片机的抢答器设计

学号1251401243

《单片机》

课程设计

(2012级本科)

 

题目:

基于单片机的抢答器设计

系(部)院:

物理与机电工程学院

专业:

电气工程及其自动122班

作者姓名:

杨存恩

指导教师:

向根祥职称:

副教授

完成日期:

2015年6月28日

1引言

1.1设计目的

现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。

在本学期学习了单片机这门课之后,我觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。

最终做出一种数字式抢答器的设计方案,通过Proteus设计完成,利用keil2软件编辑程序,仿真验证,适用于多种竞赛场合。

1.2设计要求

设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足:

(1)能容许2-6组进行抢答。

(2)能显示抢答组号。

(3)各组记分,并能记分显示。

(4)比赛结束时,能发出报警声。

2设计方案

在设计中采用的单片机是AT89C51,它主要负责控制各个部分协调工作。

P1.0和P1.7由裁判控制,分别是抢答开始和停止键。

P1.1—P1.6是6组抢答的输入口,按下对应按钮即为抢答。

P0口为数码管的段选口,位选口用的是P2口的低4位,外部中断0。

外部中断1,P3.3用于控制有组答题完成后结束计时。

P3.4—P3.5分别实现了分数的加一和减一。

P3.6为蜂鸣器的控制口。

外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。

外部还接有蜂鸣器用来发出报警音。

采用7SEG-MPX4-CC-BLUE显示,它是共阴极的由高电平点亮。

系统仿真用到了Proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。

3硬件设计

3.1电路原理图

电路原理图如图3.1所示。

图3.1电路原理图

3.2总体设计电路图

整个系统分为:

外部振荡电路、复位电路、加减分电路及蜂鸣器报警电路、抢答电路及裁判控制开始停止电路、数码管显示电路几个部分。

本设计的核心是单片机AT89C51。

AT89C51提供以下标准功能:

4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

3.2.1振荡电路

振荡电路使用外部振荡电路,由两个1nF的电容和一个晶体振荡、外部振荡电路。

图3.2.1晶振振荡电路

3.2.2复位电路

外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。

硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值。

因为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软复位。

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

图3.2.2复位电路

3.2.3加减分电路及蜂鸣器报警电路

P3.3接口的开关按下意味着答题结束,P3.4接口开关表示给抢答相应组加上一分,P3.5接口开关按下表示相应组减去一分。

裁判示意开始抢答、有组抢答成功、违规抢答、最后5s倒计时都会触发蜂鸣器发出警报。

P3.6为蜂鸣器控制口。

图3.2.3加减分电路及蜂鸣器报警电路

3.2.4抢答电路及裁判控制开始停止电路

P1.0和P1.7由裁判控制,分别是抢答开始和停止键。

P1.1-P1.6是6组抢答的输入口,按下按钮抢答。

图3.2.4抢答电路及裁判控制开始停止电路

3.2.5数码管显示电路

采用排阻RESPACK-8来做为上拉电阻,排阻一般应用在数字电路上,通常作为某个并行口的上拉或者下拉电阻用。

排阻具有方向性,与色环电阻相比具有整齐、少占空间的优点,比用若干只固定电阻更方便。

图3.2.5排阻RESPACK-8

数码管7SEG-MPX4-CC-BLUE,它是共阴极的数码管

图3.2.6数码管7SEG-MPX4-CC-BLUE

4仿真过程示意

4.1开始抢答

开始抢答时,数码管显示000。

图4.1开始抢答

4.2抢答倒计时

允许抢答后,开始倒计时从15s直到0s。

在最后5s蜂鸣器会发出警报。

图4.2抢答倒计时

4.3答题及答题倒计时

第四组抢答,答题时间有30s,在最后5s蜂鸣器会发出警报。

图4.3第四组答题及答题倒计时

4.4违规抢答

若还没有允许抢答就有人按下抢答器,那么蜂鸣器会发出警报,并显示是哪一组违规抢答。

如图为第二组违规抢答。

图4.4第二组违规抢答

4.5答题正确加分

如图为第四组回答正确加一分

图4.5第四组答题正确加一分

4.6答题错误减分

如图为第四组回答错误减一分

图4.6第四组答题错误减一分

4.7抢答结束

抢答结束后电路复位,并记录各组抢答得分,待下次抢答得分累计。

5程序流程图

图5.1程序流程图

6课程设计总结

在这次课程设计中,我们运用到了以前所学的专业课知识,如:

汇编语言、模拟和数字电路知识等。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。

要做好一个课程设计,就必须做到:

在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。

发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。

设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

参考文献

[1]周立功.夏宇闻.单片机与CPLD综合应用技术[M].北京:

北京航空航天大学出版

[2]丁元杰.单片微机原理及应用[M].北京:

机械工业出版社.

[3]靳达编.单片机应用系统开发实例导航[M].北京:

人民邮电出版社.

[4]李光飞.单片机课程设计实例指导[M].北京:

北京航空航天大学出版社.

[5]胡宴如.高频电子线路[M].北京:

高等教育出版社.

[6]白驹珩.雷晓平.单片计算机及其应用[M].成都:

电子科技大学出版社.

[7]李广弟.单片机基础[M].北京:

北京航空航天大学出版社.

[8]沈美明.温冬婵.IBM汇编语言程序设计[M].北京:

清华大学出版社.

[9]彭传正.林春景.凌阳单片机原理与实践[M].北京:

北京航空航天大学出版社.

[10]李荣正.陈学军.PIC单片机实践教程[M].北京:

北京航空航天大学出版社。

 

附录:

源程序清单

OKEQU20H

RINGEQU22H

ORG0000H

AJMPMAIN

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

 

ORG0040H

MAIN:

MOVR1,#15;设置抢答倒计时时间15s

MOVR2,#30;设置答题倒计时时间30s

MOVTMOD,#11H;设置未定时器/工作方式1(16位计数器)

MOVTH0,#0F0H;

MOVTL0,#0FFH;越高发声频率越高,越尖(3.842ms)

MOVTH1,#3CH;

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

SETBEA

SETBET0

SETBET1

SETBEX1;允许3个中断,T0/T1/INT0/INT1

CLROK

CLRRING

SETBTR1

SETBTR0;开始就运行定时器,初始显示888如果想重新计数,重置TH1/TL1

 

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

START:

MOVR5,#00H

MOVR4,#00H

MOVR3,#00H

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

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

 

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

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

 

;=====INT1(答题对错加减分数程序)=====

INT1SUB:

MOVR4,#0AH

MOVR5,#0AH

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP1.7,BACK1

ACALLDISPLAY

AJMPINT1SUB

MOVA,R3

SUBBA,#01H

JZXXY1

SUBBA,#02H

JZXXY2

SUBBA,#03H

JZXXY3

SUBBA,#04H

JZXXY4

SUBBA,#05H

JZXXY5

SUBBA,#06H

JZXXY6

XXY1:

MOVR7,41H

XXY2:

MOVR7,42H

XXY3:

MOVR7,43H

XXY4:

MOVR7,44H

XXY5:

MOVR7,45H

XXY6:

MOVR7,46H

INC1:

INCR7

CJNER3,#01H,L1

MOV51H,R7

L1:

CJNER3,#02H,L2

MOV52H,R7

L2:

CJNER3,#03H,L3

MOV53H,R7

L3:

CJNER3,#04H,L4

MOV54H,R7

L4:

CJNER3,#05H,L5

MOV55H,R7

L5:

CJNER3,#06H,LL

MOV56H,R7

LL:

ACALLDELAY1

AJMPINT1SUB

DEC1:

DECR7

ACALLDELAY1

AJMPINT1SUB

BACK1:

RETI

 

;=====倒计时程序(抢答倒计时和回答倒计时都跳到该程序)=====

COUNT:

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

MOVTH1,#3CH;

MOVTL1,#0B0H;重置定时器(53ms)

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向下运行

CLRRING

AJMPCHECK

FULL:

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

SETBRING

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;如果按下了"停止键"执行的程序

CLRRING

AJMPSTART

 

;=====正常抢答处理程序=====

TRUE1:

ACALLBARK;按键发声

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

MOVR7,41H

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

AJMPCOUNT

TRUE2:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#02H

MOVR7,42H

CLROK

AJMPCOUNT

TRUE3:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#03H

MOVR7,43H

CLROK

AJMPCOUNT

TRUE4:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#04H

MOVR7,44H

CLROK

AJMPCOUNT

TRUE5:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#05H

MOVR7,45H

CLROK

AJMPCOUNT

TRUE6:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#06H

MOVR7,46H

CLROK

AJMPCOUNT

;=====犯规抢答程序=====

ERROR:

MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

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

HERE:

MOVA,R0

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

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

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

SETBRING

MOVR0,#00H

MOVR3,34H;取回号数

MOVR5,#0BH

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

AJMPCHECK1

CHECK1:

JNBP1.7,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:

CLRRING

CLROK

AJMPSTART

 

;=====显示程序=====

DISPLAY:

MOV41H,51H

MOV42H,52H

MOV43H,53H

MOV44H,54H

MOV45H,55H

MOV46H,56H

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

MOVA,r5

MOVCA,@A+DPTR

MOVP2,#01H

MOVP0,A

ACALLDELAY

MOVDPTR,#DAT2

MOVA,r4

MOVCA,@A+DPTR

MOVP2,#02H

MOVP0,A

ACALLDELAY

MOVA,r3

MOVCA,@A+DPTR

MOVP2,#04H

MOVP0,A

ACALLDELAY

MOVA,R7

MOVCA,@A+DPTR

MOVP2,#08H

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;第一个为零,其他与上相同,因为十位如果为零显示熄灭

 

;====加减时间延时(起到不会按下就加N个数)======

DELAY1:

MOV35H,#08H

LOOP0:

ACALLDISPLAY

DJNZ35H,LOOP0

RET

 

;=====延时(显示和去抖动用到)=====

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

 

;=====发声程序=====

BARK:

SETBRING

ACALLDELAY1

ACALLDELAY1

CLRRING;按键发声

RET

 

;=====TO溢出中断(响铃程序)=====

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

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

OUT:

RETI

 

;=====T1溢出中断(计时程序)=====

T1INT:

MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

END

PLC程设计成绩评定表

姓名

杨存恩

学号

1251401243

专业班级

电气工程及其自动化122班

课程设计题目:

基于单片机的抢答器设计

成绩评定依据:

评定项目

评分成绩

1.设计方案可行性及其选优(20分)

2.设计过程及结果(40分)

3.平时成绩(态度认真、遵守纪律)(10分)

4.设计报告的规范性、参考文献(不少于5篇)(10分)

5.答辩(20分)

总分

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

 

指导教师签字:

年月日

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

当前位置:首页 > 求职职场 > 简历

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

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