八路抢答器.docx
《八路抢答器.docx》由会员分享,可在线阅读,更多相关《八路抢答器.docx(12页珍藏版)》请在冰豆网上搜索。
八路抢答器
学号:
成绩_
单片机及接口技术
课程设计报告
题目八路抢答器的设计
学院电信学院专业
班级学生
指导教师设计时间:
2010/12/27~31
八路抢答器的设计
一、实验概述
设计8路抢答器的PROTEUS仿真电路图,电路要求有4位LED数码管和8个输入按键和一个输出小喇叭,4位数码管输出显示信息,喇叭输出声音提示信息,8个按键作为选手的抢答控制或其它复用控制。
编程实现如下功能:
(1)系统运行初始状态显示你的最后3位学号
(2)主持人按按键,响铃提示进入显示抢答题20秒倒计时。
a、20秒期间选手选题,显示选手号和进入90s答题倒计时,0s响铃结束,显示开始状态的学号。
b、20秒期间选手不选题,则0s响铃结束,显示开始状态的学号。
附:
响铃子程序
RING:
MOV21H,#0FFH;响铃子程序
RIN1:
CPLP3.3
LCALLD2MS;调用延时子程序
DJNZ21H,RIN1
RET
RD2MS:
MOVR5,#04;延时子程序
DEL1:
MOVR7,#248
DJNZR7,$
DJNZR5,DEL1
RET
二、硬件设计(文字性概述和电路图)
如图所示P3.0为主持人按键开关,P3.3为响铃端口,P1为选手按键端口,P2为输出口。
三、系统主要程序的设计(文字概述和主要程序的流程图)
四、实验运行结果
上图是初始化效果图
上图是抢答20秒倒计时效果图
上图是选手答题90秒倒计时效果图(第一位为选手号,二三位为90秒倒计时显示)
五、汇编程序清单
ORG0000H
LJMPSTART
ORG000BH
LJMPT0INT
ORG001BH
LJMPT1INT
ORG0100H
START:
MOVSP,#30H
MOVDPTR,#TAB
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#3CH
MOVTL1,#0B0H
MOVR0,#20
MOVR3,#20
SETBEA
SETBET0
SETBET1
;***********显示3位学号等待P3.0输入******************
D0:
MOVR1,#20
MOVR2,#90
D1:
MOVA,#1
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#01H
LCALLD2MS
MOVP2,#00H
MOVA,#2
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#02H
LCALLD2MS
MOVP2,#00H
MOVA,#6
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#04H
LCALLD2MS
MOVP2,#00H
JNBP3.0,D2
LJMPD1
;**************20秒倒计时等待八路开关*****************
D2:
CALLRING
SETBTR0
D3:
MOVA,R1
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#01H
LCALLD2MS
MOVP2,#00H
MOVA,B
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#02H
LCALLD2MS
MOVP2,#00H
JNBP1.0,G1
JNBP1.1,G2
JNBP1.2,G3
JNBP1.3,G4
JNBP1.4,G5
JNBP1.5,G6
JNBP1.6,G7
JNBP1.7,G8
CJNER1,#0,D3
LCALLRING
LJMPD0
;***************八路分支程序**************************
G1:
CLRTR0
SETBTR1
MOV42H,#1
LCALLD90S
LJMPD0
G2:
CLRTR0
SETBTR1
MOV42H,#2
LCALLD90S
LJMPD0
G3:
CLRTR0
SETBTR1
MOV42H,#3
LCALLD90S
LJMPD0
G4:
CLRTR0
SETBTR1
MOV42H,#4
LCALLD90S
LJMPD0
G5:
CLRTR0
SETBTR1
MOV42H,#5
LCALLD90S
LJMPD0
G6:
CLRTR0
SETBTR1
MOV42H,#6
LCALLD90S
LJMPD0
G7:
CLRTR0
SETBTR1
MOV42H,#7
LCALLD90S
LJMPD0
G8:
CLRTR0
SETBTR1
MOV42H,#8
LCALLD90S
LJMPD0
;*************90秒倒计时子程序****************************
D90S:
MOVA,42H
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#01H
LCALLD2MS
MOVP2,#00H
MOVA,R2
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#02H
LCALLD2MS
MOVP2,#00H
MOVA,B
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#04H
LCALLD2MS
MOVP2,#00H
CJNER2,#0,D90S
LCALLRING
RET
;*************定时器T0**************************
T0INT:
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZR0,NEXT1
MOVR0,#20
DECR1
CJNER1,#0,NEXT1
CLRTR0
NEXT1:
RETI
;*************定时器T1***************************
T1INT:
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZR3,NEXT2
MOVR3,#20
DECR2
CJNER2,#0,NEXT2
CLRTR1
NEXT2:
RETI
RING:
MOV21H,#0FFH;响铃子程序
RIN1:
CPLP3.3
LCALLD2MS;调用延时子程序
DJNZ21H,RIN1
SETBP3.3
RET
D2MS:
MOVR5,#04;延时子程序
DEL1:
MOVR7,#248
DJNZR7,$
DJNZR5,DEL1
RET
TAB:
DB28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H
END
六、实验体会
这次实验主要是通过结合以前学习的知识来进行的,比如中断,调用子程序,延时等,实验刚开始,对于写代码比较麻烦,但是有很多子程序都是以前做实验做过的,所以直接拿过来用了,比如倒计时的子程序,延时子程序,但由于对之前的知识掌握不够透彻,所以再写代码时经常出现卡到瓶颈,只能慢慢思考,或者请教别人,很多东西不是说别人教你你就会的,而是要看自己怎么理解,所以更重要的还是在于自己如何领悟。
团队能力固然重要,但是如果你连一点基础都没有怎么谈团队,那样你只会拖后腿,再别人看来你是在不之所谓,所以个人能力还是很重要的,但是只有付出才会有收获,世界上是没有不劳而获的事情的。