多路抢答器课程设计报告.docx
《多路抢答器课程设计报告.docx》由会员分享,可在线阅读,更多相关《多路抢答器课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
多路抢答器课程设计报告
目录
1设计任务和性能指标1
1.1设计任务1
1.2性能指标1
2设计方案1
2.1需求分析1
2.2方案论证2
3系统硬件设计2
3.1硬件电路功能介绍2
3.2硬件电路原器件3
3.2硬件电路图3
3.3准备状态图4
3.4抢答倒计时4
3.5五号抢答及回答倒计时5
4系统软件设计6
4.1程序主流程图6
4.2抢答违规流6
4.3查询程序流程7
4.4抢答时间调整9
5系统硬件设计10
5.1调试步骤10
5.2性能分析10
6总结和体会11
参考文献12
附录1程序清单13
1设计任务和性能指标
1.1设计任务
本课程设计所制作的多路抢答器以八路抢答器做为例,该抢答器具有定时抢答的功能。
参赛选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手。
如定时抢答时间已到,无选手抢答,抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示
1.2性能指标
1、实现多路抢答;
2、能显示最终抢答题机会的机号;
3、主持人有控制抢答的权限;
4、实现抢答时间和回答时间的调整。
2设计方案
2.1需求分析
1原理
抢答器的工作原理为:
接通电源后,主持人将开关拨到"清零"状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置;开始"状态,宣布"开始"抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"清除"和"开始"状态开关。
2任务
(1)画出程序流程图
(2)分析电路图
(3)编写代码
(4)程序分析与仿真
2.2方案论证
按照要求,初步确定设计系统由主控模块、显示模块、抢答接口电路三个部分组成,电路系统构成框图。
主控芯片使用AT89C51单片机芯片,控制电路由两个抢答控制按钮和4个抢答时间调整按钮组成,抢答电路由8个同步抢答按键,显示部分由一个四公阴二极显示器和8个上拉电阻构成。
3系统硬件设计
3.1硬件电路功能介绍
如图4。
1所示接在X1、X2两个引脚之间的为晶振,为整个单片机提供时序逻辑。
P0端口(P0.0-P0.7):
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P2.0到P2.3为显示器控制位,控制是显示抢答小组的组号还是正式答题时的倒计时时间数。
P1端口(P1.0-P1.7):
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高电平,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
此次P1.0到P1.7代表8组选手控制键,按键按下时表示该组抢答,P3.0为开始键,P3.1为停止键,P3.2为抢答时间调整P3.3回答时间调整位P3.4为加1P3.5为减1P3.6为扬声器控制位,当主持人闭合开关扬声器发声,多路抢答器电路和计时电路进入正常状态;参赛者按键时,扬声器发声,抢答电路和计时电路停止工作;若是抢答时间到,无人抢答,扬声器发声,抢答电路和计时电路停止工作。
3.2硬件电路原器件
原器件
数量
10K电阻
7个
按钮
15个
AT89C51芯片
1个
200欧电阻
1个
500欧电阻
1个
30pF电容
2个
晶振
1个
8输入端与非门
1个
10u电容
1个
四个公阴二极显示器
1个
74LS04反相器
1个
表1硬件电路原器件列表
3.2硬件电路图
图3.1八路抢答器硬件电路图
3.3准备状态图
图3.2准备状态电路图
3.4抢答倒计时
图3.3抢答倒计时图
3.5五号抢答及回答倒计时
图3.4五号抢答及回答倒计时图
4系统软件设计
4.1程序主流程图
图4.1程序主流程图
4.2抢答违规流
当抢答选手没有在规定的时间按抢答按钮时,抢答器进入违规抢答程序。
具体程序如下:
=====================非法抢答处理程序=========================
FALSE1:
MOVR3,#01H
AJMPERROR
FALSE2:
MOVR3,#02H
AJMPERROR
FALSE3:
MOVR3,#03H
AJMPERROR
FALSE4:
MOVR3,#04H
AJMPERROR
FALSE5:
MOVR3,#05H
AJMPERROR
FALSE6:
MOVR3,#06H
AJMPERROR
FALSE7:
MOVR3,#07H
AJMPERROR
FALSE8:
MOVR3,#08H
AJMPERROR
图4.2抢答违规流程图
4.3查询程序流程
==========================查询程序===========================
START:
MOVDATA0,#0FFH;初始化
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JNBP3.3,SELSUB0
JNBP3.4,TZ3;倒计时调整
JBP3.0,NEXT
ACALLDELAY
JBP3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
SETBEX0;开放INT0
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保存了抢答时间
SETBOK;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是回答倒计时
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,TZ1
JNBP1.7,TZ2
AJMPSTART
TZ1:
AJMPFALSE7
TZ2:
AJMPFALSE8
TZ3:
AJMPSELSUB1
图4.3查询程序流程图
4.4抢答时间调整
当遇到特殊情况需要延长、缩短抢答时间及回答时间是主持人可以通过调整按钮调整相应的时间。
调整抢答时间的程序如下:
=================SELSUB0(抢答时间R1调整程序)==================
SELSUB0:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.5,INC0;P3.5为+1s键,如按下跳到INCO
JNBP3.6,DEC0;P3.6为-1s键,如按下跳到DECO
JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMPSELSUB0
INC0:
MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起.
MOVR1,#00H
ACALLDELAY1
AJMPSELSUB0
ADD0:
INCR1
ACALLDELAY1
AJMPSELSUB0
DEC0:
MOVA,R1
JZSETR1;如果R1为0,R1就置99,
DECR1
ACALLDELAY1
AJMPSELSUB0
SETR1:
MOVR1,#63H
ACALLDELAY1
AJMPSELSUB0
BACK0:
AJMPSTART
5系统硬件设计
5.1调试步骤
(1)启动抢答器前抢答器的显示屏上显示FFF,表明抢答器处于准备就绪状态。
(2)确定抢答器是抢答时间及回答时间是否需要调整,如果要调整,主持人通过相应的调整按钮调整时间。
(3)主持人按开始抢答按钮,系统发出警告声,显示屏上出现抢答倒计时时间;各选手在规定的时间内按抢答按钮,系统将最先压抢答按钮的选手号码输出到显示屏上,并开始进入回答问题倒计时。
(4)选手在回答规定时间内完成回答,主持人按停止按钮,系统回到抢答初始准备状态;当回答时间剩余5秒时,系统提示报警声,。
5.2性能分析
本多路抢答器要求有计时记忆功能,一次时间设置完,复位后不需重新进行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数码管上显示字型码。
当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功。
同时显示其分数,分数的加减可由裁判手动进行。
采用独立式键盘,可实现8路抢答。
在显示时使用的是七段数码管显示在本设计中根据实际情况采用的是动态显示方法。
并通过查表法,将其在数码管上显示出来,其中P1口为字型码输入端,P2口低6位为字选段输入端。
通过查表将字型码送给7段数码管显示的数字。
软件去抖动,如果"开始键"按下就向下执行,否者跳到开始。
采用倒计时程序,使其具有倒计时功能。
回答倒计时30秒。
抢答时间5秒。
采用发声警报(由于发生器不响,所以,用绿灯换了),起到报警作用。
6总结和体会
单片机课程设计是一门很实用,很难的设计。
这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我们对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。
完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。
刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。
可是当我们动手开始做的时候,才发现其中的算法,设计是那么繁琐。
经过一天的努力,毫无结果。
失落的心情油然而生。
于是,再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有点眉目了。
埋头苦干的过程是痛苦的,尤其是在思考算法和程序框架时,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。
在痛苦中挣扎,建立,推翻,参考别人的思路,建立,再次在推翻,在这不断循环中,终于最后完善了程序。
其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。
但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我们学到了知识,学到了做人的道理。
通过这次的模拟实践,我们感觉到自己从课本上学到的理论知识和实践仍有很大的差距。
最少很多元器件根本不知道有什么功效,在仿真仪器中是什么代码。
有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。
我们遇到了不少问题,花费了很多的时间。
这让我们重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。
理论不经过实践考验,是没法实施的,就像我们编的程序,很多方面考虑的都不够,几乎没有涉及到实际应用时的防范方法措施。
这次的课程设计,让我们学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。
最大的收获是:
对键盘,显示器,C51语言(虽然最后还是用汇编语言编写的,但是,我们也试着学用了C51)的应用有了深刻的了解。
参考文献
[1]张迎新。
《单片机初级教程》。
北京航天航空大学出版社2000年。
[2]康华光。
《电子技术基础(模拟部分)》。
第四版高等教育出版社1999年。
[3]喻宗泉。
《单片机原理与应用技术》。
西安电子科技大学出版社2005年。
[4]万光毅。
《单片机实验与实践教程》。
北京航天航空大学出版社2003年。
[5]张俊谟。
《单片机初级教程》。
北京航天航空大学出版社2000年。
附录1程序清单
;=======================多路抢答器程序========================
OKEQU20H;抢答开始标志位
RINGEQU22H;响铃标志位
DATA0EQU36H;抢答按键口数据存放地址
ORG0000H
AJMPMAIN
ORG0003H
AJMPINTT0
ORG000BH
AJMPT0INT
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#20;初设抢答时间为20s
MOVR2,#30;初设答题时间为30s
MOV38h,#60;启用锦囊时间从60s倒计时
MOVTMOD,#11H;设置未定时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;50ms为一次溢出中断
SETBEA
SETBET0
SETBET1;允许二个中断,T0/T1
CLROK
CLRRING
SETBTR1
SETBTR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
;==========================查询程序===========================
START:
MOVDATA0,#0FFH;初始化
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JNBP3.3,SELSUB0
JNBP3.4,TZ3;倒计时调整
JBP3.0,NEXT
ACALLDELAY
JBP3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
SETBEX0;开放INT0
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保存了抢答时间
SETBOK;抢答标志位,在使用锦囊时用作判断是抢答倒计时还是回答倒计时
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,TZ1
JNBP1.7,TZ2
AJMPSTART
TZ1:
AJMPFALSE7
TZ2:
AJMPFALSE8
TZ3:
AJMPSELSUB1
;=====================非法抢答处理程序=========================
FALSE1:
MOVR3,#01H
AJMPERROR
FALSE2:
MOVR3,#02H
AJMPERROR
FALSE3:
MOVR3,#03H
AJMPERROR
FALSE4:
MOVR3,#04H
AJMPERROR
FALSE5:
MOVR3,#05H
AJMPERROR
FALSE6:
MOVR3,#06H
AJMPERROR
FALSE7:
MOVR3,#07H
AJMPERROR
FALSE8:
MOVR3,#08H
AJMPERROR
;=================SELSUB0(抢答时间R1调整程序)==================
SELSUB0:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.5,INC0;P3.5为+1s键,如按下跳到INCO
JNBP3.6,DEC0;P3.6为-1s键,如按下跳到DECO
JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMPSELSUB0
INC0:
MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起.
MOVR1,#00H
ACALLDELAY1
AJMPSELSUB0
ADD0:
INCR1
ACALLDELAY1
AJMPSELSUB0
DEC0:
MOVA,R1
JZSETR1;如果R1为0,R1就置99,
DECR1
ACALLDELAY1
AJMPSELSUB0
SETR1:
MOVR1,#63H
ACALLDELAY1
AJMPSELSUB0
BACK0:
AJMPSTART
;==================SELSUB1(回答时间R2调整程序)================
SELSUB1:
MOVA,R2
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY
JNBP3.5,INC1
JNBP3.6,DEC1
JNBP3.1,BACK1
AJMPSELSUB1
INC1:
MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ACALLDELAY1
AJMPSELSUB1
ADD1:
INCR2
ACALLDELAY1
AJMPSELSUB1
DEC1:
MOVA,R2
JZSETR2
DECR2
ACALLDELAY1
AJMPSELSUB1
SETR2:
MOVR2,#63H
ACALLDELAY1
AJMPSELSUB1
BACK1:
AJMPSTART
;======================启用锦囊程序===========================
REPEAT:
MOVA,38h;使用锦囊时重新计时
MOVR6,A
CLRRING;当倒计时进入最后5秒的时候,启用锦囊能消除蜂鸣
;===========倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=========
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向下运行
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:
JNBP3.1,QUIT;如按下停止键退出
JNBOK,CHECKK;只在回答倒计时才有效
AJMPNEXTT
CHECKK:
JNBP3.0,REPEAT;判断是否使用锦囊
NEXTT:
ACALLDISPLAY
JBOK,ACCOUT
;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
MOVA,DATA0
JNBACC.0,TRUE1
JNBACC.1,TRUE2
JNBACC.2,TRUE3
JNBACC.3,TRUE4
JNBACC.4,TRUE5
JNBACC.5,TRUE6
JNBACC.6,TZ7
JNBACC.7,TZ8
AJMPRECOUNT
TZ7:
AJMPTRUE7
TZ8:
AJMPTRUE8
QUIT:
CLROK;如果按下了"停止键"执行的程序
CLRRING
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
TRUE7:
ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#07H
CLROK
AJMPCOUNT
TRUE8:
ACALLBARK
MOVA,R2
MOVR6,