




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连理工大学本科实验报告题目:数字钟课程名称: 数字电路课程设计 学院(系): 电信学部 专 业: 电气工程及其自动化 班 级: 电气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时钟信号作为基本信号,三个按键分别控制模式,调时位,累加。 时 分 秒 key3 key2 key1位 位 位 模式 校时 校时显 显 显 提示 位 按键示 示 示 提示 累加图 1系统框图3系统以及模块硬件电路设计硬件电路及其引脚说明如下:图 2按键部分电路表 1按键部分接口定义图 3 数码管部分电路表 2 数码管部分接口定义图 4 LED部分电路整点报时6位流水灯闹钟到时提示灯由下到上依次为时分秒当前校时位提示灯LEDG7:闹钟定时提示灯LEDG8数字钟校时提示灯表 3实验中用到的LED接口定义图 5GPIO接口部分电路表 4实验中用到的GPIO引脚(蜂鸣器外设接口)定义4 系统的Verilog HDL设计module clock (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开发板时钟和三个按键:运行模式、调时位、累加output6:0hour1_show,hour2_show,min1_show,min2_show,sec1_show,sec2_show;/6个数码管显示输出output set_time_LED,set_clock_LED; /数字钟校时提示灯和闹钟定时提示灯output set_hour_LED,set_sec_LED,set_min_LED; /当前校时位提示灯(时、分、秒)outputalarm_light; /闹钟到时提示灯output5:0hourly_light; /整点报时六位流水灯outputspeaker; /扬声器GPIO引脚对应的音频输出端状态寄存器reg6:0hour1_show,hour2_show,min1_show,min2_show,sec1_show,sec2_show;/时分秒显示数码管reg3:0hour1,hour2,min1,min2,sec1,sec2;/存储正常计时的当前时间reg3:0set_hour1,set_hour2,set_min1,set_min2,set_sec1,set_sec2;/存储校时功能的目标校正时间reg3:0shour1,shour2,smin1,smin2,ssec1,ssec2;/存储数码管应显示的对应十进制数的寄存器reg3:0ahour1,ahour2,amin1,amin2,asec1,asec2;/存储闹钟定时regset_counter;regclk_sec,clk_2s;/秒脉冲(1HZ的时钟脉冲)reg24:0counter1;reg24:0counter2;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;reg5:0hourly_light;regset_ok;/标志校时或者闹钟定时已完成regclock_sys;/当前计时模式标志寄存器regspeaker;regclk_6mhz;/由50MHZ系统时钟八分频得到(实际为6.25MHZ),用于产生各种音阶频率的基准频率regclk_8hz;/用于控制音长(节拍)的时钟频率,所有节拍均为1/4拍的整数倍reg14:0divider,origin;/divider为分频系数,origin为各个音调实现分频的加载预置数regcarry;reg7:0counter;/*乐曲从开始处经过的1/4节拍(1/8秒)数计数器*/reg3:0high,med,low;/*高中低八度音阶*/reg2:0count8;/50MHZ八分频作为基频reg18:0count19;/6.25MHZ时钟分频到8HZ所需要的计数器parameterdiv_para1=25000000;parameternum_quarter_note=143;/闹钟音乐四分音符数目/*50MHz转化为1Hz*/always(posedge clk)begincounter1=div_para1)begincounter1=0;clk_sec=!clk_sec;endendalways(posedge clk_sec)beginclk_2s=clk_2s;end/为闹钟到点提示灯和整点报时流水灯设置的0.5HZ时钟信号,由数字钟秒脉冲二分频得到/*模式1:正常计时*/always(posedge clk_sec)beginif(set_ok=1&set_time=1)beginsec1=set_sec1;sec2=set_sec2;min1=set_min1;min2=set_min2;hour1=set_hour1;hour2=set_hour2;endif(!set_time)/24小时计时if (sec2=4h9) begin sec2=4h0; if (sec1=4h5) begin sec1=4h0; if (min2=4h9) begin min2=4h0; if (min1=4h5) begin min1=4h0; if (hour2=4h3&hour1=4h2) begin hour2=4h0; hour1=4h0; end else if (hour2=4h9) begin hour2=4h0; if (hour1=4h5) hour1=4h0;elsehour1=hour1+1b1;end else hour2=hour2+1b1; end else min1=min1+1b1; end else min2=min2+1b1;end else sec1=sec1+1b1; end else sec2=sec2+1b1;end/*模式1计时、模式2校时、模式3闹钟定时时间显示*/ always(posedge clk)beginif(set_time=1)beginssec1=set_sec1;ssec2=set_sec2;smin1=set_min1;smin2=set_min2;shour1=set_hour1;shour2=set_hour2;endelse if(set_clock=1)beginssec1=asec1;ssec2=asec2;smin1=amin1;smin2=amin2;shour1=ahour1;shour2=ahour2;endelsebeginssec1=sec1;ssec2=sec2;smin1=min1;smin2=min2;shour1=hour1;shour2=hour2;endcase(shour1)4b0000:hour1_show=7b1000000;4b0001:hour1_show=7b1111001;4b0010:hour1_show=7b0100100;endcasecase(shour2)4b0000:hour2_show=7b1000000;4b0001:hour2_show=7b1111001;4b0010:hour2_show=7b0100100;4b0011:hour2_show=7b0110000;4b0100:hour2_show=7b0011001;4b0101:hour2_show=7b0010010;4b0110:hour2_show=7b0000010;4b0111:hour2_show=7b1111000;4b1000:hour2_show=7b0000000;4b1001:hour2_show=7b0010000;endcasecase(smin1)4b0000:min1_show=7b1000000;4b0001:min1_show=7b1111001;4b0010:min1_show=7b0100100;4b0011:min1_show=7b0110000;4b0100:min1_show=7b0011001;4b0101:min1_show=7b0010010;4b0110:min1_show=7b0000010;endcasecase(smin2)4b0000:min2_show=7b1000000;4b0001:min2_show=7b1111001;4b0010:min2_show=7b0100100;4b0011:min2_show=7b0110000;4b0100:min2_show=7b0011001;4b0101:min2_show=7b0010010;4b0110:min2_show=7b0000010;4b0111:min2_show=7b1111000;4b1000:min2_show=7b0000000;4b1001:min2_show=7b0010000;endcasecase(ssec1)4b0000:sec1_show=7b1000000;4b0001:sec1_show=7b1111001;4b0010:sec1_show=7b0100100;4b0011:sec1_show=7b0110000;4b0100:sec1_show=7b0011001;4b0101:sec1_show=7b0010010;4b0110:sec1_show=7b0000010;endcasecase(ssec2)4b0000:sec2_show=7b1000000;4b0001:sec2_show=7b1111001;4b0010:sec2_show=7b0100100;4b0011:sec2_show=7b0110000;4b0100:sec2_show=7b0011001;4b0101:sec2_show=7b0010010;4b0110:sec2_show=7b0000010;4b0111:sec2_show=7b1111000;4b1000:sec2_show=7b0000000;4b1001:sec2_show=7b0010000;endcaseend/*整时提醒*/always(posedge clk) beginif(clock_sys=1) if(min1=5&min2=9&sec1=5&(sec2=0|sec2=2|sec2=4|sec2=6|sec2=8)hourly_light=6b010101; /59分50/52/54/56/58秒LEDR024亮else if(min1=0&min2=0&sec1=0&sec2=0)hourly_light=6b010101; /整点时同上else if(min1=5&min2=9&sec1=5&(sec2=1|sec2=3|sec2=5|sec2=7|sec2=9)hourly_light=6b101010; /59分51/53/55/57/59秒LEDR135亮elsehourly_light=6b000000;end/*调时位置按键检测*/ always(posedge set_xx_key)beginif(set_time=1|set_clock=1)beginif(set_hour=1)/调时完下一步调秒,调秒完下一步调分,调分完下一步调时,依次循环beginset_hour=0;set_min=0;set_sec=1;set_ok=1;set_hour_LED=0;set_min_LED=0;set_sec_LED=1;endelse if(set_sec=1)beginset_hour=0;set_min=1;set_sec=0;set_ok=1;set_hour_LED=0;set_min_LED=1;set_sec_LED=0;endelse if(set_min=1)beginset_hour=1;set_min=0;set_sec=0;set_ok=1;set_hour_LED=1;set_min_LED=0;set_sec_LED=0;endelse/如果调时位置按键的几个寄存器均为0,那么下一步默认按调秒处理,只用于刚上电启动第一次校时或闹钟定时的情况beginset_hour=0;set_min=0;set_sec=1;set_ok=1;set_hour_LED=0;set_min_LED=0;set_sec_LED=1;endendif(set_time=0&set_clock=0)beginset_hour=0;set_min=0;set_sec=0;set_ok=0;set_hour_LED=0;set_sec_LED=0;set_min_LED=0;endend/*调时模式按键检测*/ always(posedge set_mod_key)/在计时、校时和闹钟定时三个模式之间依次循环切换,每次按下set_mod_key键及切换到下一模式并且相应的提示灯亮beginif(set_time=1)beginset_time=0;set_clock=1;clock_sys=0;set_time_LED=0;set_clock_LED=1;endelse if(set_clock=1)beginset_time=0;set_clock=0;set_time_LED=0;set_clock_LED=0;clock_sys=1;/clock_sys标志当前数字钟正处在正常计时模式endelsebeginset_time=1;set_clock=0;clock_sys=0;set_time_LED=1;set_clock_LED=0;endend/*add检测*/always(posedge add)beginif(set_time=1)beginif(set_sec=1)beginif(set_sec2=9)beginif(set_sec1=5)beginset_sec1=0;set_sec2=0;endelsebeginset_sec1=set_sec1+1b1;set_sec2=0;endendelsebeginset_sec2=set_sec2+1b1;endendelse if(set_min=1)beginif(set_min2=9)beginif(set_min1=5)beginset_min1=0;set_min2=0;endelsebeginset_min1=set_min1+1b1;set_min2=0;endendelseset_min2=set_min2+1b1;endelse if(set_hour=1)beginif(set_hour1!=2)beginif(set_hour2=9)beginset_hour1=set_hour1+1b1;set_hour2=0;endelseset_hour2=set_hour2+1b1;endelsebeginif(set_hour2=3)beginset_hour1=0;set_hour2=0;endelse if(set_hour23)set_hour2=set_hour2+1b1;endendendelse if(set_clock=1)beginif(set_sec=1)beginasec2=0;asec1=0;endelse if(set_min=1)beginif(amin2=9)beginif(amin1=5)beginamin1=0;amin2=0;endelsebeginamin1=amin1+1b1;amin2=0;endendelseamin2=amin2+1b1;endelse if(set_hour=1)beginif(ahour1!=2)beginif(ahour2=9)beginahour1=ahour1+1b1;ahour2=0;endelseahour2=ahour2+1b1;endelsebeginif(ahour2=3)beginahour1=0;ahour2=0;endelse if(ahour23)ahour2=ahour2+1b1;endendendend/*闹钟到点提示灯*/always(posedge clk)beginif(clock_sys=1)if(clk_2s=1&ahour1=hour1&ahour2=hour2&amin1=min1&amin2=min2)alarm_light=1;elsealarm_light=0;end/*闹钟音乐*/always(posedgeclk)/从50MHZ分频得到6.25MHZ时钟begin if(count8=7)begincount8=0;clk_6mhz=1;endelse begincount8=count8+1b1;clk_6mhz=0;endendalways(posedgeclk_6mhz)/从6.25MHZ分频得到8HZ时钟beginif(count19=390625)beginclk_8hz=clk_8hz;count19=0;endelsecount19=count19+1b1;endalways(posedgeclk_6mhz)/通过置数,改变分频比beginif(divider=32767)/215-1begincarry=1;divider=origin;endelsebegindivider=divider+1b1;carry=0;endendalways(posedge carry)/2分频得到方波信号,得到每个四分音符1/8秒内的特定频率的声音振动beginspeaker=speaker;endalways(posedgeclk_8hz)begincase(high,med,low)/根据不同的音符,预置分频比h001:origin=8876;h002:origin=11487;h003:origin=13805;h004:origin=14869;h005:origin=16823;h006:origin=18562;h007:origin=20113;h010:origin=20824;h020:origin=22125;h030:origin=23287;h040:origin=23832;h050:origin=24795;h060:origin=25665;h070:origin=26440;h100:origin=26795;h200:origin=27446;h300:origin=28030;h400:origin=28293;h500:origin=28781;h600:origin=29216;h700:origin=29603;h000:origin=32767;/休止符endcaseendalways(posedge clk_8hz)/闹钟到时,循环播放一分钟闹铃音乐if(clock_sys=1)beginif(ahour1=hour1&ahour2=hour2&amin1=min1&amin2=min2)beginif(counter=num_quarter_note)counter=0;elsecounter=counter+1b1;case(counter)/乐曲片段乐谱0:high,med,low=h000;1:high,med,low=h0002:high,med,low=h000;3:high,med,low=h000;4:high,med,low=h000;5:high,med,low=h000;6:high,med,low=h000;7:high,med,low=h000;8:high,med,low=h000;9:high,med,low=h000; 10:high,med,low=h010;11:high,med,low=h010;12:high,med,low=h010;13:high,med,low=h010;14:high,med,low=h020;15:high,med,low=h020;16:high,med,low=h030;17:high,med,low=h030;18:high,med,low=h030;19:high,med,low=h030;20:high,med,low=h020;21:high,med,low=h020;22:high,med,low=h030;23:high,med,low=h030;24:high,med,low=h000;25:high,med,low=h000;26:high,med,low=h030;27:high,med,low=h030;28:high,med,low=h020;29:high,med,low=h020; 30:high,med,low=h010;31:high,med,low=h010;32:high,med,low=h050;33:high,med,low=h050;34:high,med,low=h050;35:high,med,low=h050;36:high,med,low=h030;37:high,med,low=h030;38:high,med,low=h050;39:high,med,low=h050;40:high,med,low=h000;41:high,med,low=h000;42:high,med,low=h050;43:high,med,low=h050;44:high,med,low=h060;45:high,med,low=h060;46:high,med,low=h070;47:high,med,low=h070;48:high,med,low=h100;49:high,med,low=h100;50:high,med,low=h100;51:high,med,low=h100;52:high,med,low=h100;53:high,med,low=h100;54:high,med,low=h100;55:high,med,low=h100;56:high,med,low=h100;57:high,med,low=h100;58:high,med,low=h070;59:high,med,low=h070;60:high,med,low=h060;61:high,med,low=h060;62:high,med,low=h070;63:high,med,low=h070;64:high,med,low=h060;65:high,med,low=h060;66:high,med,low=h030;67:high,med,low=h030;68:high,med,low=h030;69:high,med,low=h030;70:high,med,low=h050;71:high,med,low=h050;72:high,med,low=h050;73:high,med,low=h050;74:high,med,low=h050;75:high,med,low=h050;76:high,med,low=h050;77:high,med,low=h050;78:high,med,low=h060;79:high,med,low=h060;80:high,med,low=h100;81:high,med,low=h100;82:high,med,low=h050;83:high,med,low=h050;84:high,med,low=h050;85:high,med,low=h050;86:high,med,low=h060;87:high,med,low=h060;88:high,med,low=h000;89:high,med,low=h000;90:high,med,low=h060;91:high,med,low=h060;92:high,med,low=h050;93:high,med,low=h050;94:high,med,low=h040;95:high,med,low=h040;96:high,med,low=h050;97:high,med,low=h050;98:high,med,low=h030;99:high,med,low=h030;100:high,med,low=h030;101:high,med,low=h030;102:high,med,low=h020;103:high,med,low=h020;104:high,med,low=h010;105:high,med,low=h010;106:high,med,low=h010;107:high,med,low=h010;108:high,med,low=h010;109:high,med,low=h010;110:high,med,low=h060;111:high,med,low=h010;112:high,med,low=h030;113:high,med,low=h030;114:high,med,low=h020;115:high,med,low=h020;116:high,med,low=h020;117:high,med,low=h020;118:high,med,low=h010;119:high,med,low=h010;120:high,med,low=h020;121:high,med,low=h020;122:high,med,low=h050;123:high,med,low=h050;124:high,med,low=h050;125:high,med,low=h050;126:high,med,low=h001;127:high,med,low=h001;128:high,med,low=h020;129:high,med,low=h020;130:high,med,low=h020;131:high,med,low=h020;132:high,med,low=h020;133:high,med,low=h020;134:high,med,low=h020;135:high,med,low=h020;136:high,med,low=h020;137:high,med,low=h020;138:high,med,low=h020;139:high,med,low=h020;140:high,med,low=h000;141:high,med,low=h000;142:high,med,low=h000;143:high,med,low=h000;endcaseendelsehigh,med,low=h000;endendmodule5 结论以及结果说明系统在DE2开发板上能够正常运行,时间显示、计时、校时、闹钟定时和闹铃音乐都能正常工作,整点报时LED流水灯的花型也可以正常显示。基本实现了数字钟的功能。6 闹铃音乐部分设计说明乐曲演奏的基本原理:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据。只要控制输出到蜂鸣器(扬声器)的激励信号的频率高低和持续时间,就可以使蜂鸣器(扬声器)发出连续的乐曲声。频率高低决定音调高低,简谱中每个音名都有特定的频率。所有不同频率的信号从同一个基准频率分频得到(此次课设从系统时钟50MHZ八分频的6.25MHZ方波再次分频得来)。由于音阶频率多为非整数而分频系数又不能为小数,必须将计算得到的分频数四舍五入取整。基准频率必须适当大一些,以减小分频比取整的相对误差,同时避免分频数过大系统高频工作带来的不可靠因素。此次课设采用了加载预置数法实现分频,各个不同音阶频率分频系数不同,用同一个整数减去分频系数,得到一组各音阶的加载预置数。对于乐曲中的休止符,只需分频系数设为0,相应地加载的初始值设为该整数即可。该方法比反馈置零法更节省资源。音长控制需以乐曲中最短的音符作为节拍基准(例如四分音符),对于节拍较长的音符,只需在记谱时将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 月亮姐姐快下来教学设计-2025-2026学年小学音乐人音版五线谱六年级上册-人音版(五线谱)
- 3.3 液晶与显示器说课稿-2025-2026学年高中物理沪教版2019选择性必修 第三册-沪教版2019
- 1.6.不同的季节 教学设计-2024-2025学年科学二年级上册教科版
- 课题1 空气教学设计-2025-2026学年初中化学人教版九年级上册-人教版2012
- 7《太阳与生活》(教案)一年级下册科学冀人版
- 2025年中考地理试题分类汇编:我国的经济发展(第1期)原卷版
- 2025年2月内科学模考试题与答案
- 初中数学考试试卷期末(2篇)
- 2025年全国健康管理师职业技能考试题库(含答案)
- 葡萄酒红酒知识培训
- T/CSMT-YB 006-2023精密数字温度计性能测试与评价方法
- DB31/ 653-2012通信基站空调能效限定值
- 组建乐团协议书
- 兼职人员聘用协议书
- GB/T 45595-2025离心式制冷剂压缩机
- GB/T 45569-2025压水堆核电厂反应堆冷却剂系统设备和管道保温层设计准则
- 2020公路工程质量检验评定标准第二册机电工程
- 金矿居间合同协议书
- 酒店安全考试试题及答案
- 人教版小学四年级上册数学 第7单元 条形统计图 教案
- 珠宝店员工保密协议合同
评论
0/150
提交评论