数字时钟.docx

上传人:b****4 文档编号:4898181 上传时间:2022-12-11 格式:DOCX 页数:12 大小:98.29KB
下载 相关 举报
数字时钟.docx_第1页
第1页 / 共12页
数字时钟.docx_第2页
第2页 / 共12页
数字时钟.docx_第3页
第3页 / 共12页
数字时钟.docx_第4页
第4页 / 共12页
数字时钟.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数字时钟.docx

《数字时钟.docx》由会员分享,可在线阅读,更多相关《数字时钟.docx(12页珍藏版)》请在冰豆网上搜索。

数字时钟.docx

数字时钟

郑州航空工业管理学院

EDA技术及应用课程设计说明书

 

2013届电子信息系工程专业1313084班级

 

题目多功能数字时钟

学号1313084

姓名洪*

指导教师王**程*张*

 

二О一五年六月二十五日

一、

数字时钟基本原理

这个时钟由六部分组成:

整分报时部分,led点亮部分,秒信号产生部分、计时处理部分、按键消抖处理部分,定数码管动态扫描显示部分六部分。

一个时钟的准确与否主要取决秒脉冲的精确度。

为了保证计时准确我们对系统时钟48MHz进行了48000000分频,从而得到1Hz的秒脉冲。

至于显示部分与LED数码管原理相同。

二,实现功能

能实现时钟的基本功能,能实现计时,暂停,清零功能。

另外增加了led闪烁,整分钟报时功能。

三,数字时钟的硬件设计

图1数字时钟原理图

原理图是对实验程序的综合,是程序看起来更简洁明了,本实验的原理图有两个输入clk,key,四个输出beep,dig,seg,led。

按键为两位的,clk为一位的,beep为一位的,dig,seg,led都为七位。

通过原理图把各个部分连接起来使程序连接为一个整体。

图2芯片图

 

图三管脚分配图

 

图四数码管图

 

 

 

图五实验结果图

 

表1元器件表

序号

器件名称

参数

数量

1

 

电阻

1000欧姆

14

2

10千欧姆

10

3

50欧姆

1

4

500欧姆

8

5

数码管

4位共阴极

2

6

钟振

12MHz,4引脚

1

7

独石电容

0.1μF

6

8

电解电容

50V,10μF

1

9

按键

4引脚

4

10

三极管

NPN

9

11

电路板

——

1

12

双排插头

10针

1

13

电源接插线

含20cm电源线

1

14

发光二极管

3

15

发光二极管

绿

3

16

底座

——

1

17

CPLD

4引脚,PLCC封装

1

四,数字时钟的Verilog实现

moduleclock(clk,key,dig,seg,led,beep);//模块名clock

inputclk;//输入

regbeep;//寄存器

outputbeep;//输入时钟

reg[24:

0]count1;//寄存器

input[1:

0]key;//输入按键

output[7:

0]dig;//数码管选择输出引脚

output[7:

0]seg;//数码管段输出引脚

output[7:

0]led;

reg[7:

0]seg_r;//定义数码管输出寄存器

reg[7:

0]dig_r;//定义数码管选择输出寄存器

reg[3:

0]disp_dat;//定义显示数据寄存器

reg[24:

0]count;//定义计数寄存器

reg[23:

0]hour;//定义现在时刻寄存器

regsec,keyen;//定义标志位

reg[1:

0]dout1,dout2,dout3;

reg[7:

0]led;//寄存器

wire[1:

0]key_done;//按键消抖输出

assigndig=dig_r;//输出数码管选择

assignseg=seg_r;//输出数码管译码结果

//整分报时部分

always@(posedgeclk)

begin

if(hour[7:

4]==0&hour[3:

0]<=3)//判断是否秒的十位为0秒的个位小于3

begin

count1=count1+1;//分频部分产生方波

if(count1==240000)

begin

count1=0;

beep=~beep;//蜂鸣器发出声音

end

end

end

//led点亮部分

always

begin

if(hour[3:

0]==0|hour[3:

0]==2|hour[3:

0]==4|hour[3:

0]==6|hour[3:

0]==8)

led=8'b10101010;//当秒的个位为2,4,6,8时led2468点亮

elseled=8'b01010101;//否则led1357点亮

end

//秒信号产生部分

always@(posedgeclk)//定义clock上升沿触发

begin

count=count+1'b1;

if(count==25'd24000000)//0.5S到了吗?

begin

count=25'd0;//计数器清零

sec=~sec;//置位秒标志

end

end

//按键消抖处理部分

assignkey_done=(dout1|dout2|dout3);//按键消抖输出

always@(posedgecount[17])

begin

dout1<=key;

dout2<=dout1;

dout3<=dout2;

end

always@(negedgekey_done[0])

begin

keyen=~keyen;//将琴键开关转换为乒乓开关

end

//数码管动态扫描显示部分

always@(posedgeclk)//count[17:

15]大约1ms改变一次

begin

case(count[17:

15])//选择扫描显示数据

3'd0:

disp_dat=hour[3:

0];//秒个位

3'd1:

disp_dat=hour[7:

4];//秒十位

3'd2:

disp_dat=4'ha;//显示"-"

3'd3:

disp_dat=hour[11:

8];//分个位

3'd4:

disp_dat=hour[15:

12];//分十位

3'd5:

disp_dat=4'ha;//显示"-"

3'd6:

disp_dat=hour[19:

16];//时个位

3'd7:

disp_dat=hour[23:

20];//时十位

endcase

case(count[17:

15])//选择数码管显示位

3'd0:

dig_r=8'b11111110;//选择第一个数码管显示

3'd1:

dig_r=8'b11111101;//选择第二个数码管显示

3'd2:

dig_r=8'b11111011;//选择第三个数码管显示

3'd3:

dig_r=8'b11110111;//选择第四个数码管显示

3'd4:

dig_r=8'b11101111;//选择第五个数码管显示

3'd5:

dig_r=8'b11011111;//选择第六个数码管显示

3'd6:

dig_r=8'b10111111;//选择第七个数码管显示

3'd7:

dig_r=8'b01111111;//选择第八个数码管显示

endcase

end

always@(posedgeclk)

begin

case(disp_dat)

4'h0:

seg_r=8'hc0;//显示0

4'h1:

seg_r=8'hf9;//显示1

4'h2:

seg_r=8'ha4;//显示2

4'h3:

seg_r=8'hb0;//显示3

4'h4:

seg_r=8'h99;//显示4

4'h5:

seg_r=8'h92;//显示5

4'h6:

seg_r=8'h82;//显示6

4'h7:

seg_r=8'hf8;//显示7

4'h8:

seg_r=8'h80;//显示8

4'h9:

seg_r=8'h90;//显示9

4'ha:

seg_r=8'hbf;//显示-

default:

seg_r=8'hff;//不显示

endcase

if((count[17:

15]==3'd2)&sec)

seg_r=8'hff;

end

//计时处理部分

always@(negedgesecornegedgekey_done[1])//计时处理

begin

if(!

key_done[1])//是清零键吗?

begin

hour=24'h0;//是,则清零

end

elseif(!

keyen)

begin

hour[3:

0]=hour[3:

0]+1'b1;//秒加1

if(hour[3:

0]==4'ha)

begin

hour[3:

0]=4'h0;

hour[7:

4]=hour[7:

4]+1'b1;//秒的十位加一

if(hour[7:

4]==4'h6)

begin

hour[7:

4]=4'h0;

hour[11:

8]=hour[11:

8]+1'b1;//分个位加一

if(hour[11:

8]==4'ha)

begin

hour[11:

8]=4'h0;

hour[15:

12]=hour[15:

12]+1'b1;//分十位加一

if(hour[15:

12]==4'h6)

begin

hour[15:

12]=4'h0;

hour[19:

16]=hour[19:

16]+1'b1;//时个位加一

if(hour[19:

16]==4'ha)

begin

hour[19:

16]=4'h0;

hour[23:

20]=hour[23:

20]+1'b1;//时十位加一

end

if(hour[23:

16]==8'h24)

hour[23:

16]=8'h0;

end

end

end

end

end

end

endmodule

五,课程设计总结

这次课程设计虽然只有短短的几天,但我的收获却很大。

通过这次实习,我掌握了EDA设计的基本流程(即设计输入—编译—调试—仿真—下载),领会了自顶而下结构化设计的优点,并具备了初步的EDA程序设计能力。

我感觉,这个程序最难的地方在于顶层模块的设计,因为顶层模块需要将各个子模块按照电路原理有机地结合起来,这需要扎实的理论功底,而这正是我所欠缺的。

相比而言,子模块的设计就容易多了,因为Verilog语言和C语言有很多相似之处,只要明白了实验原理,就不难完成,水平的高下只体现在程序的简洁与否。

Verilog源程序的编写很容易出现错误,这就需要耐心的调试。

因为很多情况下,一长串的错误往往是由一个不经意的小错误引起的。

当程序屡调屡错的时候,最好和其他同学沟通交流一下,他们不经意的一句话,就可能给我启发,使问题迎刃而解。

这次设计,给我感触最深的还是行为态度问题。

人的能力有大有小,但只要端正态度,不抛弃,不放弃,任何人都能取得令自己满意的成绩。

在此,我由衷的感谢在这次课程设计中给了我巨大帮助的老师和同学们!

 

六,指导教师评语

 

成绩指导教师签名

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

当前位置:首页 > 职业教育 > 职高对口

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

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