电子线路CAD课程设计 抢答器.docx
- 文档编号:8597346
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:33
- 大小:1.73MB
电子线路CAD课程设计 抢答器.docx
《电子线路CAD课程设计 抢答器.docx》由会员分享,可在线阅读,更多相关《电子线路CAD课程设计 抢答器.docx(33页珍藏版)》请在冰豆网上搜索。
电子线路CAD课程设计抢答器
电子线路CAD课程设计论文
抢答器(verilog+Ise)
一、概述
在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。
通过抢答者的指示灯显示、数码显示和警示显示等手段指示出第一抢答者。
一般抢答器由单片机以及外围电路组成,分为八路十路等不同,八路和十路的差别是,抢答器背面的接口有几组,和外形没有关系。
二、课题要求
1.设计一个可容纳6组参赛的数字式抢答器,每组设一个按钮,供抢答使用。
2.抢答器具有第一信号鉴别与锁存功能,除第一个抢答者外,其余不起作用。
3.设置一个主持人“复位”按钮。
4.主持人复位后,开始抢答,第一信号鉴别与锁存电路得到信号后,有指示器显示抢答组别,扬声器发出2~3秒的音响。
5.设置一个记分电路,每组开始预置100分,由主持人记分,答对一次加10分,答错一次减10分。
6.其它创新功能。
三、测试工具平台
编写语言:
Verilog
编译调试工具:
XilinxISE9.2i
运行板子:
XilinxBasys_1.1
四、实现功能
a.基本功能
1.抢答器可以容纳6组参赛的数字式抢答器,每组都设置由一个抢答按钮,供参赛者抢答。
2.抢答器具有第一信号鉴别与锁存功能,除第一个抢答者外,其余不起作用。
3.设置一个主持人“复位”按钮,每次抢答之后按此按钮之后才能进行下一轮抢答。
4.主持人复位后,开始抢答,第一信号鉴别与锁存电路得到信号后,有指示器显示抢答组别,扬声器发出2~3秒的音响。
5.设置一个记分电路,由主持人记分,答对一次加1分,答错一次减1分。
b.创新功能
1.初始分数可以在每次抢答比赛开始前进行设置,由于考虑到现实的方便性,设置范围为1至9分
2.当某位参赛人员的积分减少至为0分时,则该人员被彻底淘汰,在下一轮抢答中抢答按钮无效。
3.在每次才赛人员抢答完之后,由主持人或相关人员通过两个按钮来判断答题是否正确,以确定其加分还是减分,程序会检测该按钮并且不允许进行第二次被按下,以免造成分数的计数错误。
4.当时间到最后3秒是会发出滴滴滴的提示音,在参赛人员按下抢答按钮也会发出长1s的提示音。
5.程序设置了一个抢答器的倒计时,每轮抢答为10s倒计时,并且时间倒计为0之后发出提示音,强大之后,时间重新复位,便于下一轮计时。
6.在支持人判断抢答者答题正误之前或之后,可以通过两个按钮切换当前状态,从而可以查看所有选手的积分。
7.使用的状态机思想,设置了8种状态:
状态
意义
数码管显示
0
设置初始分数
当前状态和设置的初试分数
1~6
当前抢答过程被相应编号的选手抢答到
当前状态和该选手的目前分数
7
正在抢答中
数码管显示当前状态和正在倒计的时间
五、设计思路
a.总体电路
1.Display原理图
2.总原理图
该电路是在Ise中将所写的各个模块用导线连接之后的效果,从这个图可以很清晰的看到程序的结构和思路。
b.详细设计
在对问题进行分析之后将该程序分成一下模块,如表所示:
模块名
作用和意义
Restart
抢答器的重新开始信号的输入,用以改变当前的状态至0,在该模式下进行初始分数设置,即进行新一轮抢答。
Mode_latch_change
每当强大之后,所存当前状态,并在此基础上通过按键调整状态,然后通过display模块显示,由此可以查看各个选手的当前积分。
Set_score
在0状态时,利用两个按钮设置初始分数,提供加数设置和减数设置。
Time_count
每次支持人按下reset按钮进行新一轮抢答时,该模块立即启动,开始倒计时10s,并通过display显示,同时发出时间到最后3s和时间完的信号,以便控制提示音。
Score_count
主持人通过两个按键对抢答者回答对错进行判断,同时改变其积分。
Display
将需要数码管输出显示的信号输入,通过当前状态来判断输出那路信号。
BcdToSeg
将display模块中被选择的4位bcd码转化成数码管相应的8位信号
Seg_driver
数码管的选通信号,利用时钟循环扫描。
Sound_alarm
将Time_count中的信号输入,和1000hz信号取并,得到输出到喇叭,得到相应的提示音。
Control
控制模块,采集6位选手的按键情况,由此得到当前的状态,作为其他模块的状态参照,同时发出相应的一些控制信号。
六、模块仿真
1.restart模块仿真
波形如下:
分析:
可以看到,cp1024hz的时钟每个上升沿检测start_clk信号下降沿,并且在其每个下降沿对start信号翻转,而抢答器在start=0是表示设置初始分数,start=1是表示抢答正常进行,所以利用start_clk可以控制抢答器重新开始。
2.Mode_latch_change模块仿真
波形如下:
分析:
可以看出,该模块在start=1是开始工作,当flag_pressed(表示选手抢答)信号置为1时,模块锁存当前的状态mode_in,即相应的强大选手的编号,在flag_pressed=1的过程中,可以通过按up_clk和down_clk两个按钮设置mode_out,由此输入到display,从而显示各个选手的分数信息。
模块中提供1024hz的时钟对up_clk和down_clk扫描,一旦有脉冲,则在下降沿做相应动作,可以消除按键的抖动影响。
3.Set_score模块仿真
波形如下:
分析:
可以看出该模块在start=0是工作,通过1024hz时钟对两个按键扫描,对初始分数进行加计数和减计数,即一个0~9的计数器,同时消除按键抖动的影响。
4.Time_count模块仿真
波形如下:
分析:
可以看出该模块在start=1是正常工作,当flag_pressed信号为0时,时间从9s开始倒计时,当有选手抢答,flag_pressed有0变为1时,时间停止计数,在支持人按下reset按键之后,计数值恢复为9s,并开始倒计数,当时间倒计至3时,time_less_alarm信号由0变成1,当时间倒计至0时,time_out信号由0变成1,这两个信号都送至sound_alarm并经过变换之后驱动喇叭得到提示音。
5.Score_count模块仿真
波形如下:
分析:
有图可以看出,该模块在start=1时正常工作,利用1024hz的时钟对right_key和wrong_key扫描,消除抖动之后,做相应的分数设置操作,给谁加减分通过当前的mode判断,并且当某选手分数减至0分时,该选手的一个标志位zero被置为1,表示该选手已被淘汰,下一轮抢答将没有资格抢答,相应的按键也将无效。
6.Display模块仿真
波形如下:
分析:
该模块在start=1时工作,用1024hz信号扫描mode变化,并以此作为依据输出相应的信号到数码管中显示,这种对应关系在前面的表格中已经详细说明,不再赘述。
7.Sound_alarm模块仿真
波形如下:
分析:
该模块在start=1时正常工作,输入有sound_en信号time_less_alarm,sound_en=1表示有选手抢答或者时间倒计至0,此时alarm输出1s钟的1024hz信号,驱动喇叭得到提示音;time_less_alarm=1信号表示时间只剩下3s,此时alarm输出0.5s钟的1024hz信号,驱动喇叭得到提示音。
8.Control模块仿真
波形如下:
分析:
该模块在start=1时正常工作,当相应的key按键按下时,mode变成相应选手的编号状态,并且flag_pressed变成1,此时sound_en被置为1,驱动喇叭得到1s的1khz的提示音。
并且只有当支持人按下reset键之后才恢复至0,;当time_out信号为1时,表示时间倒计至0,此时sound_en被置为1,驱动喇叭得到提示音。
七、实验感想
1.通过这次课程设计,加强了我们动手、思考和解决问题的能力。
在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,因此耗费在这上面的时间用去很多。
2.做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。
3.平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。
而且还可以记住很多东西。
比如一些芯片的功能,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个元件映象深刻。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
所以这个课程设计对我的作用是非常大的。
4.通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
5.此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。
最后衷心感谢老师的悉心授课和同学门的热心帮助!
八、源代码
1.restart.v
modulerestart(cp1024hz,start_clk,started);//started==0设置初始分数,started==1开始工作
inputcp1024hz,start_clk;
outputstarted;
regstarted;
reg[1:
0]init_temp=0;
regstart_clk1;
always@(posedgecp1024hz)
begin
start_clk1<=start_clk;
end
wirestart_clk2;
assignstart_clk2=start_clk1&(~start_clk);//变换start_clk信号,防止抖动以及便于cp1024hz扫描
always@(posedgecp1024hz)//start正常工作抢?
?
_clkstarted翻转,为0时设置分数,为1时
begin
if(init_temp==2)
begin
started<=0;
init_temp<=init_temp+1;
end
elseif(init_temp==3)
begin
init_temp<=init_temp;
if(start_clk2)
begin
started<=~started;
end
end
else
begin
init_temp<=init_temp+1;
end
end
endmodule
2.mode_latch_change.v
modulemode_latch_change(cp1024hz,started,flag_pressed,latch_clk,up_clk,down_clk,mode_in,mode_out);
inputcp1024hz,started,flag_pressed;//时钟信号,抢答开始信号,抢答中已经有按下键信号
inputlatch_clk;//锁存mode的脉冲信号
inputup_clk,down_clk;//设置mode的两个按键,上调键和下调键
input[3:
0]mode_in;//从control的mode输出引进
outputmode_out;//抢答按键之后由modein变modeout
reg[3:
0]mode_out;
regup_clk1,down_clk1,latch_clk1;
always@(posedgecp1024hz)
begin
up_clk1<=up_clk;
down_clk1<=down_clk;
latch_clk1<=latch_clk;
end
wireup_clk2,down_clk2,latch_clk2;//对输入的信号?
?
变化?
?
?
阌赾p1024hz的脉冲捕获,并且可以防止设置mode的两个按键的抖动
assignup_clk2=up_clk1&(~up_clk);
assigndown_clk2=down_clk1&(~down_clk);
assignlatch_clk2=latch_clk1&(~latch_clk);
always@(posedgecp1024hz)
begin
if(!
started)//started=0,设置分数模式,mode_out=mode_in=0;
begin
mode_out<=0;
end
else//正常抢答过程
begin
if(!
flag_pressed)//抢答模式
begin
mode_out<=mode_in;
end
elseif(latch_clk2)//锁存模式
begin
mode_out<=mode_in;
end
elseif(flag_pressed&&up_clk2)//查看各个分数,mode加计数
begin
if(mode_out>=6)
begin
mode_out<=0;
end
else
begin
mode_out<=mode_out+1;
end
end
elseif(flag_pressed&&down_clk2)//查看各个分数,mode减计数
begin
if(mode_out<=0)
begin
mode_out<=6;
end
else
begin
mode_out<=mode_out-1;
end
end
else
begin
//mode_out<=mode_in;
end
end
end
endmodule
3.set_score.v
moduleset_score(cp1024hz,started,set_up,set_down,setted_score);//抢答前设置玩家分数yes
inputcp1024hz,started,set_up,set_down;
outputsetted_score;
reg[3:
0]setted_score;
regcp_up,cp_down;
always@(posedgecp1024hz)
begin
cp_up<=set_up;
cp_down<=set_down;
end
wirecp_up_pos,cp_down_pos;
assigncp_up_pos=cp_up&(~set_up);
assigncp_down_pos=cp_down&(~set_down);//设置分数的计数cp,并防止抖动
always@(posedgecp1024hz)//设置初始分数
begin
if(started==1)
begin
setted_score[3:
0]<=0;
end
else//当stared=0,为设置初始分数的模式,开?
忌柚梅质?
begin
if(cp_up_pos&&(!
cp_down_pos))//设置?
?
数加计数设置
begin
if(setted_score[3:
0]==9)
begin
setted_score[3:
0]<=0;
end
else
begin
setted_score[3:
0]<=setted_score[3:
0]+1;
end
end
elseif((!
cp_up_pos)&&cp_down_pos)//设置分数减计数设置
begin
if(setted_score[3:
0]==0)
begin
setted_score[3:
0]<=9;
end
else
begin
setted_score[3:
0]<=setted_score[3:
0]-1;
end
end
end
end
endmodule
4.time_count.v
moduletime_count(cp1024hz,started,reset,flag_pressed,time_left,time_less_alarm,time_out);//yesd
inputcp1024hz,started,reset,flag_pressed;
outputtime_left;
outputtime_less_alarm;//倒计时到3s之后发出提醒信号
outputtime_out;//倒计时完了之后发出信号
reg[3:
0]time_left;
regtime_less_alarm;
regtime_out;
reg[9:
0]temp_count;
always@(posedgecp1024hz)
begin
if(!
started)
begin
time_left<=0;
end
else
begin
if(reset)
begin
time_left<=9;
time_less_alarm<=0;
time_out<=0;
temp_count<=0;
end
else
begin
if(time_left==3)//当倒计时剩3s时?
崾臼?
?
?
剩余不多
begin
time_less_alarm<=1;
end
if(time_left==0)//当倒计时完了后,发出信号
begin
time_out<=1;
end
if(flag_pressed)//已抢答,则终止倒计时,并置为初值
begin
time_left<=9;
end
else//还未抢答,进行倒计时
begin
if(temp_count==1023)
begin
temp_count<=0;
if(time_left>1)
begin
time_left<=time_left-1;
if(time_left==4)
begin
time_less_alarm<=1;
end
end
else
begin
time_out<=1;
time_left<=0;
end
end
else
begin
temp_count<=temp_count+1;
end
end
end
end
end
endmodule
5.sound_alarm.v
modulesound_alarm(reset,sound_en,cp1024hz,time_less_alarm,alarm);//提示声,包括时间少于3秒后的读秒提示声,抢答按键按下提示声以及时间完了的提示声
inputreset,sound_en,cp1024hz;//重新开始新的抢答信号,发声信号,时钟
inputtime_less_alarm;//时间少于3s时的信号
outputalarm;//所有的提示声信号叠加,作为喇叭的驱动信号
reg[9:
0]temp_count=0;
regtemp;
//regalarm_time;
always@(posedgecp1024hz)//(包括倒计时完,已抢答两种情况的声音提示)
begin
if(reset)//对中间变量进行初始化
begin
temp<=1;
temp_count<=0;
end
if(sound_en==1)
begin
if(temp_count==1023)//sound_en==1时,响1s钟提示
begin
temp<=0;
end
else
begin
temp_count<=temp_count+1;
end
end
end
wirealarm_time;
assignalarm_time=temp&sound_en;
reg[9:
0]temp1;
regtime_left_alarm;
always@(posedgecp1024hz)//时间到三秒之后时提示声响0.5s
begin
if(reset)//对中间变量进行初始化
begin
temp1<=1;
time_left_alarm<=0;
end
else
begin
if(time_less_alarm==0)
begin
temp1<=0;
time_left_alarm<=0;
end
else
begin//时间少于3s时提示
if(temp1<=512)
begin
temp1<=temp1+1;
time_left_alarm<=1;
end
else
begin
time_left_alarm<=0;
end
end
end
end
assignalarm=(time_left_alarm|alarm_time)&cp1024hz;
endmodule
6.control.v
modulecontrol(cp1024hz,started,reset,k1,k2,k3,k4,k5,k6,
zero1,zero2,zero3,zero4,zero5,zero6,time_out,
mode,flag_pressed,sound_en,latch_en);//yesd
inputcp1024hz,started,reset;
inputk1,k2,k3,k4,k5,k6;//抢答的6个按键,由cp1024hz扫描是否有按键
inputzero1,zero2,zero3,zero4,zero5,zero6;//6个用?
的分数是否为0,并将分数为0的淘汰
inputtime_out;//倒计时已完
outputflag_pressed,sound_en,latch_en,mode;//是否已按键;声音控制;模式控制;输出模式
regflag_pressed,sound_en,latch_en;
reg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子线路CAD课程设计 抢答器 电子线路 CAD 课程设计 抢答