电子线路CAD课程设计论文-抢答器.docx

上传人:牧羊曲112 文档编号:2093155 上传时间:2023-01-09 格式:DOCX 页数:26 大小:1.73MB
返回 下载 相关 举报
电子线路CAD课程设计论文-抢答器.docx_第1页
第1页 / 共26页
电子线路CAD课程设计论文-抢答器.docx_第2页
第2页 / 共26页
电子线路CAD课程设计论文-抢答器.docx_第3页
第3页 / 共26页
电子线路CAD课程设计论文-抢答器.docx_第4页
第4页 / 共26页
电子线路CAD课程设计论文-抢答器.docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《电子线路CAD课程设计论文-抢答器.docx》由会员分享,可在线阅读,更多相关《电子线路CAD课程设计论文-抢答器.docx(26页珍藏版)》请在三一办公上搜索。

1、电子线路 CAD 课程设计论文抢答器(verilog+Ise)学号:U200713959院系:控制科学与工程系专业班级:自动化0707班姓名:王志伟一、 概述在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。通过抢答者的指示灯显示、数码显示和警示显示等手段指示出第一抢答者。 一般抢答器由单片机以及外围电路组成,分为八路十路等不同,八路和十路的差别是,抢答器背面的 接口有几组,和外形没有关系。二、 课题要求1. 设计一个可容纳6组参赛的数字式抢答器,每组设一个按钮,供抢答使用。2. 抢答器具有第一信号鉴别与锁存功能,除第一个抢答者外,其余不起作用。3. 设置一个主持人“

2、复位”按钮。4. 主持人复位后,开始抢答,第一信号鉴别与锁存电路得到信号后,有指示器显示抢答组别,扬声器发出23秒的音响。5. 设置一个记分电路,每组开始预置100 分,由主持人记分,答对一次加10分,答错一次减10分。6. 其它创新功能。三、 测试工具平台编写语言:Verilog编译调试工具:Xilinx ISE 9.2i运行板子:Xilinx Basys_1.1四、 实现功能a. 基本功能1. 抢答器可以容纳6组参赛的数字式抢答器,每组都设置由一个抢答按钮,供参赛者抢答。2. 抢答器具有第一信号鉴别与锁存功能,除第一个抢答者外,其余不起作用。3. 设置一个主持人“复位”按钮,每次抢答之后按

3、此按钮之后才能进行下一轮抢答。4. 主持人复位后,开始抢答,第一信号鉴别与锁存电路得到信号后,有指示器显示抢答组别,扬声器发出23秒的音响。5. 设置一个记分电路,由主持人记分,答对一次加1分,答错一次减1分。b. 创新功能1 初始分数可以在每次抢答比赛开始前进行设置,由于考虑到现实的方便性,设置范围为1至9分2 当某位参赛人员的积分减少至为0分时,则该人员被彻底淘汰,在下一轮抢答中抢答按钮无效。3 在每次才赛人员抢答完之后,由主持人或相关人员通过两个按钮来判断答题是否正确,以确定其加分还是减分,程序会检测该按钮并且不允许进行第二次被按下,以免造成分数的计数错误。4 当时间到最后3秒是会发出滴

4、滴滴的提示音,在参赛人员按下抢答按钮也会发出长1s的提示音。5 程序设置了一个抢答器的倒计时,每轮抢答为10s倒计时,并且时间倒计为0之后发出提示音,强大之后,时间重新复位,便于下一轮计时。6 在支持人判断抢答者答题正误之前或之后,可以通过两个按钮切换当前状态,从而可以查看所有选手的积分。7 使用的状态机思想,设置了8种状态:状态意义数码管显示0设置初始分数当前状态和设置的初试分数16当前抢答过程被相应编号的选手抢答到当前状态和该选手的目前分数7正在抢答中数码管显示当前状态和正在倒计的时间五、 设计思路a. 总体电路1 Display原理图2 总原理图该电路是在Ise中将所写的各个模块用导线连

5、接之后的效果,从这个图可以很清晰的看到程序的结构和思路。b. 详细设计在对问题进行分析之后将该程序分成一下模块,如表所示:模块名作用和意义Restart抢答器的重新开始信号的输入,用以改变当前的状态至0,在该模式下进行初始分数设置,即进行新一轮抢答。Mode_latch_change每当强大之后,所存当前状态,并在此基础上通过按键调整状态,然后通过display模块显示,由此可以查看各个选手的当前积分。Set_score在0状态时,利用两个按钮设置初始分数,提供加数设置和减数设置。Time_count每次支持人按下reset按钮进行新一轮抢答时,该模块立即启动,开始倒计时10s,并通过disp

6、lay显示,同时发出时间到最后3s和时间完的信号,以便控制提示音。Score_count主持人通过两个按键对抢答者回答对错进行判断,同时改变其积分。Display将需要数码管输出显示的信号输入,通过当前状态来判断输出那路信号。BcdToSeg将display模块中被选择的4位bcd码转化成数码管相应的8位信号Seg_driver数码管的选通信号,利用时钟循环扫描。Sound_alarm将Time_count中的信号输入,和1000hz信号取并,得到输出到喇叭,得到相应的提示音。Control控制模块,采集6位选手的按键情况,由此得到当前的状态,作为其他模块的状态参照,同时发出相应的一些控制信号

7、。六、 模块仿真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_

8、clk两个按钮设置mode_out,由此输入到display,从而显示各个选手的分数信息。模块中提供1024hz的时钟对up_clk和down_clk扫描,一旦有脉冲,则在下降沿做相应动作,可以消除按键的抖动影响。3. Set_score模块仿真波形如下:分析:可以看出该模块在start=0是工作,通过1024hz时钟对两个按键扫描,对初始分数进行加计数和减计数,即一个09的计数器,同时消除按键抖动的影响。4. Time_count模块仿真波形如下:分析:可以看出该模块在start=1是正常工作,当flag_pressed信号为0时,时间从9s开始倒计时,当有选手抢答,flag_pressed

9、有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,表示该选手已被淘汰,

10、下一轮抢答将没有资格抢答,相应的按键也将无效。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钟的1

11、024hz信号,驱动喇叭得到提示音。8. Control模块仿真波形如下:分析:该模块在start=1时正常工作,当相应的key按键按下时,mode变成相应选手的编号状态,并且flag_pressed变成1,此时sound_en被置为1,驱动喇叭得到1s的1khz的提示音。并且只有当支持人按下reset键之后才恢复至0,;当time_out信号为1时,表示时间倒计至0,此时sound_en被置为1,驱动喇叭得到提示音。七、 实验感想1. 通过这次课程设计,加强了我们动手、思考和解决问题的能力。在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不

12、了,因此耗费在这上面的时间用去很多。2. 做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。3. 平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。比如一些芯片的功能,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个元件映象深刻。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个课程设计对我的作用是非常大的。4. 通过这次课程设计使我懂得了

13、理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。5. 此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。最后衷心感谢老师的悉心授课和同学门的热心帮助!八、 源代码1 restart.vmodule restart(cp1024hz,start_clk,started);/started=0设置初始分数,started=1开始工作input cp10

14、24hz,start_clk;output started;reg started;reg1:0 init_temp=0;reg start_clk1;always (posedge cp1024hz)beginstart_clk1=start_clk;endwire start_clk2;assign start_clk2=start_clk1&(start_clk);/变换start_clk信号,防止抖动以及便于cp1024hz扫描always (posedge cp1024hz)/start正常工作抢?_clk started翻转,为0时设置分数,为1时beginif(init_temp

15、=2)beginstarted=0;init_temp=init_temp+1;endelse if(init_temp=3)begininit_temp=init_temp;if(start_clk2)beginstarted=started;endendelsebegininit_temp=init_temp+1;endendendmodule2 mode_latch_change.vmodule mode_latch_change(cp1024hz,started,flag_pressed,latch_clk,up_clk,down_clk,mode_in,mode_out);input

16、 cp1024hz,started,flag_pressed;/时钟信号,抢答开始信号,抢答中已经有按下键信号input latch_clk;/锁存mode的脉冲信号input up_clk,down_clk;/设置mode的两个按键,上调键和下调键input3:0mode_in;/从control的mode输出引进output mode_out;/抢答按键之后由modein变modeoutreg3:0 mode_out;reg up_clk1,down_clk1,latch_clk1;always (posedge cp1024hz)begin up_clk1=up_clk; down_cl

17、k1=down_clk; latch_clk1=latch_clk;endwire up_clk2,down_clk2,latch_clk2;/对输入的信号?变化?阌赾p1024hz的脉冲捕获,并且可以防止设置mode的两个按键的抖动assign up_clk2=up_clk1&(up_clk);assign down_clk2=down_clk1&(down_clk);assign latch_clk2=latch_clk1&(latch_clk);always (posedge cp1024hz)beginif(!started)/started=0,设置分数模式,mode_out=mod

18、e_in=0;beginmode_out=0;endelse/正常抢答过程beginif(!flag_pressed)/抢答模式beginmode_out=mode_in;endelse if(latch_clk2)/锁存模式beginmode_out=6)beginmode_out=0;endelsebeginmode_out=mode_out+1;endendelse if(flag_pressed & down_clk2)/查看各个分数,mode减计数beginif(mode_out=0)beginmode_out=6;endelsebeginmode_out=mode_out-1;en

19、dendelsebegin/mode_out=mode_in;endendendendmodule3 set_score.vmodule set_score(cp1024hz,started,set_up,set_down,setted_score);/抢答前设置玩家分数yesinput cp1024hz,started,set_up,set_down;output setted_score;reg 3:0setted_score;reg cp_up,cp_down;always (posedge cp1024hz)begin cp_up =set_up; cp_down =set_down;

20、endwire cp_up_pos,cp_down_pos;assign cp_up_pos=cp_up&(set_up);assign cp_down_pos=cp_down&(set_down) ;/设置分数的计数cp,并防止抖动always (posedge cp1024hz) /设置初始分数beginif(started=1)beginsetted_score3:0=0;endelse /当stared=0,为设置初始分数的模式,开?忌柚梅质?beginif(cp_up_pos&(!cp_down_pos) /设置?数加计数设置beginif(setted_score3:0=9)beg

21、insetted_score3:0=0;endelsebeginsetted_score3:0=setted_score3:0+1;endendelse if(!cp_up_pos)&cp_down_pos) /设置分数减计数设置beginif(setted_score3:0=0)beginsetted_score3:0=9;endelsebeginsetted_score3:0=setted_score3:0-1;endendendendendmodule4 time_count.vmodule time_count(cp1024hz,started,reset,flag_pressed,t

22、ime_left,time_less_alarm,time_out);/yesdinput cp1024hz,started,reset,flag_pressed;output time_left;output time_less_alarm;/倒计时到3s之后发出提醒信号output time_out;/倒计时完了之后发出信号reg 3:0 time_left;reg time_less_alarm;reg time_out;reg9:0 temp_count;always (posedge cp1024hz)beginif(!started)begintime_left=0;endelse

23、 beginif(reset)begintime_left=9;time_less_alarm=0;time_out=0;temp_count=0;endelsebeginif(time_left=3)/当倒计时剩3s时?崾臼?剩余不多begintime_less_alarm=1;endif(time_left=0)/当倒计时完了后,发出信号begintime_out=1;endif(flag_pressed)/已抢答,则终止倒计时,并置为初值begintime_left=9;endelse/还未抢答,进行倒计时beginif(temp_count=1023)begintemp_count1)

24、begintime_left=time_left-1;if(time_left=4)begintime_less_alarm=1;endendelsebegintime_out=1;time_left=0;endendelsebegintemp_count=temp_count+1;endendendendendendmodule5 sound_alarm.vmodule sound_alarm(reset,sound_en,cp1024hz,time_less_alarm,alarm);/提示声,包括时间少于3秒后的读秒提示声,抢答按键按下提示声以及时间完了的提示声input reset,s

25、ound_en,cp1024hz;/重新开始新的抢答信号,发声信号,时钟input time_less_alarm;/时间少于3s时的信号output alarm;/所有的提示声信号叠加,作为喇叭的驱动信号reg 9:0 temp_count=0;reg temp;/reg alarm_time;always (posedge cp1024hz)/(包括倒计时完,已抢答两种情况的声音提示)beginif(reset)/对中间变量进行初始化begintemp=1;temp_count=0;endif(sound_en=1)beginif(temp_count=1023)/sound_en=1时,

26、响1s钟提示begintemp=0;endelse begintemp_count=temp_count+1;endendendwire alarm_time;assign alarm_time=temp & sound_en;reg9:0 temp1;reg time_left_alarm;always (posedge cp1024hz)/时间到三秒之后时提示声响0.5sbeginif(reset)/对中间变量进行初始化begintemp1=1;time_left_alarm=0;endelsebeginif(time_less_alarm=0)begintemp1=0;time_left

27、_alarm=0;endelsebegin/时间少于3s时 提示if(temp1=512)begintemp1=temp1+1;time_left_alarm=1;endelsebegintime_left_alarm=0;endendendendassign alarm=(time_left_alarm|alarm_time)&cp1024hz;endmodule6 control.vmodule control(cp1024hz,started,reset,k1,k2,k3,k4,k5,k6,zero1,zero2,zero3,zero4,zero5,zero6,time_out,mode

28、,flag_pressed,sound_en,latch_en);/yesdinput cp1024hz,started,reset;input k1,k2,k3,k4,k5,k6;/抢答的6个按键,由cp1024hz扫描是否有按键input zero1,zero2,zero3,zero4,zero5,zero6;/6个用?的分数是否为0,并将分数为0的淘汰input time_out;/倒计时已完output flag_pressed,sound_en,latch_en,mode;/是否已按键;声音控制;模式控制;输出模式reg flag_pressed,sound_en,latch_en;

29、reg3:0 mode;always (posedge cp1024hz)beginif(!started)/当started=0时,对系统进行初始化,同时将mode置0;beginmode=0;flag_pressed=1;/利用设置这个将k1k6屏蔽sound_en=0;latch_en=0;endelsebeginif(reset)/started=1已开始,reset=1新一轮抢答beginflag_pressed=0;sound_en=0;latch_en=0;mode=7; /mode置为抢答模式endelsebeginif(time_out)beginsound_en=1;/时间

30、完了之后,响声提示endelsebeginif(!flag_pressed & k1 & !zero1)/当started=1时,按下key1beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=1;endelse if(started & !flag_pressed & k2 & !zero2)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=2;endelse if(!flag_pressed & k3 & !zero3)beginflag_pressed=1

31、;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=3;endelse if(!flag_pressed & k4 & !zero4)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=4;endelse if(!flag_pressed & k5 & !zero5)beginflag_pressed=1;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=5;endelse if(!flag_pressed & k6 & !zero6)beginflag_pressed=1

32、;sound_en=1;latch_en=1;/按键之后,产生相应电平mode=6;endendendendendendmodule7 score_count.vmodule score_count(cp1024hz,started,reset,mode,time_out,right_key,wrong_key,setted_score,score1,score2,score3,score4,score5,score6,zero1,zero2,zero3,zero4,zero5,zero6);/yesdinput cp1024hz,started,reset;input time_out;/时

33、间完了之后却没有是抢答input right_key,wrong_key;/每次抢答之后主持人用于判断抢答者回答是否正确,从而设置分数input3:0 mode;/从control的mode输出引进input3:0 setted_score;/mode=0时设置的厨师分数output score1,score2,score3,score4,score5,score6;/各玩家分数output zero1,zero2,zero3,zero4,zero5,zero6;/玩家分数是否为0reg zero1,zero2,zero3,zero4,zero5,zero6;reg 3:0score1,sco

34、re2,score3,score4,score5,score6;reg right1,wrong1;always (posedge cp1024hz)beginright1=right_key;wrong1=wrong_key;endwire right2,wrong2;/将判断回答对错的信号变换,消除抖动以及便于扫描识别assign right2=right1&(right_key);assign wrong2=wrong1&(wrong_key);reg temp_flag;/用于消除多次判断回答对错,防止扣分错误always (posedge cp1024hz)beginif(!star

35、ted)/设置分数时,对各个玩家分数初始化beginscore1=setted_score;score2=setted_score;score3=setted_score;score4=setted_score;score5=setted_score;score6=setted_score;zero1=0;zero2=0;zero3=0;zero4=0;zero5=0;zero6=0;temp_flag=0;endelse/started=1,正常工作模式beginif(reset)/reset之后初始化参数begintemp_flag=0;endelse/进行回答判断beginif(!tim

36、e_out & !temp_flag & wrong2)/回答错误,减1分begintemp_flag=1;/标志位置1,防止判断回答正误的按键多次被按以及抖动case(mode)4b0001 : /如果抢答为玩家1beginif(score13:0=1)beginscore13:0=0;zero1=1;/玩家1的分数减少到0,淘汰endelsebeginscore13:0=score13:0-1;endend4b0010 : /如果抢答为玩家2beginif(score23:0=1)beginscore23:0=0;zero2=1;/玩家1的分数减少到0,淘汰endelsebeginscor

37、e23:0=score23:0-1;endend4b0011 : /如果抢答为玩家3beginif(score33:0=1)beginscore33:0=0;zero3=1;/玩家1的分数减少到0,淘汰endelsebeginscore33:0=score33:0-1;endend4b0100 : /如果抢答为?家4beginif(score43:0=1)beginscore43:0=0;zero4=1;/玩家1的分数减少到0,淘汰endelsebeginscore43:0=score43:0-1;endend4b0101 : /如果抢答为玩家5beginif(score53:0=1)begi

38、nscore53:0=0;zero5=1;/玩家1的分数减少到0,淘汰endelsebeginscore53:0=score53:0-1;endend4b0110 : /如果抢答为玩家6beginif(score63:0=1)beginscore63:0=0;zero6=1;/玩家1的分数减少到0,淘汰endelsebeginscore63:0=score63:0-1;endenddefault : ;endcaseendif(!time_out & !temp_flag & right2)/回答正确,相应加1分begintemp_flag=1;/和前述意义一样case(mode)4b0001 : /玩家1beginif(score13:0=9)beginscore13:0=9;endelsebeginscore13:0=score13:0+1;endend4b0010 : /玩家2beginif(score23:0=9)beginscore23:0=9;endelsebeginscore23:0=score23:0+1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号