电子线路CAD课程设计 抢答器Word文档格式.docx

上传人:b****6 文档编号:21733562 上传时间:2023-02-01 格式:DOCX 页数:33 大小:1.73MB
下载 相关 举报
电子线路CAD课程设计 抢答器Word文档格式.docx_第1页
第1页 / 共33页
电子线路CAD课程设计 抢答器Word文档格式.docx_第2页
第2页 / 共33页
电子线路CAD课程设计 抢答器Word文档格式.docx_第3页
第3页 / 共33页
电子线路CAD课程设计 抢答器Word文档格式.docx_第4页
第4页 / 共33页
电子线路CAD课程设计 抢答器Word文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

电子线路CAD课程设计 抢答器Word文档格式.docx

《电子线路CAD课程设计 抢答器Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子线路CAD课程设计 抢答器Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

电子线路CAD课程设计 抢答器Word文档格式.docx

状态

意义

数码管显示

设置初始分数

当前状态和设置的初试分数

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时

if(init_temp==2)

begin

started<

=0;

init_temp<

=init_temp+1;

end

elseif(init_temp==3)

=init_temp;

if(start_clk2)

begin

started<

=~started;

end

else

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;

up_clk1<

=up_clk;

down_clk1<

=down_clk;

latch_clk1<

=latch_clk;

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);

if(!

started)//started=0,设置分数模式,mode_out=mode_in=0;

mode_out<

else//正常抢答过程

if(!

flag_pressed)//抢答模式

mode_out<

=mode_in;

elseif(latch_clk2)//锁存模式

elseif(flag_pressed&

&

up_clk2)//查看各个分数,mode加计数

if(mode_out>

=6)

begin

mode_out<

end

else

=mode_out+1;

end

down_clk2)//查看各个分数,mode减计数

if(mode_out<

=0)

=6;

=mode_out-1;

else

//mode_out<

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;

cp_up<

=set_up;

cp_down<

=set_down;

wirecp_up_pos,cp_down_pos;

assigncp_up_pos=cp_up&

(~set_up);

assigncp_down_pos=cp_down&

(~set_down);

//设置分数的计数cp,并防止抖动

always@(posedgecp1024hz)//设置初始分数

if(started==1)

setted_score[3:

0]<

else//当stared=0,为设置初始分数的模式,开?

忌柚梅质?

if(cp_up_pos&

(!

cp_down_pos))//设置?

数加计数设置

if(setted_score[3:

0]==9)

setted_score[3:

=setted_score[3:

0]+1;

elseif((!

cp_up_pos)&

cp_down_pos)//设置分数减计数设置

0]==0)

=9;

0]-1;

end

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;

//倒计时完了之后发出信号

0]time_left;

regtime_less_alarm;

regtime_out;

reg[9:

0]temp_count;

started)

time_left<

else

if(reset)

time_left<

time_less_alarm<

time_out<

temp_count<

if(time_left==3)//当倒计时剩3s时?

崾臼?

剩余不多

time_less_alarm<

=1;

if(time_left==0)//当倒计时完了后,发出信号

time_out<

if(flag_pressed)//已抢答,则终止倒计时,并置为初值

time_left<

else//还未抢答,进行倒计时

if(temp_count==1023)

begin

temp_count<

if(time_left>

1)

begin

time_left<

=time_left-1;

if(time_left==4)

begin

time_less_alarm<

end

end

else

time_out<

end

else

=temp_count+1;

end

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)//(包括倒计时完,已抢答两种情况的声音提示)

if(reset)//对中间变量进行初始化

temp<

temp_count<

if(sound_en==1)

if(temp_count==1023)//sound_en==1时,响1s钟提示

temp<

else

wirealarm_time;

assignalarm_time=temp&

sound_en;

0]temp1;

regtime_left_alarm;

always@(posedgecp1024hz)//时间到三秒之后时提示声响0.5s

if(reset)//对中间变量进行初始化

temp1<

time_left_alarm<

if(time_less_alarm==0)

temp1<

time_left_alarm<

begin//时间少于3s时提示

if(temp1<

=512)

temp1<

=temp1+1;

time_left_alarm<

assignalarm=(time_left_alarm|alarm_time)&

cp1024hz;

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);

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

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1