优斗网站建设手机百度app最新版下载

web/2025/10/6 4:38:52/文章来源:
优斗网站建设,手机百度app最新版下载,环保公司网站架构怎么做,贵州网站建设营销公司哪家好文章目录 前言实验手册一、实验目的二、实验原理1#xff0e;理论原理2#xff0e;硬件原理 三、系统架构设计四、模块说明1#xff0e;模块端口信号列表按键消抖模块#xff08;key#xff09;计数器模块#xff08;counter#xff09;蜂鸣器乐谱模块(music)蜂鸣器发声… 文章目录 前言实验手册一、实验目的二、实验原理1理论原理2硬件原理 三、系统架构设计四、模块说明1模块端口信号列表按键消抖模块key计数器模块counter蜂鸣器乐谱模块(music)蜂鸣器发声模块(beep)数码管驱动模块(seg_driver)顶层模块top 2状态转移图3时序图 五、仿真波形图六、引脚分配tcl引脚分配文件 七、代码编写按键消抖模块key计数器模块counter蜂鸣器乐谱模块(music)蜂鸣器发声模块(beep)数码管驱动模块(seg_driver)顶层模块top 八、总结 前言 本次实验是本人全部用状态机实现的所以导致我的状态机空间有很多状态有一部分状态可以进行修改不过我认为全部写成状态机更有利于本人的理解可能有人会觉得很绕不过根据本人自身所画的状态图就能较为清晰明了本文结尾会附上所有代码如有需要自取即可但我希望不要一味的复制粘贴理解之后手敲一遍更能提升自己如需要工程文件私信我或者评论区找我现写下此博客以便日后复习。 该开发板为EP4CE6F17C8 实验手册 一、实验目的 1、完成基本24时计数显示2、显示时间可调整 3、设置可调闹钟-闹钟触发时蜂鸣器响起 二、实验原理 1理论原理 蜂鸣器原理输入一定频率的方波或者PWM信号蜂鸣器就可以发出声音。输入不同频率的信号蜂鸣器可以发出不同音色的声音 电子时钟原理是在数码管中由于有位选信号和段选信号的存在我们无法做到将数码管同时进行变换所以我们通过快速的切换和刷新使得我们看到的是连续的多个数码管显示结果。通过控制位选信号和段选信号可以实现不同的数字、字母或符号的动态显示。 将按键进行按键消抖获得稳定信号。 使用按键通过状态机切换状态控制位选信号在相应的位选信号下控制时位分位秒位的数值加一或减一。 利用相同原理使用状态机切换状态——闹钟设置状态和常规电子时钟状态闹钟设置状态下对时分秒位的操作与电子时钟状态一致 闹钟状态中将设定的值与电子时钟的值比对如果相等则传给蜂鸣器一个信号并将该信号持续5s是蜂鸣器发声五秒 2硬件原理 我所用的板子自带的蜂鸣器是无源蜂鸣器——内部无振荡源需要通以方波、PWM信号才能发出声音以及是低电平有效 开发板上的数码管数码管位选和段选信号都是低电平有效。 位选信号根据需要的显示位数进行生成该实验所用的开发板可用6个位选信号它们用于选择要显示的数码管。 段选信号根据需要的显示内容进行生成它们用于控制数码管的七段LED灯以及小数点LED灯的亮灭状态该实验所用的开发板可用8个段选信号。 三、系统架构设计 本次实验有按键消抖模块、计数器模块、蜂鸣器模块、音符模块、数码管驱动模块 按键消抖模块将按键信号转化为稳定的有效信号 计数器模块通过输入的有效按键信号key3切换闹钟和电子时钟状态以及key1加key2减时位、分位、秒位的加减比对闹钟空间和电子时钟的时间数值若相等则传出一个蜂鸣器信号给音符模块,再将hour、min、sec数值输入进数码管驱动模块进行显示。 数码管驱动模块将计数器模块产生的时分秒显示出来以及key0切换时位、分位、秒位、空闲状态的切换。 音符模块接收到闹钟信号时将pwm波发给蜂鸣器发声模块持续5s 蜂鸣器模块接收到音符模块的pwm波发声 顶层模块统合所有模块。 四、模块说明 1模块端口信号列表 按键消抖模块key 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwirekey_in按键信号outputregkey_flag稳定按键信号 计数器模块counter 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwirekey_flag稳定按键信号outputwirehour小时数outputwiremin分钟数outputwiresec秒钟数outputwiremusic_flag闹钟信号 蜂鸣器乐谱模块(music) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwiremusic_flag闹钟到时信号outputregflag蜂鸣器发声信号 蜂鸣器发声模块(beep) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwireflag控制蜂鸣器发声信号outputregbeep蜂鸣器发声信号 数码管驱动模块(seg_driver) 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwirehour小时数inputwiremin分钟数inputwiresec秒钟数inputwirekey_flag稳定按键信号outputregseg数码管段选信号outputregsel数码管位选信号 顶层模块top 端口信号信号类型信号名称信号作用inputwireclk时钟信号inputwirerst_n复位信号inputwirekey_in按键信号outputwiresel数码管位选信号outputwirebeep蜂鸣器发声信号outputwireseg数码管段选信号 2状态转移图 闹钟空间时分秒位也有相同的加一减一这里本人偷懒了没有画全。 3时序图 五、仿真波形图 无仿真波形 六、引脚分配 tcl引脚分配文件 # Copyright (C) 2018 Intel Corporation. All rights reserved. # Your use of Intel Corporations design tools, logic functions # and other software and tools, and its AMPP partner logic # functions, and any output files from any of the foregoing # (including device programming or simulation files), and any # associated documentation or information are expressly subject # to the terms and conditions of the Intel Program License # Subscription Agreement, the Intel Quartus Prime License Agreement, # the Intel FPGA IP License Agreement, or other applicable license # agreement, including, without limitation, that your use is for # the sole purpose of programming logic devices manufactured by # Intel and sold by Intel or its authorized distributors. Please # refer to the applicable agreement for further details.# Quartus Prime Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition # File: D:\intelFPGA\code\dig_clock\tcl\dig_clock.tcl # Generated on: Mon Aug 07 16:06:21 2023package require ::quartus::projectset_location_assignment PIN_A5 -to seg[7] set_location_assignment PIN_B8 -to seg[6] set_location_assignment PIN_A7 -to seg[5] set_location_assignment PIN_B6 -to seg[4] set_location_assignment PIN_B5 -to seg[3] set_location_assignment PIN_A6 -to seg[2] set_location_assignment PIN_A8 -to seg[1] set_location_assignment PIN_B7 -to seg[0] set_location_assignment PIN_E1 -to clk set_location_assignment PIN_A4 -to sel[0] set_location_assignment PIN_B4 -to sel[1] set_location_assignment PIN_A3 -to sel[2] set_location_assignment PIN_B3 -to sel[3] set_location_assignment PIN_A2 -to sel[4] set_location_assignment PIN_B1 -to sel[5] set_location_assignment PIN_E15 -to key_in[0] set_location_assignment PIN_E16 -to key_in[1] set_location_assignment PIN_M16 -to key_in[2] set_location_assignment PIN_M15 -to key_in[3] set_location_assignment PIN_J1 -to beep 七、代码编写 按键消抖模块key module key (input wire clk,input wire rst_n,input wire key_in,output reg key_out,output reg key_flag );parameter CNT_MAX 20d999_999; //20ms计数reg [19:0] cnt_20ms; //reg key_flag; //20ms消抖 always(posedge clk or negedge rst_n)if(!rst_n)cnt_20ms20b0;else if(key_in1b1)cnt_20ms20d0;else if(cnt_20msCNT_MAX)cnt_20msCNT_MAX;elsecnt_20mscnt_20ms20d1; //取单个脉冲信号 always(posedge clk or negedge rst_n)if(!rst_n)key_flag1b0;else if(cnt_20ms(CNT_MAX-20d1))key_flag1b1;elsekey_flag1b0; //有效长信号 always (posedge clk or negedge rst_n)beginif(!rst_n)beginkey_out 1b0;endelse if(key_flag 1b1)key_out ~key_out;elsekey_out key_out; endendmodule计数器模块counter module counter (input wire clk ,input wire rst_n ,input wire [3:0] key_flag,output wire [4:0] hour ,output wire [5:0] min ,output wire [5:0] sec ,output wire music_flag );reg [8:0] cnt_min ;//存放分钟加减 reg [8:0] cnt_sec ;//存放秒钟加减 parameter MAXDAY 17d86400;//24小时 24*60*60 parameter SEC 26d50_000_000;//1s reg [5:0] c_state;//现态,数码管选位加减 reg [5:0] n_state;//次态,数码管选位加减 parameter IDLE 6d0, //空闲状态S1 6d1, //数码管时位S2 6d2, //数码管分位S3 6d3, //数码管秒位A1 6d4, //时位加M1 6d5, //时位减A2 6d6, //分位加M2 6d7, //分位减A3 6d8, //秒位减M3 6d9, //秒位减R1 6d10, //闹钟功能空间 P1 6d11, //数码管时位P2 6d12, //数码管分位P3 6d13, //数码管秒位A4 6d14, //时位加M4 6d15, //时位减A5 6d16, //分位加M5 6d17, //分位减A6 6d18, //秒位减M6 6d19; //秒位减 reg [25:0] cnt_1s ; reg [25:0] cnt_1s_r ; reg [16:0] cnt_day ; reg [16:0] cnt_day_r ; reg [31:0] cnt_10ms ; wire [4:0] hour_r ;//存放时钟加减 wire [5:0] min_r ; wire [5:0] sec_r ; parameter MAX_10ms 32d499_999; //10ms计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_10ms 26d0;endelse if (cnt_10ms MAX_10ms) begincnt_10ms 26d0;endelse begincnt_10ms cnt_10ms 1d1;end end //1秒计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_1s 26d0;endelse if (cnt_1s SEC - 1d1) begincnt_1s 26d0;endelse begincnt_1s cnt_1s 1d1;end end //1天计时器_电子时钟 always(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_day 17d0;end else if(cnt_day MAXDAY - 1d1)begincnt_day 17d0;end else if( cnt_1s SEC -1d1)begincnt_day cnt_day 1d1;endelse if(n_state A1) begincnt_day cnt_day 17d3600;endelse if(n_state M1) begincnt_day cnt_day - 17d3600;endelse if (c_state S1 key_flag[2] (cnt_day / 3600) 0) begincnt_day cnt_day 17d82800;endelse if(n_state A2) begincnt_day cnt_day 17d60;endelse if(n_state M2) begincnt_day cnt_day - 17d60;endelse if(n_state A3) begincnt_day cnt_day 17d1;endelse if(n_state M3) begincnt_day cnt_day - 17d1;endelse begincnt_day cnt_day;end end //1天计时器_r_闹钟空间 always(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_day_r 17d0;end else if(cnt_day_r MAXDAY - 1d1)begincnt_day_r 17d0;end else if(n_state A4) begincnt_day_r cnt_day_r 17d3600;endelse if(n_state M4) begincnt_day_r cnt_day_r - 17d3600;endelse if (key_flag[2] (cnt_day_r / 3600) 0) begincnt_day_r cnt_day_r 17d82800;endelse if(n_state A5) begincnt_day_r cnt_day_r 17d60;endelse if(n_state M5) begincnt_day_r cnt_day_r - 17d60;endelse if(n_state A6) begincnt_day_r cnt_day_r 17d10;endelse if(n_state M6) begincnt_day_r cnt_day_r - 17d10;endelse begincnt_day_r cnt_day_r;end end //如果处于闹钟空间则输出闹钟空间的值否则输出电子时钟的值 assign hour (c_state R1||c_state P1||c_state P2||c_state P3)?hour_r:cnt_day / 3600; assign min (c_state R1||c_state P1||c_state P2||c_state P3)?min_r:cnt_day % 3600 / 60; assign sec (c_state R1||c_state P1||c_state P2||c_state P3)?sec_r:cnt_day % 3600 % 60;assign hour_r cnt_day_r /3600; assign min_r cnt_day_r % 3600 / 60; assign sec_r cnt_day_r % 3600 % 60; //如果闹钟空间的值除了零以外的时候和电子时钟的值相等则输出音乐信号给乐谱模块 assign music_flag (cnt_day cnt_day_rcnt_day_r ! 0)?1:0; //数码管选位状态机,第一段 always (posedge clk or negedge rst_n) beginif (!rst_n) beginc_state IDLE;endelse beginc_state n_state;end end //数码管选位状态机,第二段 always (*) begincase (c_state)//空闲状态IDLE :beginif (key_flag[0]) beginn_state S1;endelse if (key_flag[3]) beginn_state R1;endelse beginn_state IDLE;endend//闹钟状态R1 :beginif (key_flag[0]) beginn_state P1;endelse if (key_flag[3]) beginn_state IDLE;endelse beginn_state R1;endend//换位状态时位S1 :beginif (key_flag[0]) beginn_state S2;endelse if (key_flag[1]) beginn_state A1;endelse if (key_flag[2]) beginn_state M1;endelse beginn_state S1;endend //换位状态分位S2 :beginif (key_flag[0]) beginn_state S3;endelse if (key_flag[1]) beginn_state A2;endelse if (key_flag[2]) beginn_state M2;endelse beginn_state S2;endend//换位状态秒位 S3 :beginif (key_flag[0]) beginn_state IDLE;endelse if (key_flag[1]) beginn_state A3;endelse if (key_flag[2]) beginn_state M3;endelse beginn_state S3;endend//时位加一A1 :beginif (c_state A1) beginn_state S1;endelse beginn_state A1;endend//时位减一 M1 :beginif (c_state M1) beginn_state S1;endelse beginn_state M1;endend//分位加一A2 :beginif (c_state A2) beginn_state S2;endelse beginn_state A2;endend//分位减一 M2 :beginif (c_state M2) beginn_state S2;endelse beginn_state M2;endend//秒位加一A3 :beginif (c_state A3) beginn_state S3;endelse beginn_state A3;endend//秒位减一 M3 :beginif (c_state M3) beginn_state S3;endelse beginn_state M3;endend//闹钟空间时位P1 :beginif (key_flag[0]) beginn_state P2;endelse if (key_flag[1]) beginn_state A4;endelse if (key_flag[2]) beginn_state M4;endelse beginn_state P1;endend//闹钟空间分位 P2 :beginif (key_flag[0]) beginn_state P3;endelse if (key_flag[1]) beginn_state A5;endelse if (key_flag[2]) beginn_state M5;endelse beginn_state P2;endend//闹钟空间秒位 P3 :beginif (key_flag[0]) beginn_state R1;endelse if (key_flag[1]) beginn_state A6;endelse if (key_flag[2]) beginn_state M6;endelse beginn_state P3;endend//闹钟空间时位加一 A4 :beginif (c_state A4) beginn_state P1;endelse beginn_state A4;endend//闹钟空间时位减一 M4 :beginif (c_state M4) beginn_state P1;endelse beginn_state M4;endend//闹钟空间分位加一 A5 :beginif (c_state A5) beginn_state P2;endelse beginn_state A5;endend//闹钟空间分位减一 M5 :beginif (c_state M5) beginn_state P2;endelse beginn_state M5;endend//闹钟空间秒位加一 A6 :beginif (c_state A6) beginn_state P3;endelse beginn_state A6;endend//闹钟空间秒位减一 M6 :beginif (c_state M6) beginn_state P3;endelse beginn_state M6;endenddefault:n_state IDLE;endcase end endmodule蜂鸣器乐谱模块(music) module music (input clk,input rst_n,input [3:0] key_out,input music_flag,output reg flag );parameter MAX_0_3s 25d14_999_999; reg [31:0] cnt_0_3s; parameter MAX_1s 32d49_999_999; reg [31:0] cnt_1s ;//1秒计数器 parameter MAX_5s 32d5; reg [31:0] cnt_5s ;//1秒计数器parameter MAX_7 6d33;//乐谱 reg [15:0] cnt_7; //乐谱1寄存器 //parameter MAX_two_tiger 6d33; //reg [15:0] two_tiger;//乐谱2寄存器 //parameter MAX_300ms 25d14_999_999; //reg [31:0] cnt_300ms; reg [15:0] music_cnt;//音符音频计数器 wire[15:0] duty;//占空比 reg [15:0] music;//音符数据寄存器 reg music_delay;parameter DO 16d47750 ;//1 parameter RE 16d42250 ;//2 parameter MI 16d37900 ;//3 parameter FA 16d37550 ;//4 parameter SO 16d31850 ;//5 parameter LA 16d28400 ;//6 parameter XI 16d25400 ;//7 //1s计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_1s 1d0;endelse if (cnt_1s MAX_1s) begincnt_1s 1d0;endelse begincnt_1s cnt_1s 1;end end //5s计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_5s 1d0;endelse if (cnt_5s MAX_5s) begincnt_5s 1d0;endelse if (cnt_1s MAX_1s)begincnt_5s cnt_5s 1;end end always (posedge clk or negedge rst_n) beginif (!rst_n) beginmusic_delay 1d0;endelse if (cnt_5s MAX_5s) beginmusic_delay 1d0;endelse if (music_flag)beginmusic_delay 1d1;end end //0.3s计数器 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_0_3s 1d0;endelse if (cnt_0_3s MAX_0_3s) begincnt_0_3s 1d0;endelse begincnt_0_3s cnt_0_3s 1;end end //300ms计数器 //always (posedge clk or negedge rst_n) begin // if (!rst_n) begin // cnt_300ms 1d0; // end // else if (cnt_300ms MAX_300ms) begin // cnt_300ms 1d0; // end // else begin // cnt_300ms cnt_300ms 1; // end //end //音符频率计数器 always(posedge clk or negedge rst_n)beginif(!rst_n)beginmusic_cnt 16d0;end else if(music_cnt music)beginmusic_cnt 16d0;endelse beginmusic_cnt music_cnt 1d1;end end//乐谱1每隔0.5s音符切换 always (posedge clk or negedge rst_n) beginif (!rst_n) begincnt_7 1d0;endelse if (cnt_7 MAX_7 cnt_0_3s MAX_0_3s) begincnt_7 1d0;endelse if (cnt_0_3s MAX_0_3s) begincnt_7 cnt_7 1d1;endelse begincnt_7 cnt_7;end end//乐谱2的切换间隔为300ms //always (posedge clk or negedge rst_n) begin // if (!rst_n) begin // two_tiger 1d0; // end // else if (two_tiger MAX_two_tiger cnt_300ms MAX_300ms) begin // two_tiger 1d0; // end // else if (cnt_300ms MAX_0_5s) begin // two_tiger two_tiger 1d1; // end // else begin // two_tiger two_tiger; // end //end always (posedge clk or negedge rst_n) beginif (!rst_n) beginmusic 1d0;end//else if(key_out[1])begincase (cnt_7)6d0: music DO;6d1: music RE;6d2: music MI; 6d3: music DO; 6d4: music DO; 6d5: music RE; 6d6: music MI; 6d7: music DO; 6d8: music MI; 6d9: music FA; 6d10: music SO;6d11: music MI;6d12: music FA;6d13: music SO;6d14: music SO;6d15: music LA;6d16: music SO;6d17: music FA;6d18: music MI;6d19: music DO;6d20: music SO;6d21: music LA;6d22: music SO;6d23: music FA;6d24: music MI;6d25: music DO;6d26: music RE;6d27: music SO;6d28: music DO;6d29: music DO;6d30: music RE;6d31: music SO;6d32: music DO;6d33: music DO;default:music DO;endcase//end//else if(!key_out[1])begin// case(cnt_7)// 10d0: music DO ;// 10d1: music RE ;// 10d2: music MI ;// 10d3: music FA ;// 10d4: music SO ;// 10d5: music LA ;// 10d6: music XI ;// 10d7: music DO ;// 10d8: music RE ;// 10d9: music MI ;// 10d10: music FA ;// 10d11: music SO ;// 10d12: music LA ;// 10d13: music XI ;// 10d14: music DO ;// 10d15: music RE ;// 10d16: music MI ;// 10d17: music FA ;// 10d18: music SO ;// 10d19: music LA ;// 10d20: music XI ;// default: music DO;// endcase//end end assign duty music 1;//占空比50% always(posedge clk or negedge rst_n)beginif(!rst_n)beginflag 1b0;end else if (music_delay)beginflag (music_cnt duty) ? 1b1 : 1b0; endelse beginflag 1b0;end endendmodule蜂鸣器发声模块(beep) module beep (input clk,input rst_n,input flag,output reg beep );always (posedge clk or negedge rst_n) beginif (!rst_n) beginbeep 1b1; endelse if (flag) beginbeep 1b0;endelse beginbeep 1b1;end endendmodule数码管驱动模块(seg_driver) module seg_driver (input wire clk ,input wire rst_n ,input wire [4:0] hour ,input wire [5:0] min ,input wire [5:0] sec , input wire [3:0] key_flag,output reg [7:0] seg , //段选信号output reg [5:0] sel //位选信号);reg [8:0] cnt_num ; reg [19:0] cnt_delay ; reg [7:0] point ;//小数点 reg [5:0] c_state;//现态,数码管选位加减 reg [5:0] n_state;//次态,数码管选位加减 parameter IDLE 6d0, //空闲状态S1 6d1, //数码管时位S2 6d2, //数码管分位S3 6d3; //数码管秒位parameter MAX_1s 32d24_999_999; reg [31:0] cnt_1s ;//1秒计数器parameter CNT_DELAY_MAX 10d1000 ; parameter ZERO 8b1100_0000 ,ONE 8b1111_1001 ,TWO 8b1010_0100 ,THREE 8b1011_0000 ,FOUR 8b1001_1001 ,FIVE 8b1001_0010 ,SIX 8b1000_0010 ,SEVEN 8b1111_1000 ,EIGHT 8b1000_0000 ,NINE 8b1001_0000 ;//1s计数器 always (posedge clk or negedge rst_n) beginif(!rst_n)begincnt_1s 10d0;endelse if(cnt_1s MAX_1s)begincnt_1s 10d0;endelse begincnt_1s cnt_1s 1d1;end end //20us计数器 always (posedge clk or negedge rst_n) beginif(!rst_n)begincnt_delay 10d0;endelse if(cnt_delay CNT_DELAY_MAX - 1d1)begincnt_delay 10d0;endelse begincnt_delay cnt_delay 1d1;end end//该板块无法同时变化只能依次闪烁该方法为依次闪烁的间隔人肉眼无法判断 20us always (posedge clk or negedge rst_n) beginif (!rst_n) beginsel 6b111_110;endelse if (cnt_delay CNT_DELAY_MAX - 1d1) beginsel {sel[4:0],sel[5]};endelse beginsel sel ;end endalways (*) begin//若处于时位则相应的位选信号闪烁if (c_state S1) begincase (sel)6b111110:beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num hour / 10;end 6b111101: beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num hour % 10 10;end 6b111011: cnt_num min / 10;6b110111: cnt_num min % 10 10;6b101111: cnt_num sec / 10;6b011111: cnt_num sec % 10;default: cnt_num 4d0;endcaseend//若处于分位则相应的位选信号闪烁else if (c_state S2) begincase (sel)6b111110: cnt_num hour / 10;6b111101: cnt_num hour % 10 10;6b111011: beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num min / 10;end 6b110111: beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num min % 10 10;end6b101111: cnt_num sec / 10;6b011111: cnt_num sec % 10;default: cnt_num 4d0;endcaseend//若处于秒位则相应的位选信号闪烁else if (c_state S3) begincase (sel)6b111110: cnt_num hour / 10;6b111101: cnt_num hour % 10 10;6b111011: cnt_num min / 10;6b110111: cnt_num min % 10 10;6b101111: beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num sec / 10;end6b011111: beginif (cnt_1s MAX_1s/2) begincnt_num 9d20;endelse cnt_num sec % 10;enddefault: cnt_num 4d0;endcaseendelse begin //其他情况数码管正常显示 case (sel)6b111110: cnt_num hour / 10;6b111101: cnt_num hour % 10 10;6b111011: cnt_num min / 10;6b110111: cnt_num min % 10 10;6b101111: cnt_num sec / 10;6b011111: cnt_num sec % 10;default: cnt_num 4d0;endcaseend end//通过数字num解析出seg值 always (*) begincase (cnt_num)9d0:begin seg ZERO ; end9d1:begin seg ONE ; end9d2:begin seg TWO ; end9d3:begin seg THREE ; end9d4:begin seg FOUR ; end9d5:begin seg FIVE ; end9d6:begin seg SIX ; end9d7:begin seg SEVEN ; end9d8:begin seg EIGHT ; end9d9:begin seg NINE ; end9d10:begin seg {point[7],ZERO[6:0]} ; end9d11:begin seg {point[7],ONE[6:0]} ; end9d12:begin seg {point[7],TWO[6:0]} ; end9d13:begin seg {point[7],THREE[6:0]} ; end9d14:begin seg {point[7],FOUR[6:0]} ; end9d15:begin seg {point[7],FIVE[6:0]} ; end9d16:begin seg {point[7],SIX[6:0]} ; end9d17:begin seg {point[7],SEVEN[6:0]} ; end9d18:begin seg {point[7],EIGHT[6:0]} ; end9d19:begin seg {point[7],NINE[6:0]} ; end9d20:begin seg 8b11111111 ; enddefault: seg ZERO;endcase end//数码管选位状态机,第一段 always (posedge clk or negedge rst_n) beginif (!rst_n) beginc_state IDLE;endelse beginc_state n_state;end end //数码管选位状态机,第二段 always (*) begincase (c_state)//空闲状态IDLE :beginif (key_flag[0]) beginn_state S1;endelse beginn_state IDLE;endend//数码管时位S1 :beginif (key_flag[0]) beginn_state S2;endelse beginn_state S1;endend //数码管分位 S2 :beginif (key_flag[0]) beginn_state S3;endelse beginn_state S2;endend//数码管秒位 S3 :beginif (key_flag[0]) beginn_state IDLE;endelse beginn_state S3;endenddefault:n_state IDLE;endcase endendmodule顶层模块top module top(input wire clk,input wire rst_n,input wire [3:0] key_in,output wire [7:0] seg,output wire [5:0] sel,output wire beep ); wire [3:0] key_flag; wire [4:0] hour; wire [5:0] min; wire [5:0] sec; wire music_flag; wire flag;key u_key//key_fsm (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[0]) ,/* output reg */ .key_flag (key_flag[0]) );key u_key1 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[1]) , /* output reg */ .key_flag (key_flag[1]) );key u_key2 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[2]) , /* output reg */ .key_flag (key_flag[2]) );key u_key3 (/* input wire */ .clk (clk ) , /* input wire */ .rst_n (rst_n ) , /* input wire */ .key_in (key_in[3]) , /* output reg */ .key_flag (key_flag[3]) ); beep u_beep (/* input */.clk (clk ),/* input */.rst_n(rst_n),/* input */.flag (flag ),/* output */.beep (beep ) ); music u_music(/* input */.clk (clk ) ,/* input */.rst_n (rst_n ) ,/* input */.key_out (key_out ) ,/* input */.music_flag(music_flag) ,/* output */.flag(flag) ); counter u_counter(.clk (clk) ,.rst_n (rst_n) ,.hour (hour) ,.key_flag (key_flag),.music_flag (music_flag),.min (min) ,.sec (sec) ); seg_driver u_seg_driver(.clk (clk) ,.rst_n (rst_n) ,.hour (hour) ,.key_flag (key_flag),.min (min) ,.sec (sec) ,.seg (seg) ,.sel (sel) ); endmodule八、总结 虽然该代码仍有许多不足但如果对各位有所帮助还请各位不要吝啬手中的点赞和关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设方法冫金手指排名26中英文自助网站建设

再谈协议HTTP协议认识URLurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见HeaderHTTP周边会话保持 再谈协议 协议是一种 “约定”. socket api的接口,在读写数据时,都是按 “字符串” 的方式来发送接收的(tcp是以字节流的方式发送的&am…

郑州网站服务公司做 了一个 家教 网站

零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

空间手机版网站目录建设进wordpress根目录

从零实现的浏览器Web脚本 在之前我们介绍了从零实现Chrome扩展,而实际上浏览器级别的扩展整体架构非常复杂,尽管当前有统一规范但不同浏览器的具体实现不尽相同,并且成为开发者并上架Chrome应用商店需要支付5$的注册费,如果我们只…

微信网站的建立宿迁公司企业网站建设

C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE: typedef unsigned char BYTE;在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如&#xff1…

唐山有制作网站的没哪个网站可以做艺术字

这些老板们过的悠哉游哉,大富大贵没有,达到中产,活得舒服,没毛病。 企业官网每年需要交维护费主要是因为以下几个原因: 网站服务器和域名费用:企业官网需要通过服务器进行托管和访问,同时需要…

桂林临桂区建设局网站营销策划方案模板

今日份题目: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 示例 给定二叉树: [3,9,20,null,null,15,7…

网站开发的挑战扬州公司做网站

自动并行计算 异步计算 默认情况下,PyTorch中的 GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队但不一定会在稍后立即执行。这就使我们可以并行更多的计算,包括 CPU 或其他 GPU 上的操作。 一般情况下&…

网站访问量数据郑州网站优化外包顾问

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较一、技术背景…

网站的层次石家庄建设学校

目录 网络层概述 网络层提供的两种服务 ①面向连接的虚电路服务 ②无连接的数据报服务 IPv4 路由选择 路由器转发IP数据报 静态路由选择 动态路由选择 路由信息协议RIP 开放最短路径优先OSPF(Open Shortest Path First) 内部网关协议IGP&…

兴业大街网站建设上海专业网站建设咨询

解析RocketMQ:高性能分布式消息队列的原理与应用 引言 什么是消息队列 消息队列是一种消息传递机制,用于在应用程序和系统之间传递消息,实现解耦和异步通信。它通过将消息发送到一个中间代理(消息队列),…

保险网站程序源码网店美工的定义

旅行商问题(Travelling Salesman Problem,简称TSP)是组合优化中的一个经典问题。问题的目标是找到最短可能的路径,让旅行商从一个城市出发,经过所有其他城市恰好一次,然后回到起始城市。 TSP是一个NP-hard…

网站开发企业需要什么资质seo移动端排名优化

经常有人问,如何设置局部代理IP,如何设置全局代理IP,今天我们一起来看看。何谓局部代理IP,顾名思义,改变局部的IP,不影响其他程序软件运行的使用IP;所谓全局代理IP,就是改变整个客户…

网站怎么增加代码市场调研报告模板

一、验签的背景 在网络发展快速的过程中,总是会忽略接口数据安全问题,进行验签则能够在一定程度上能够防刷,数据篡改。 二、什么是加签验签 加签验签, 发送消息方,对消息加签名; 接受消息方&#xff0…

网站管理系统有哪些wordpress有什么缺点

SQL过程SQL过程是实现对数据集或关系数据库的表进行操作的过程,对数据集或关系数据库的表进行查询、修改、创建表、删除数据、插入数据和更新数据等功能。提现了SAS对大型数据库管理系统通用的SQL语言支持。SQL过程语法Proc sql ;数据操纵语句;quit;数据操纵语句&am…

网站优化做些什么wordpress自己创建数据库

目录 一、要求 二、代码 三、结果 一、要求 实现n的阶乘&#xff0c;已知n&#xff01;1*2*3*…*n 二、代码 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {//初始化变量n为要求的几阶&#xff0c;jiecheng存储结果的&#xff0c;初始化为1…

网站地图表现形式国际时事新闻最新

LeetCode-62. 不同路径【数学 动态规划 组合数学】 题目描述&#xff1a;解题思路一&#xff1a;动态规划&#xff0c;动规五部曲解题思路二&#xff1a;动态规划&#xff08;版本二&#xff09;解题思路三&#xff1a;数论 题目描述&#xff1a; 一个机器人位于一个 m x n 网…

怎么利用爬虫技术 提高网站排名深圳vi设计工作室

家用充电桩远程监控安全管理系统解决方案 在当今电动汽车日益普及的背景下&#xff0c;家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控&#xff0c;一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先…

加气站类型的网站建设公司新产品开发项目属于公司创业吗

CAN FD作为一种性能可靠、功能完善、成本合理的远程网络通信控制方式&#xff0c;集成CAN/CAN FD控制器的MCU、核心板、工控板及物联网解决方案已经被广泛应用到各个控制系统中&#xff0c;例如汽车电子、自动控制、智能大厦、电力系统、能源物流、智慧改装等各个领域。 中国经…

西安有什么网站织梦网站防黑怎么做

方法一&#xff1a;使用MCU的串口 这是最古老也是最简单的方法。 电脑上面插一个USB转TTL&#xff0c;然后与MCU的UART_RX/UART_TX/GND连接起来。PC端再打开一个串口调试助手。两边的波特率一致&#xff0c;就可以收到MCU发过来的打印信息了。 方法二&#xff1a;使用JLink仿…

创新的营销型网站巢湖自助建站系统

科目编号&#xff1a;0599 座位号 2017-2018学年度第二学期期末考试 工程造价管理基础理论与相关法规 试题 2018年 7 月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题4分&#xff0c;共计40分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题…