资源描述:
《数字抢答器设计课程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、目录摘要Ⅰ1前言12需求分析12.1原理12.2要求12.3任务12.4运行环境12.5开发工具13概要设计23.1系统流程图23.2定时计数流程图23.3编号显示流程图33.4译码显示子程序43.5延时子程序53.6外部中断0程序54详细设计64.1设计思想64.2设计分析64.3设计实现源程序74.4设计测试结果115课程设计的总结与体会15参考文献资料16致谢16161前言现在社会中很多活动需要多个选手参加并竞争,其中抢答器是应用较多也较为广泛的工具之一。结合现实,设计一款基于单片机控制的多路数字抢答器,并满足一定得功能。2需求分析2.1原理(1).7
2、4LS147译码器和80C51对选手的编号进行一一对应的显示(2).用80C51的内部时钟脉冲进行定时计数。(3).七段译码显示器显示时间和选手编号。(4).利用80C51的外部中断0来控制开启。2.2要求(1).抢答器可供多名(大于2)选手或队伍参加比赛。(2).抢答器分为选手控制端和主持人控制端。(3).主持人端控制抢答开始并进行系统清零。(4).当主持人启动"开始"键后,显示器上显示抢答倒计时。(5).参赛选手在设定的时间内进行抢答,抢答有效,显示器转而显示优先抢答的选手编号,同时亮灯提示。显示一直保持到主持人将系统清零为止。(6).如果设置的抢答时间
3、已到,无人抢答,则本次抢答无效,系统报警并禁止抢答,显示器上显示00。(7).每次抢答完成后主持人可手动使系统清零。2.3任务设计一款基于单片机控制的多路数字抢答器,并满足要求功能。2.4运行环境电子技术综合实验系统和电子通信与自动化创新实验系统。2.5开发工具16个人计算机;PROTEUS仿真软件、伟福软件等。3概要设计3.1系统流程图图3.13.2定时计数流程图16图3.23.3编号显示流程图16图3.33.4译码显示子程序loop:mova,p1;读取P1口数据cjnea,#0f0h,loop1;比较a与0f0h,相等执行下一条;否则,跳转至loop1
4、处sjmpstart;返回开始loop1:jbp3.6,loop2;判断P3.6口,P3.6口为0,执行下一条16;否则,跳转至LOOP2处clrp3.3;点亮LEDanla,#0fh;屏蔽高4位movdptr,#tab;建表movca,@a+dptr;查表loop12:movp2,a;将查表所得值赋给P2jbp3.5,stopjnbp3.1,start;时间过,停止jbp3.6,loop2sjmploop12…3.5延时子程序time:movr3,#14h;延时1秒lp1:movtmod,#01hmovth0,#3chmovtl0,#0b0hsetbtr0
5、lp2:jbctf0,loop1sjmplp2loop1:djnzr3,lp1;循环20次,即1秒ret;子程序返回…3.6外部中断0程序org0003hljmprest;外部中断的调用16setbex0;外部中断0开启setbit0setbea…4详细设计4.1设计思想多人抢答时,对其抢答者编号,根据显示的抢答编号确定抢答者。在有效时间内,抢答有效,有选手抢答时LED点亮,显示优先按下抢答器对应的编号,同时屏蔽其他抢答按钮。时间到,扬声器报警,同时关闭抢答器。无效时间内,若有选手无规按钮,LED一直亮以示提醒。4.2设计分析(1).多人对号抢答显示,用译码
6、器74LS147。mova,p1;读取P1口数据cjnea,#0f0h,loop1;比较a与0f0h,相等执行下一条;否则,跳转至loop1处anla,#0fh;屏蔽高4位(2).显示编号和定时计数时间采用查表:movdptr,#tab;建表movca,@a+dptr;查表tab:db3h,06h,5bh,4fh,;所建表db66h,6dh,7dh,07h,7fh(3).主持人开启键,采用外部中断法:setbex0;外部中断0开启16setbit0setbea4.3设计实现源程序(1).U1——80C51的功能是对抢答者编号显示,和控制整个抢答过程。其程序如
7、下:org0;程序执行开始地址ljmpstart;跳至start执行org0003hljmprest;外部中断的调用org0030hstart:movsp,#60h;建立堆栈movp2,#00h;关闭显示器stop1:jnbp3.5,stop;开启抢答器setbp3.0;关计时器setbp3.3;熄灭LEDsjmpstartstop:clrp3.0;开计时器setbex0;外部中断0开启setbit0setbeaclrp3.6;清零P3.6口jbp3.6,loop2;判断P3.6口,P3.6口为0,16执行下一条;否则,跳转至LOOP2处lcallloop;
8、调用子程序loopsjmpstart;返回开始loo