抢答器.docx
《抢答器.docx》由会员分享,可在线阅读,更多相关《抢答器.docx(12页珍藏版)》请在冰豆网上搜索。
抢答器
单片机课程设计报告
抢答器
姓名:
李加帅
班级:
自动化
学号:
20123024241
指导老师:
蔡文龙
日期:
2014.6.16~2014.6.20
北华航天工业学院
一、设计目的
单片机课程设计要求学生进一步了解单片机的硬件结构。
根据设计任务和单片机的功能,分析用单片机的功能实现设计任务的方法,充分考虑单片机的各种功能,最大限度的利用单片机软件、硬件资源,考虑硬件、软件资源的分配,力求以最低的成本实现设计任务要求的功能。
通过单片机课程设计要求学生能够更好的理解单片机的组成,理解单片机各个组成部分的功能和应用,了解单片机的广泛应用,学习单片机的应用方法。
二、设计任务和要求
1、4路输入抢答,1路开始、1路结束(由主持人控制)
2、正常开始抢答:
①、15S抢答时间,在最后5S会有提醒响铃,每一秒响一次,持续5S。
如15S内没抢答,回到最初状态FFF;②、如15S内抢答,则有8S回答时间,在最后5S也会有提醒响铃,每一秒响一次,持续5S,答题结束回到最初状态FFF
3、非正常抢答:
未按开始键就进行抢答,LED数码显示管会记下抢答号,并进行闪烁,同时报警。
4、不管如何抢答,按下结束键,抢答结束,回到FFF
三、设计原理分析
硬件电路的设计
本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。
只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务,随着集成电路技术的飞速发展,各种功能很强的芯片不断出现,使硬件电路的集成度越来越高,硬件设计的工作量在整个项目中的所占的比重逐渐下降。
为使硬件电路设计尽可能合理,应注意以下几方面[7]:
(1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。
(2) 留有设计余地。
在设计硬件电路时,要考虑到将来修改扩展的方便。
因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。
(3) 程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C51单片机。
(4) RAM空间,AT89C51内部RAM不多,当要增强软件数据处理功能时,往往觉得不足。
如果系统配置了外部RAM,则建议多留一些空间。
如选用8155作I/O接口,就可以增强256字节RAM。
如果有大批数据需要处理,则应配置足够的RAM,如6264,62256等。
随着软件设计水平的提高,往往只要改变或增加软件中的数据处理算法,就可以使系统功能提高很多,而系统的硬件不必做任何更换就使系统升级换代。
只要在硬件电路设计初期考虑到这一点,就应该为系统将来升级留足够的RAM空间,哪怕多设计一个RAM的插座,暂不插芯片也好。
(5) I/O端口:
在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。
如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。
如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。
四、硬件原理图
如图,P3.2~P3.5为抢答号1~4,P3.6为开始键,P3.7为结束键。
数码管段选为P2口,位选为P1口,蜂鸣器输出为P1.2
五、程序框图、流程图
六、程序清单
OKEQU20H
RINGEQU22H
ORG0000H
AJMPMAIN
ORG000BH
AJMPT0INT
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#0FH
MOVR2,#08H
MOVTMOD,#11H
MOVTH0,#0FDH
MOVTL0,#0FFH
MOVTH1,#21
MOVTL1,#168;0.06s
SETBEA
SETBET0
SETBET1
CLROK
CLRRING
SETBTR1
SETBTR0
;=====查询程序=====
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY
JBP3.6,NEXT
ACALLDELAY
JBP3.6,NEXT
ACALLBARK
MOVA,R1
MOVR6,A
SETBOK
MOVR3,#0BH
AJMPCOUNT
NEXT:
JNBP3.2,FALSE1
JNBP3.3,FALSE2
JNBP3.4,FALSE3
JNBP3.5,FALSE4
AJMPSTART
;=====非法抢答处理程序=====
FALSE1:
ACALLBARK
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
AJMPERROR
FALSE3:
ACALLBARK
MOVR3,#03H
AJMPERROR
FALSE4:
ACALLBARK
MOVR3,#04H
AJMPERROR
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
COUNT:
MOVR0,#00H
MOVTH1,#21
MOVTL1,#168;0.06s
RECOUNT:
MOVA,R6
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVA,R6
SUBBA,#07H
JNCLARGER;大于3s会跳到LARGET,小雨3s就会提醒
MOVA,R0
CJNEA,#0AH,FULL;1S中0.5s向下运行
CLRRING
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;1S的情况响并显示号数并请0
SETBRING
MOVA,R6
JZQUIT;计时完毕
MOVR0,#00H
DECR6;1s标志减一
AJMPCHECK
LARGER:
MOVA,R0
CJNEA,#14H,CHECK;如果1s向下运行,否则跳到"查停或者显示"
DECR6
MOVR0,#00H
CHECK:
JNBP3.7,QUIT;如果按下停止退出
ACALLDISPLAY
JBOK,ACCOUT;如果是抢答倒计时时,如果是则差虚报抢答否则跳过查询继续倒数
AJMPRECOUNT
ACCOUT:
JNBP3.2,TRUE1
JNBP3.3,TRUE2
JNBP3.4,TRUE3
JNBP3.5,TRUE4
AJMPRECOUNT
QUIT:
CLROK
CLRRING
AJMPSTART
;=====正常抢答处理程序=====
TRUE1:
ACALLBARk
MOVR6,#0
MOVA,R2
MOVR6,A
MOVR3,#01H
CLROK
AJMPCOUNT
TRUE2:
ACALLBARK;
MOVR6,#0
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPCOUNT
TRUE3:
ACALLBARK;
MOVR6,#0
MOVA,R2
MOVR6,A
MOVR3,#03H
CLROK
AJMPCOUNT
TRUE4:
ACALLBARK;
MOVR6,#0
MOVA,R2
MOVR6,A
MOVR3,#04H
CLROK
AJMPCOUNT
;=====犯规抢答程序=====
ERROR:
MOVR0,#0FFH
MOVTH1,#21
MOVTL1,#168;0.06s
MOV34H,R3;犯规号暂存在34h里面
HERE:
MOVA,R0
CJNEA,#0AH,FLASH;0.5s向下运行,灭并停响
SETBRING
ACALLDELAY1
ACALLDELAY1
CLRRING
SETBP1.4
SETBP1.5
SETBP1.6;三灯全灭
ACALLDELAY2
AJMPERROR
FLASH:
CJNEA,#14H,CHECK1;1s的情况响并显示号数并清除R0
SETBRING
MOVR0,#00H
MOVR3,34H
MOVR5,#0BH
MOVR4,#0BH;显示FF和犯规的选手
AJMPCHECK1
CHECK1:
JNBP3.7,QUIT1
ACALLDISPLAY
AJMPHERE
QUIT1:
CLRRING
CLROK
AJMPSTART
DISPLAY:
MOVP1,#11101111B
MOVA,R5
MOVDPTR,#DAT1
MOVCA,@A+DPTR
MOVP2,A
ACALLDELAY
MOVP1,#11011111B
MOVA,R4
MOVDPTR,#DAT1
MOVCA,@A+DPTR
MOVP2,A
ACALLDELAY
MOVP1,#10111111B
MOVA,R3
MOVDPTR,#DAT1
MOVCA,@A+DPTR
MOVP2,A
ACALLDELAY
RET
DAT1:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0c0h,8EH
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
DAT2:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;"0","1","2","3","4","5","6","7","8","9"
DELAY1:
MOV35H,#08H
LOOP0:
ACALLDISPLAY
DJNZ35H,LOOP0
RET
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
RET
DELAY2:
MOVR7,#2
L1:
MOV35H,#200
L2:
MOV36H,#200
L3:
MULAB
MULAB
DJNZ36H,L3
DJNZ35H,L2
DJNZR7,L1
RET
BARK:
SETBRING
ACALLDELAY1
ACALLDELAY1
CLRRING
RET
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT
CPLP1.2
OUT:
RETI
T1INT:
MOVTH1,#21
MOVTL1,#168;0.06s
INCR0
RETI
END
七、调试运行
仿真完全正确,实物也完全正确,100%完成功能
八、设计心得体会
通过这次学习,让我深深的了解了单片机这个伟大的系统,它的功能是如此强大,利用它就可以做出各种各样的设备来,比如电子钟、交通灯控制系统,温度控制系统等等,自从学了单片机我对电脑也刮目相看了,电脑跟单片机联系在一起就是非常棒了。
下面说说我在做个系统的时候遇到的问题:
1.自己对单片机的程度设计还不是非常得心应手,应该努力恶补一下。
2.对电路不熟悉,对电路的不熟悉在设计过程中成为了我的绊脚石。
3.编程时不够仔细,往往一个小错误就导致了功能不能实现。
除了遇到的问题一一解决之外,我还学到了非常多的东西,我发现单片机的是非常强大啊,什么事情都能做,我还在设计之余学习了单片机的目前发展规律和市场,希望以后自己在这方面做做文章。
十、参考文献
[1]胡汉才单片机原理及其接口技术(第2版)清华大学出版社2004
[2]冀振燕LJML系统分析设计与应用案例人民邮电出版社2003
[3]王文峰数码显示六路抢答器的设计井冈山师范学院学报2000年05期20-21
[4]陈越等ISD全系列单片语音录放电路设计与应用电子工业出版社2005
[5]杨晓辉、张彤、姜俊海、智能抢答器的设计与制作长春大学学报2000年06期24-25
[6]沈庆阳、郭庭吉8051单片机实践与应用清华大学出版社2004