数电课设实验报告.docx

上传人:b****5 文档编号:6494100 上传时间:2023-01-07 格式:DOCX 页数:30 大小:1.24MB
下载 相关 举报
数电课设实验报告.docx_第1页
第1页 / 共30页
数电课设实验报告.docx_第2页
第2页 / 共30页
数电课设实验报告.docx_第3页
第3页 / 共30页
数电课设实验报告.docx_第4页
第4页 / 共30页
数电课设实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

数电课设实验报告.docx

《数电课设实验报告.docx》由会员分享,可在线阅读,更多相关《数电课设实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

数电课设实验报告.docx

数电课设实验报告

大连理工大学本科实验报告

 

题目:

数字钟

 

课程名称:

数字电路课程设计

学院(系):

电信学部

专业:

电气工程及其自动化

班级:

电气1603班

学生姓名:

肖也

学号:

201692279

完成日期:

2018.12.26

成绩:

 

2018年12月26日

数字电路实验室安全操作规范

在实验室指定的位置进行实验。

实验前,应检查要使用的实验设备是否在正确的位置,注意人身安全,防止使用过程中造成事故。

使用设备前,检查是否有漏电等危险情况。

如果设备不正常,要关闭电源,请指导教师更换。

禁止学生未经允许移动和更换以及检修设备。

实验室内的仪器设备要安全接地,注意仪器设备的通风和防尘,远离高温以及强辐射区域。

仪器设备要按照使用说明书操作,严禁用锐器和硬物损坏仪器设备、电源线和信号线等,严禁在实验室刻画和做标记等行为。

应正确选择和使用设备,严禁违章操作,避免人身事故和仪器损坏,造成损失的要赔偿。

一般情况下,禁止学生携带个人的电子元器件和设备进入实验室。

学生自制的电路必须经过指导教师批准才能接到实验设备上。

严禁学生携带实验室的设备和元器件等到实验室外。

借用设备时要请示教师,登记之后再带离,并在规定的时间内归还,归还时要检查是否正常。

实验过程中,禁止带电操作,检查电路时要关闭电源。

如果发现有异常发热,焦糊味和异常声响等,应首先关闭电源,并请指导教师解决。

如遇到地震、火灾等灾害要按照实验室安全预案进行处理。

实验结束后,要整理实验设备到正确的位置,带好个人物品,清扫卫生后,经过指导教师允许才能离开。

离开时,各个实验设备要关闭电源,计算机和投影仪要按照正确的方法关机,不得强行关闭。

电脑中不能存放与教学无关的资料,不能玩游戏和观看电影。

进入实验室时,不能携带食品和饮料。

离开时,要把垃圾带走。

签名:

 

日期:

题目:

数字钟

1设计要求

(1)能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz;

(2)具有手动校时、校分、校秒的功能,调整的形式为通过按键进行累加;

(3)在整点进行提示,通过六位流水灯来实现,具体方式为2秒1个轮回,偶数位和奇数位各亮1秒,循环闪烁直到整点过1分结束。

(4)具有闹钟功能,闹钟时间可以任意设定,只能调整时和分,秒数统一设置为0(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示由1位LED闪烁实现,闹钟到点后持续一分钟;

(5)具有闹铃音乐功能,由蜂鸣器接到开发板GPIO引脚输出实现,闹钟到点后自动循环播放事先编制好的特定乐谱的音乐,持续时间和闹钟到点提示灯一样为1分钟;

(6)设计模式选择计数器,有计时、校时(手动校时和闹钟定时)及整点报时三个模式,通过计数器来控制各个功能之间转换。

2设计分析及系统方案设计

4个输入:

27Mhz时钟,三个按键;

14个输出:

6个数码管显示输出,2个当前校时提示灯(分别提示当前为校正数字钟和设定闹铃时间),3个当前校时位提示灯(时、分、秒),1个闹钟到点提示灯,1个整点报时6位流水灯,1个蜂鸣器输出引脚;

通过对50MHZ的clk进行分频得到1Hz时钟信号作为基本信号,三个按键分别控制模式,调时位,累加。

时分秒key3key2key1

位位位模式校时校时

显显显提示位按键

示示示提示累加

图1系统框图

3系统以及模块硬件电路设计

硬件电路及其引脚说明如下:

图2按键部分电路

表1按键部分接口定义

图3数码管部分电路

表2数码管部分接口定义

图4LED部分电路

整点报时6位流水灯

闹钟到时提示灯

由下到上依次为时分秒当前校时位提示灯

LEDG[7]:

闹钟定时提示灯

LEDG[8]数字钟校时提示灯

表3实验中用到的LED接口定义

图5GPIO接口部分电路

表4实验中用到的GPIO引脚(蜂鸣器外设接口)定义

4系统的VerilogHDL设计

moduleclock(clk,add,set_mod_key,set_xx_key,hour1_show,hour2_show,min1_show,min2_show,sec1_show,sec2_show,set_time_LED,set_clock_LED,set_hour_LED,set_sec_LED,set_min_LED,alarm_light,hourly_light,speaker);

inputclk,set_mod_key,set_xx_key,add;//输入为50MHZ开发板时钟和三个按键:

运行模式、调时位、累加

output[6:

0]hour1_show,hour2_show,min1_show,min2_show,sec1_show,sec2_show;//6个数码管显示输出

outputset_time_LED,set_clock_LED;//数字钟校时提示灯和闹钟定时提示灯

outputset_hour_LED,set_sec_LED,set_min_LED;//当前校时位提示灯(时、分、秒)

outputalarm_light;//闹钟到时提示灯

output[5:

0]hourly_light;//整点报时六位流水灯

outputspeaker;//扬声器GPIO引脚对应的音频输出端状态寄存器

reg[6:

0]hour1_show,hour2_show,min1_show,min2_show,sec1_show,sec2_show;

//时分秒显示数码管

reg[3:

0]hour1,hour2,min1,min2,sec1,sec2;//存储正常计时的当前时间

reg[3:

0]set_hour1,set_hour2,set_min1,set_min2,set_sec1,set_sec2;

//存储校时功能的目标校正时间

reg[3:

0]shour1,shour2,smin1,smin2,ssec1,ssec2;

//存储数码管应显示的对应十进制数的寄存器

reg[3:

0]ahour1,ahour2,amin1,amin2,asec1,asec2;//存储闹钟定时

regset_counter;

regclk_sec,clk_2s;//秒脉冲(1HZ的时钟脉冲)

reg[24:

0]counter1;

reg[24:

0]counter2;

regset_time,set_clock;//分别为校时和闹钟定时的启动开关

regset_hour,set_sec,set_min;//校时和闹钟定时设置时分秒的标志寄存器

regset_time_LED,set_clock_LED;//校时模式提示灯和闹钟定时模式提示灯

regset_hour_LED,set_sec_LED,set_min_LED;//当前校时、闹钟定时时分秒位提示灯

regalarm_light;

reg[5:

0]hourly_light;

regset_ok;//标志校时或者闹钟定时已完成

regclock_sys;//当前计时模式标志寄存器

regspeaker;

regclk_6mhz;//由50MHZ系统时钟八分频得到(实际为6.25MHZ),用于产生各种音阶频率的基准频率

regclk_8hz;//用于控制音长(节拍)的时钟频率,所有节拍均为1/4拍的整数倍

reg[14:

0]divider,origin;//divider为分频系数,origin为各个音调实现分频的加载预置数

regcarry;

reg[7:

0]counter;/*乐曲从开始处经过的1/4节拍(1/8秒)数计数器*/

reg[3:

0]high,med,low;/*高中低八度音阶*/

reg[2:

0]count8;//50MHZ八分频作为基频

reg[18:

0]count19;//6.25MHZ时钟分频到8HZ所需要的计数器

parameterdiv_para1=25000000;

parameternum_quarter_note=143;//闹钟音乐四分音符数目

/**************50MHz转化为1Hz**************/

always@(posedgeclk)

begin

counter1<=counter1+1’b1;

if(counter1>=div_para1)

begin

counter1<=0;

clk_sec=!

clk_sec;

end

end

always@(posedgeclk_sec)

begin

clk_2s=~clk_2s;

end

//为闹钟到点提示灯和整点报时流水灯设置的0.5HZ时钟信号,由数字钟秒脉冲二分频得到

/*模式1:

正常计时*/

always@(posedgeclk_sec)

begin

if(set_ok==1&&set_time==1)

begin

sec1<=set_sec1;

sec2<=set_sec2;

min1<=set_min1;

min2<=set_min2;

hour1<=set_hour1;

hour2<=set_hour2;

end

if(!

set_time)//24小时计时

if(sec2==4'h9)

begin

sec2<=4'h0;

if(sec1==4'h5)

begin

sec1<=4'h0;

if(min2==4'h9)

begin

min2<=4'h0;

if(min1==4'h5)

begin

min1<=4'h0;

if(hour2==4'h3&&hour1==4'h2)

begin

hour2<=4'h0;

hour1<=4'h0;

end

elseif(hour2==4'h9)

begin

hour2<=4'h0;

if(hour1==4'h5)

hour1<=4'h0;

else

hour1<=hour1+1'b1;

end

else

hour2<=hour2+1'b1;

end

else

min1<=min1+1'b1;

end

else

min2<=min2+1'b1;

end

else

sec1<=sec1+1'b1;

end

else

sec2<=sec2+1'b1;

end

/***************模式1计时、模式2校时、模式3闹钟定时时间显示*************/

always@(posedgeclk)

begin

if(set_time==1)

begin

ssec1<=set_sec1;

ssec2<=set_sec2;

smin1<=set_min1;

smin2<=set_min2;

shour1<=set_hour1;

shour2<=set_hour2;

end

elseif(set_clock==1)

begin

ssec1<=asec1;

ssec2<=asec2;

smin1<=amin1;

smin2<=amin2;

shour1<=ahour1;

shour2<=ahour2;

end

else

begin

ssec1<=sec1;

ssec2<=sec2;

smin1<=min1;

smin2<=min2;

shour1<=hour1;

shour2<=hour2;

end

case(shour1)

4'b0000:

hour1_show<=7'b1000000;

4'b0001:

hour1_show<=7'b1111001;

4'b0010:

hour1_show<=7'b0100100;

endcase

case(shour2)

4'b0000:

hour2_show<=7'b1000000;

4'b0001:

hour2_show<=7'b1111001;

4'b0010:

hour2_show<=7'b0100100;

4'b0011:

hour2_show<=7'b0110000;

4'b0100:

hour2_show<=7'b0011001;

4'b0101:

hour2_show<=7'b0010010;

4'b0110:

hour2_show<=7'b0000010;

4'b0111:

hour2_show<=7'b1111000;

4'b1000:

hour2_show<=7'b0000000;

4'b1001:

hour2_show<=7'b0010000;

endcase

case(smin1)

4'b0000:

min1_show<=7'b1000000;

4'b0001:

min1_show<=7'b1111001;

4'b0010:

min1_show<=7'b0100100;

4'b0011:

min1_show<=7'b0110000;

4'b0100:

min1_show<=7'b0011001;

4'b0101:

min1_show<=7'b0010010;

4'b0110:

min1_show<=7'b0000010;

endcase

case(smin2)

4'b0000:

min2_show<=7'b1000000;

4'b0001:

min2_show<=7'b1111001;

4'b0010:

min2_show<=7'b0100100;

4'b0011:

min2_show<=7'b0110000;

4'b0100:

min2_show<=7'b0011001;

4'b0101:

min2_show<=7'b0010010;

4'b0110:

min2_show<=7'b0000010;

4'b0111:

min2_show<=7'b1111000;

4'b1000:

min2_show<=7'b0000000;

4'b1001:

min2_show<=7'b0010000;

endcase

case(ssec1)

4'b0000:

sec1_show<=7'b1000000;

4'b0001:

sec1_show<=7'b1111001;

4'b0010:

sec1_show<=7'b0100100;

4'b0011:

sec1_show<=7'b0110000;

4'b0100:

sec1_show<=7'b0011001;

4'b0101:

sec1_show<=7'b0010010;

4'b0110:

sec1_show<=7'b0000010;

endcase

case(ssec2)

4'b0000:

sec2_show<=7'b1000000;

4'b0001:

sec2_show<=7'b1111001;

4'b0010:

sec2_show<=7'b0100100;

4'b0011:

sec2_show<=7'b0110000;

4'b0100:

sec2_show<=7'b0011001;

4'b0101:

sec2_show<=7'b0010010;

4'b0110:

sec2_show<=7'b0000010;

4'b0111:

sec2_show<=7'b1111000;

4'b1000:

sec2_show<=7'b0000000;

4'b1001:

sec2_show<=7'b0010000;

endcase

end

/***************整时提醒************/

always@(posedgeclk)

begin

if(clock_sys==1)

if(min1==5&&min2==9&&sec1==5&&(sec2==0||sec2==2||sec2==4||sec2==6||sec2==8))

hourly_light<=6'b010101;//59分50/52/54/56/58秒LEDR[0][2][4]亮

elseif(min1==0&&min2==0&&sec1==0&&sec2==0)

hourly_light<=6'b010101;//整点时同上

elseif(min1==5&&min2==9&&sec1==5&&(sec2==1||sec2==3||sec2==5||sec2==7

||sec2==9))

hourly_light<=6'b101010;//59分51/53/55/57/59秒LEDR[1][3][5]亮

else

hourly_light<=6'b000000;

end

/********************调时位置按键检测*************/

always@(posedgeset_xx_key)

begin

if(set_time==1||set_clock==1)

begin

if(set_hour==1)//调时完下一步调秒,调秒完下一步调分,调分完下一步调时,依次循环

begin

set_hour<=0;

set_min<=0;

set_sec<=1;

set_ok<=1;

set_hour_LED<=0;

set_min_LED<=0;

set_sec_LED<=1;

end

elseif(set_sec==1)

begin

set_hour<=0;

set_min<=1;

set_sec<=0;

set_ok<=1;

set_hour_LED<=0;

set_min_LED<=1;

set_sec_LED<=0;

end

elseif(set_min==1)

begin

set_hour<=1;

set_min<=0;

set_sec<=0;

set_ok<=1;

set_hour_LED<=1;

set_min_LED<=0;

set_sec_LED<=0;

end

else//如果调时位置按键的几个寄存器均为0,那么下一步默认按调秒处理,只用于刚上电启动第一次校时或闹钟定时的情况

begin

set_hour<=0;

set_min<=0;

set_sec<=1;

set_ok<=1;

set_hour_LED<=0;

set_min_LED<=0;

set_sec_LED<=1;

end

end

if(set_time==0&&set_clock==0)

begin

set_hour<=0;

set_min<=0;

set_sec<=0;

set_ok<=0;

set_hour_LED<=0;

set_sec_LED<=0;

set_min_LED<=0;

end

end

/*******************调时模式按键检测**************/

always@(posedgeset_mod_key)

//在计时、校时和闹钟定时三个模式之间依次循环切换,每次按下set_mod_key键及切换到下一模式并且相应的提示灯亮

begin

if(set_time==1)

begin

set_time<=0;

set_clock<=1;

clock_sys<=0;

set_time_LED<=0;

set_clock_LED<=1;

end

elseif(set_clock==1)

begin

set_time<=0;

set_clock<=0;

set_time_LED<=0;

set_clock_LED<=0;

clock_sys<=1;//clock_sys标志当前数字钟正处在正常计时模式

end

else

begin

set_time<=1;

set_clock<=0;

clock_sys<=0;

set_time_LED<=1;

set_clock_LED<=0;

end

end

/***************add检测*****************/

always@(posedgeadd)

begin

if(set_time==1)

begin

if(set_sec==1)

begin

if(set_sec2==9)

begin

if(set_sec1==5)

begin

set_sec1<=0;

set_sec2<=0;

end

else

begin

set_sec1<=set_sec1+1'b1;

set_sec2<=0;

end

end

else

begin

set_sec2<=set_sec2+1'b1;

end

end

elseif(set_min==1)

begin

if(set_min2==9)

begin

if(set_min1==5)

begin

set_min1<=0;

set_min2<=0;

end

else

begin

set_min1<=set_min1+1'b1;

set_min2<=0;

end

end

else

set_min2<=set_min2+1'b1;

end

elseif(set_hour==1)

begin

if(set_hour1!

=2)

begin

if(set_hour2==9)

begin

set_hour1<=set_

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

当前位置:首页 > 医药卫生

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

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