EDA课程设计报告数字秒表设计文档格式.docx
《EDA课程设计报告数字秒表设计文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告数字秒表设计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
g.按键三个
h.220欧电阻10个
i.1k电阻四个7个
j.导线两根
2.4工作原理
将晶振分频,产生时钟信号,每次0.05秒,则每隔0.1秒产生时钟进位,将产生的信号通过数码管进行译码显示,进行动态扫描。
根据几个按键按下与否判断是否暂停,倒计时,秒表显示。
整个电路有芯片程序控制,外围按键间接控制,数码显示,下载链接部分组成。
三.设计程序
3.1系统组成框图
系统组成框图如图
(二)所示:
3.2程序流程图
程序流程图如图(三)所示:
N
图(三)
3.3设计程序及主要部分说明
设计程序如附
(一)所示:
3.4管脚分配
管脚分配如表
(一)所示:
表
(一)
3.5部分仿真图形
部分仿真图如图(四)所示:
图(四)
四.总结及心得
1.总结
通过这次课程设计让我对EDA这门课有了更深刻的了解,对电路板的焊接有了一定的经验。
但是在制作的过程中困难重重现总结如下:
1.电路板部分管脚较为密集复杂,比较难以准确焊接,由于细心不够,我组曾经将芯片座的两根导线误短路,造成下载不成功,后经万用表仔细排查,找出原因,最终问题得以解决;
2.在程序编写时,先要在心中规划一个大概流程,然后编写,经过与其他同学多次合作修改最终编译而成,在如何编写程序方面收获颇多;
2.心得体会
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
这次EDA课程设计,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当程序编写调试成功时,心里特别的开心。
但在编写时,有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的数字秒表还是比较成功的,在设计中遇到了很多问题,最后在同学的帮助下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
最后,对给过我帮助的所有同学再次表示忠心的感谢!
附
(一):
设计程序及主要部分说明:
modulemiao_clock(clk,key,dig,seg);
//模块名miao—clock
inputclk;
//输入时钟
input[2:
0]key;
//输入按键
output[3:
0]dig;
//数码管选择输出引脚
output[7:
0]seg;
//数码管段输出引脚
reg[7:
0]seg_r;
//定义数码管输出寄存器
reg[3:
0]dig_r;
//定义数码管选择输出寄存器
0]disp_dat;
//定义显示数据寄存器
reg[17:
0]count;
//定义计数寄存器
reg[11:
0]hour;
//定义现在时刻寄存器
regsec,keyen1,keyen2;
//定义标志位
reg[2:
0]dout1,dout2,dout3;
//寄存器
wire[2:
0]key_done;
//按键消抖输出
assigndig=dig_r;
//输出数码管选择
assignseg=seg_r;
//输出数码管译码结果
//秒信号产生部分
always@(posedgeclk)//定义clock上升沿触发
begin
count=count+1'
b1;
if(count==18'
d600000)//0.05S到了吗?
begin
count=18'
d0;
//计数器清零
sec=~sec;
//置位秒标志
end
end
//按键消抖处理部分
assignkey_done=(dout1|dout2|dout3);
//按键消抖输出
always@(posedgecount[10])
dout1<
=key;
dout2<
=dout1;
dout3<
=dout2;
always@(negedgekey_done[1])
keyen1=~keyen1;
//将琴键开关转换为乒乓开关
always@(negedgekey_done[2])
keyen2=~keyen2;
//数码管动态扫描显示部分
always@(posedgeclk)//count[14:
13]大约1ms改变一次
case(count[14:
13])//选择扫描显示数据
2'
d0:
disp_dat=hour[3:
0];
//0.1秒显示位
d1:
disp_dat=4'
ha;
//-
d2:
disp_dat=hour[7:
4];
//秒个位显示位
d3:
disp_dat=hour[11:
8];
//秒十位显示位
endcase
13])//选择数码管显示位
dig_r=8'
b1110;
//选择第一个数码管显示
b1101;
//选择第二个数码管显示
b1011;
//选择第三个数码管显示
b0111;
//选择第四个数码管显示
always@(posedgeclk)
case(disp_dat)
4'
h0:
seg_r=8'
hc0;
//显示0
h1:
hf9;
//显示1
h2:
ha4;
//显示2
h3:
hb0;
//显示3
h4:
h99;
//显示4
h5:
h92;
//显示5
h6:
h82;
//显示6
h7:
hf8;
//显示7
h8:
h80;
//显示8
h9:
h90;
//显示9
ha:
hbf;
//显示-
default:
hff;
//不显示
//if((count[17:
15]==3'
d1)&
sec)
//seg_r=8'
//计时处理部分
always@(negedgesecornegedgekey_done[0])//计时处理
if(!
key_done[0])//是清零键吗?
hour=12'
h000;
//是,则清零
elseif(!
keyen1)
if(!
keyen2)
begin
hour[3:
0]=hour[3:
0]+1'
//0.1秒加一
if(hour[3:
0]==4'
ha)
begin
hour[3:
0]=4'
hf;
hour[7:
4]=hour[7:
4]+1'
//秒的个位加一
if(hour[7:
4]==4'
begin
hour[7:
4]=4'
hour[11:
8]=hour[11:
8]+1'
//秒的十位加一
if(hour[11:
8]==4'
begin
hour[11:
0]=12'
hfff;
end
end
end
end
else
0]-1'
//0.1秒减一
if(hour[3:
hf)
begin
hour[3:
h9;
hour[7:
4]-1'
if(hour[7:
begin
hour[7:
hour[11:
8]-1'
//秒十位加一
begin
hour[11:
h999;
end
end
end
end
endmodule