八路抢答器课程设计.docx
《八路抢答器课程设计.docx》由会员分享,可在线阅读,更多相关《八路抢答器课程设计.docx(15页珍藏版)》请在冰点文库上搜索。
八路抢答器课程设计
八路抢答器设计
一.设计目的
1通过八路抢答器的设计,掌握软硬件的结合应用。
2深入了解汇编语言和指令系统。
3学会使用数码管的显示和编程。
4初步掌握应用系统的设计。
二.设计要求
1容许8组进行抢答;
2抢答按钮按下后,显示最先按下的抢答组号;
3抢答后开始倒计时2分钟,时间到发报警提示;
4比赛结束时,能发出报警声。
三.设计任务和内容
1因为模拟的是实际抢答器,所以当系统上电后系统就进入准备抢答阶段,处于准备状态。
各组相对于的信号灯灭,数码管也不显示。
2结束按钮接外部中断0,用中断服务子程序来结束答题。
P3.7通过三极管接报警器。
3当系统进入答题准备状态后,开始抢答时只显示最先按下去的那一组,其他组再按不作处理。
当刚刚好有多于一组同时按下时,有主持人宣布此次抢答无效,需重新进行抢答。
最先按下去的那一组,会立即看到对应组的信号灯发亮,然后立即进入答题两分钟,本系统采取120秒倒计时,当倒计时结束后,立即发出报警宣布本次答题结束。
系统会返回最初状态,准备进入下一轮作答。
4游戏结束后,由主持人按结束按钮结束本次游戏。
正文
一、资源分配
1、P0口用来接控制第一组到第八组的信号灯(D1~D8)的亮灭,亮代表有组按下,当有一组按下后相应的信号灯点亮,其他组再按下已无效,信号灯不亮。
P1口用于第一组号到第八组的按键输入。
RP1是集成电阻,接P0口用作上拉电阻。
2、P2口通过数据锁存器74LS373分别接三个七段数码管,数码管用于显示120秒倒计时.锁存器u1,u2,u3的使能端OE接共地。
P3.4~P3.6分别用来控制u1,u2,u3的使能端LE,当LE送1则相应的74LS373选通送数据显示,当LE送0则相应的74LS373关端锁存之前显示的数据。
3、P3.2做外部中断的输入,当输入是低电平时,申请CPU中断响应,转到中断服务子程序,喇叭发出报警。
4、P3.7用于控制报警装置的发声,通过三极管的放大作用,分时送以高低电平即可发出声音。
二、硬件电路设计
1、抢答按钮(图1)
第一组到第八组的开关分别到89c51芯片的p1.0~p1.7引脚上,结束按钮连接在p3.2的引脚上。
上电后,通过一到八组的开关进行抢答,当其中一组最先强到了,其他的按钮就暂时失去作用;当结束按钮按下,所有程序中断。
2、抢答显示(图2)
图1中一到八组按钮对应的发光二极管D1~D8,RP1为上拉电阻。
RP1和D1~D8接到89C51的P0口上。
上电后,通过图1中的一到八组的任意按钮按下,D1~D8对应的灯被点亮。
3、答题倒计时
三个七段数码管分别通过数据锁存器74LS373分别接P2口上,数码管用于显示120秒倒计时.锁存器u1,u2,u3的使能端OE接共地。
P3.4~P3.6分别用来控制u1,u2,u3的使能端LE,当LE送1则相应的74LS373选通送数据显示,当LE送0则相应的74LS373关端锁存之前显示的数据。
通上电后,按下抢答按钮(图1),开始120s倒计时。
4、报警装置(图4)
P3.7用于控制报警装置的发声,通过三极管的放大作用,分时送以高低电平即可发出声音。
当倒计时120s时间到时(图3),报警启动,发出声音;当比赛结束时,按下结束按钮(图1),报警启动,发出声音。
5、还有复位电路和外接晶振电路见附件工程图
图1图4
图2
图3
三、软件设计
抢答器主程序流程图
程序开始
:
单片机及各口的初始化
:
置位p1口,再读取P1口的输入数据。
:
判断P1口是否有输入,即判断是否有人作答。
:
抢答信号灯发亮,开始2分钟倒计时。
:
答题结束后发出报警,调用报警子程序
程序结束
子程序流程图
倒计时120秒子程序流程图倒计时9秒子程序
报警子程序流程图
总结
一、调试:
软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
程序后,编辑,查看程序是否有逻辑的错误。
二、程设计体会
通过一个星期的实训,我对单片机有了更深的体会。
我了解和掌握了一些编程思想和对I/O口的使用。
这次实训通过单片机的I/O口来控制抢答灯。
在编程的过程中,可以说是比较顺利,
通过这次的实训,对单片机的I/O口的使用的条件有更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。
这次的课程设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,让我受益匪浅,我以后参加工作或者继续学习将会产生巨大的帮助和影响。
三、考文献
1单片机原理及接口技术(第三版)李朝清编著北京航空航天大学出版社
附件1
*********************
*主程序*
*********************
ORG0000H
AJMPSTART
ORG0003H
LJMPzhong
ORG0030H
START:
MOVP2,#00H;数码管灭
MOVTCON,#00H;中断初始化
SETBEX0;外部中断0允许
SETBEA;CPU开中断
L1:
MOVP1,#0FFH;置P1为输入口
MOVA,P1;读p1口
CPLA;取反A
JZL1;A全为0则转移L1继续查询,否则顺序执行?
CPLA;取反A
MOVP0,A;A送P0做信号灯显示
MOVP1,#00H;P1送立即数0,禁止输入
lcallDIS;延时一秒
LCALLDAO120;调用120秒倒计时子程序
movP0,#0FFH;关闭信号组等
SETBP3.4
SETBP3.5
SETBP3.6
MOVP2,#00H;数码管灭
LCALLBJING;调用报警子程?
LJMPSTART;返回进入下一轮回答的准备
*********************
*120秒倒计时子程序*
*********************
DAO120:
CLRP3.1
CLRP3.0
CLRP3.3
setbP3.4
CLRP3.5
CLRP3.6
MOVP2,#06H;百位送1
CLRP3.4;锁百位1
SETBP3.5
MOVP2,#5BH;十位送2
CLRP3.5;锁十位2
setbP3.6
MOVP2,#3FH;个位送0
CLRP3.6;个位锁0
LCALLDIS;延时一秒
SETBP3.5
MOVP2,#06H;十位送1
CLRP3.5;十位锁1
SETBP3.6
LCALLDANJI;调用9~0倒计时
CLRP3.6
SETBP3.5
MOVP2,#3FH;十位送0
CLRP3.5;十位锁0
SETBP3.6
LCALLDANJI;调用9~0倒计时
CLRP3.6
SETBP3.4
MOVP2,#3FH;百位送0
CLRP3.4;百位锁0
SETBP3.5
MOVP2,#6FH;十位送9
CLRP3.5;十位锁9
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#7FH;十位送8
CLRP3.5;十位锁8
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#07H;十位送7
CLRP3.5;十位锁7
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#7DH;十位送6
CLRP3.5;十位锁6
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#6DH;十位送5
CLRP3.5;十位锁5
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#66H;十位送4
CLRP3.5;十位锁4
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#4FH;十位送3
CLRP3.5;十位锁3
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#5BH;十位送2
CLRP3.5;十位锁2
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#06H;十位送1
CLRP3.5;十位锁1
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
SETBP3.5
MOVP2,#3FH;十位送0
CLRP3.5;十位锁0
SETBP3.6
LCALLDANJI;调用9~0倒计时
clrP3.6
*********************
*9~0倒计时子程序*
*********************
DANJI:
SETBP3.6;9~0倒计时子程序
MOVP2,#6FH
LCALLDIS
MOVP2,#7FH
LCALLDIS
MOVP2,#07H
LCALLDIS
MOVP2,#7DH
LCALLDIS
MOVP2,#6DH
LCALLDIS
MOVP2,#66H
LCALLDIS
MOVP2,#4FH
LCALLDIS
MOVP2,#5BH
LCALLDIS
MOVP2,#06H
LCALLDIS
MOVP2,#3FH
LCALLDIS
RET
*********************
*报警装置子程序*
*********************
BJING:
movr2,#0a0h;报警子程序
llop:
clrP3.7;使v19015导通
acalld1ms;延时
setbP3.7;使v19015截止
acalld1ms
djnzr2,llop
d1ms:
movr0,#10
dloop:
movr1,#250;改变r0的数值将改变声音频率
djnzr1,$
djnzr0,dloop
ret
*********************
*延时一秒子程序*
*********************
DIS:
MOVR5,#08H
LOOP2:
MOVR6,#0FFH
LOOP3:
MOVR7,#0FCH
DJNZR7,$
DJNZR6,LOOP3
DJNZR5,LOOP2
RET
*********************
*中断服务子程序*
*********************
zhong:
SETBP3.4
SETBP3.5
SETBP3.6
MOVP2,#00H;数码管灭
movP0,#0FFH
lcallBJING
LJMPSTART
RETI
END
附件2