2019-02-18 回答

去年做过这个,给你我的程序你参考看看,能调的通。

1.设计要求

设计一个数字时钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且设置的时间显示要求闪烁。

2.设计原理

计数器在正常工作下是对1hz的频率计数,在调整时间状态下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决定调整时、分、秒;当置数键按下时,表示相应的调整块要加一,如果对小时调整时,显示时间的led数码管将闪烁且当置数按键按下时,相应的小时显示要加一。显示时间的led数码管均用动态扫描显示来实现。其原理图如9-7-1所示。

module clock(seg7,scan,clk,clr,en,mode,inc);

output[6:0] seg7;

output[5:0] scan;

input clk; //时钟输入20mhz

input clr; //清零端

input en; //暂停信号

input mode; //控制信号,用于选择模式

input inc; //置数信号

reg[6:0] seg7; //7段显示控制信号(abcdefg)

reg[5:0] scan; //数码管地址选择信号

reg[1:0] state; //定义4种状态

reg[3:0] qhh,qhl,qmh,qml,qsh,qsl; //小时、分、秒的高位和低位

reg[3:0] data;

reg[2:0] cnt; //扫描数码管的计数器

reg clk1khz,clk1hz,clk2hz; //1khz、1hz、2hz的分频信号

reg[2:0] blink; //闪烁信号

reg inc_reg;

reg[7:0] sec,min;

reg[7:0] hour;

parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;

reg[13:0] count1;

reg[8:0] count2;

reg[8:0] count3;

//-----------------------------1khz分频,用于扫描数码管地址--------

always @(posedge clk)

begin

if(count1=='d10000)

begin clk1khz<=~clk1khz;count1<=0; end

else

begin count1<=count1+1; end

end

//---------------------- 1hz分频,用于计时-----------------------------

always @(posedge clk1khz)

begin

if(count2=='d500)

begin clk1hz<=~clk1hz;count2<=0; end

else

begin count2<=count2+1; end

if(count3=='d250) //2hz分频,用于数码管闪烁

begin clk2hz<=~clk2hz;count3<=0; end

else

begin count3<=count3+1; end

if(cnt=='d5) //数码管动态扫描计数

begin cnt<='d0; end

else

begin cnt<=cnt+1; end

end

//------------------------- 模式转换-------------------------

always @(posedge mode)

begin

if(clr)

begin state<=state0; end

else

begin state<=state+1; end

end

//-------------------------状态控制-----------------------------

always @(posedge clk1hz)

begin

if(en)

begin hour<=hour;

min<=min;

sec<=sec;

end

else if(clr)

begin hour<=0;

min<=0;

sec<=0;

end

else

begin

case(state)

state0:begin //模式0,正常计时

if(sec==8'd59)

begin sec<='d0;

if(min==8'd59)

begin min<='d0;

if(hour==8'd23)

begin hour<=8'd0; end

else

begin hour<=hour+1; end

end

else

begin min<=min+1; end

end

else

begin sec<=sec+1; end

end

state1:begin //模式1,设定小时时间

if(inc)

begin

if(!inc_reg)

begin inc_reg<=1;

if(hour==8'd23)

begin hour<=8'd0; end

else

begin hour<=hour+1; end

end

end

else

begin inc_reg<=0; end

end

state2:begin //模式2,设定分钟时间

if(inc)

begin

if(!inc_reg)

begin inc_reg<=1;

if(min==8'd59)

begin min<=8'd0; end

else

begin min<=min+1; end

end

end

else

begin inc_reg<=0; end

end

state3:begin //模式3,设定秒钟时间

if(inc)

begin

if(!inc_reg)

begin inc_reg<=1;

if(sec==8'd59)

begin sec<=8'd0; end

else

begin sec<=sec+1; end

end

end

else

begin inc_reg<=0; end

end

endcase

end

end

//--------------------------------当进行时间设定时,令数码管闪烁-----------------------

always @(state,clk2hz)

begin

case(state)

state0:blink[2:0]<='b111;

state1:blink[2]<=clk2hz;

state2:blink[1]<=clk2hz;

state3:blink[0]<=clk2hz;

default:blink[2:0]<='bx;

endcase

end

//--------------------------秒计数的十进制转bcd码---------------------------

always @(sec)

begin

case(sec[7:0])

8'd0:begin qsh[3:0]<='b0000;qsl[3:0]<='b0000; end

8'd1:begin qsh[3:0]<='b0000;qsl[3:0]<='b0001; end

8'd2:begin qsh[3:0]<='b0000;qsl[3:0]<='b0010; end

8'd3:begin qsh[3:0]<='b0000;qsl[3:0]<='b0011; end

8'd4:begin qsh[3:0]<='b0000;qsl[3:0]<='b0100; end

8'd5:begin qsh[3:0]<='b0000;qsl[3:0]<='b0101; end

8'd6:begin qsh[3:0]<='b0000;qsl[3:0]<='b0110; end

8'd7:begin qsh[3:0]<='b0000;qsl[3:0]<='b0111; end

8'd8:begin qsh[3:0]<='b0000;qsl[3:0]<='b1000; end

8'd9:begin qsh[3:0]<='b0000;qsl[3:0]<='b1001; end

8'd10:begin qsh[3:0]<='b0001;qsl[3:0]<='b0000; end

8'd11:begin qsh[3:0]<='b0001;qsl[3:0]<='b0001; end

8'd12:begin qsh[3:0]<='b0001;qsl[3:0]<='b0010; end

8'd13:begin qsh[3:0]<='b0001;qsl[3:0]<='b0011; end

8'd14:begin qsh[3:0]<='b0001;qsl[3:0]<='b0100; end

8'd15:begin qsh[3:0]<='b0001;qsl[3:0]<='b0101; end

8'd16:begin qsh[3:0]<='b0001;qsl[3:0]<='b0110; end

8'd17:begin qsh[3:0]<='b0001;qsl[3:0]<='b0111; end

8'd18:begin qsh[3:0]<='b0001;qsl[3:0]<='b1000; end

8'd19:begin qsh[3:0]<='b0001;qsl[3:0]<='b1001; end

8'd20:begin qsh[3:0]<='b0010;qsl[3:0]<='b0000; end

8'd21:begin qsh[3:0]<='b0010;qsl[3:0]<='b0001; end

8'd22:begin qsh[3:0]<='b0010;qsl[3:0]<='b0010; end

8'd23:begin qsh[3:0]<='b0010;qsl[3:0]<='b0011; end

8'd24:begin qsh[3:0]<='b0010;qsl[3:0]<='b0100; end

8'd25:begin qsh[3:0]<='b0010;qsl[3:0]<='b0101; end

8'd26:begin qsh[3:0]<='b0010;qsl[3:0]<='b0110; end

8'd27:begin qsh[3:0]<='b0010;qsl[3:0]<='b0111; end

8'd28:begin qsh[3:0]<='b0010;qsl[3:0]<='b1000; end

8'd29:begin qsh[3:0]<='b0010;qsl[3:0]<='b1001; end

8'd30:begin qsh[3:0]<='b0011;qsl[3:0]<='b0000; end

8'd31:begin qsh[3:0]<='b0011;qsl[3:0]<='b0001; end

8'd32:begin qsh[3:0]<='b0011;qsl[3:0]<='b0010; end

8'd33:begin qsh[3:0]<='b0011;qsl[3:0]<='b0011; end

8'd34:begin qsh[3:0]<='b0011;qsl[3:0]<='b0100; end

8'd35:begin qsh[3:0]<='b0011;qsl[3:0]<='b0101; end

8'd36:begin qsh[3:0]<='b0011;qsl[3:0]<='b0110; end

8'd37:begin qsh[3:0]<='b0011;qsl[3:0]<='b0111; end

8'd38:begin qsh[3:0]<='b0011;qsl[3:0]<='b1000; end

8'd39:begin qsh[3:0]<='b0011;qsl[3:0]<='b1001; end

8'd40:begin qsh[3:0]<='b0100;qsl[3:0]<='b0000; end

8'd41:begin qsh[3:0]<='b0100;qsl[3:0]<='b0001; end

8'd42:begin qsh[3:0]<='b0100;qsl[3:0]<='b0010; end

8'd43:begin qsh[3:0]<='b0100;qsl[3:0]<='b0011; end

8'd44:begin qsh[3:0]<='b0100;qsl[3:0]<='b0100; end

8'd45:begin qsh[3:0]<='b0100;qsl[3:0]<='b0101; end

8'd46:begin qsh[3:0]<='b0100;qsl[3:0]<='b0110; end

8'd47:begin qsh[3:0]<='b0100;qsl[3:0]<='b0111; end

8'd48:begin qsh[3:0]<='b0100;qsl[3:0]<='b1000; end

8'd49:begin qsh[3:0]<='b0100;qsl[3:0]<='b1001; end

8'd50:begin qsh[3:0]<='b0101;qsl[3:0]<='b0000; end

8'd51:begin qsh[3:0]<='b0101;qsl[3:0]<='b0001; end

8'd52:begin qsh[3:0]<='b0101;qsl[3:0]<='b0010; end

8'd53:begin qsh[3:0]<='b0101;qsl[3:0]<='b0011; end

8'd54:begin qsh[3:0]<='b0101;qsl[3:0]<='b0100; end

8'd55:begin qsh[3:0]<='b0101;qsl[3:0]<='b0101; end

8'd56:begin qsh[3:0]<='b0101;qsl[3:0]<='b0110; end

8'd57:begin qsh[3:0]<='b0101;qsl[3:0]<='b0111; end

8'd58:begin qsh[3:0]<='b0101;qsl[3:0]<='b1000; end

8'd59:begin qsh[3:0]<='b0101;qsl[3:0]<='b1001; end

default: begin qsh[3:0]<='bx;qsl[3:0]<='bx; end

endcase

end

//---------------------------分计数的十进制转bcd码--------------------

always @(min)

begin

case(min[7:0])

8'd0:begin qmh[3:0]<='b0000;qml[3:0]<='b0000; end

8'd1:begin qmh[3:0]<='b0000;qml[3:0]<='b0001; end

8'd2:begin qmh[3:0]<='b0000;qml[3:0]<='b0010; end

8'd3:begin qmh[3:0]<='b0000;qml[3:0]<='b0011; end

8'd4:begin qmh[3:0]<='b0000;qml[3:0]<='b0100; end

8'd5:begin qmh[3:0]<='b0000;qml[3:0]<='b0101; end

8'd6:begin qmh[3:0]<='b0000;qml[3:0]<='b0110; end

8'd7:begin qmh[3:0]<='b0000;qml[3:0]<='b0111; end

8'd8:begin qmh[3:0]<='b0000;qml[3:0]<='b1000; end

8'd9:begin qmh[3:0]<='b0000;qml[3:0]<='b1001; end

8'd10:begin qmh[3:0]<='b0001;qml[3:0]<='b0000; end

8'd11:begin qmh[3:0]<='b0001;qml[3:0]<='b0001; end

8'd12:begin qmh[3:0]<='b0001;qml[3:0]<='b0010; end

8'd13:begin qmh[3:0]<='b0001;qml[3:0]<='b0011; end

8'd14:begin qmh[3:0]<='b0001;qml[3:0]<='b0100; end

8'd15:begin qmh[3:0]<='b0001;qml[3:0]<='b0101; end

8'd16:begin qmh[3:0]<='b0001;qml[3:0]<='b0110; end

8'd17:begin qmh[3:0]<='b0001;qml[3:0]<='b0111; end

8'd18:begin qmh[3:0]<='b0001;qml[3:0]<='b1000; end

8'd19:begin qmh[3:0]<='b0001;qml[3:0]<='b1001; end

8'd20:begin qmh[3:0]<='b0010;qml[3:0]<='b0000; end

8'd21:begin qmh[3:0]<='b0010;qml[3:0]<='b0001; end

8'd22:begin qmh[3:0]<='b0010;qml[3:0]<='b0010; end

8'd23:begin qmh[3:0]<='b0010;qml[3:0]<='b0011; end

8'd24:begin qmh[3:0]<='b0010;qml[3:0]<='b0100; end

8'd25:begin qmh[3:0]<='b0010;qml[3:0]<='b0101; end

8'd26:begin qmh[3:0]<='b0010;qml[3:0]<='b0110; end

8'd27:begin qmh[3:0]<='b0010;qml[3:0]<='b0111; end

8'd28:begin qmh[3:0]<='b0010;qml[3:0]<='b1000; end

8'd29:begin qmh[3:0]<='b0010;qml[3:0]<='b1001; end

8'd30:begin qmh[3:0]<='b0011;qml[3:0]<='b0000; end

8'd31:begin qmh[3:0]<='b0011;qml[3:0]<='b0001; end

8'd32:begin qmh[3:0]<='b0011;qml[3:0]<='b0010; end

8'd33:begin qmh[3:0]<='b0011;qml[3:0]<='b0011; end

8'd34:begin qmh[3:0]<='b0011;qml[3:0]<='b0100; end

8'd35:begin qmh[3:0]<='b0011;qml[3:0]<='b0101; end

8'd36:begin qmh[3:0]<='b0011;qml[3:0]<='b0110; end

8'd37:begin qmh[3:0]<='b0011;qml[3:0]<='b0111; end

8'd38:begin qmh[3:0]<='b0011;qml[3:0]<='b1000; end

8'd39:begin qmh[3:0]<='b0011;qml[3:0]<='b1001; end

8'd40:begin qmh[3:0]<='b0100;qml[3:0]<='b0000; end

8'd41:begin qmh[3:0]<='b0100;qml[3:0]<='b0001; end

8'd42:begin qmh[3:0]<='b0100;qml[3:0]<='b0010; end

8'd43:begin qmh[3:0]<='b0100;qml[3:0]<='b0011; end

8'd44:begin qmh[3:0]<='b0100;qml[3:0]<='b0100; end

8'd45:begin qmh[3:0]<='b0100;qml[3:0]<='b0101; end

8'd46:begin qmh[3:0]<='b0100;qml[3:0]<='b0110; end

8'd47:begin qmh[3:0]<='b0100;qml[3:0]<='b0111; end

8'd48:begin qmh[3:0]<='b0100;qml[3:0]<='b1000; end

8'd49:begin qmh[3:0]<='b0100;qml[3:0]<='b1001; end

8'd50:begin qmh[3:0]<='b0101;qml[3:0]<='b0000; end

8'd51:begin qmh[3:0]<='b0101;qml[3:0]<='b0001; end

8'd52:begin qmh[3:0]<='b0101;qml[3:0]<='b0010; end

8'd53:begin qmh[3:0]<='b0101;qml[3:0]<='b0011; end

8'd54:begin qmh[3:0]<='b0101;qml[3:0]<='b0100; end

8'd55:begin qmh[3:0]<='b0101;qml[3:0]<='b0101; end

8'd56:begin qmh[3:0]<='b0101;qml[3:0]<='b0110; end

8'd57:begin qmh[3:0]<='b0101;qml[3:0]<='b0111; end

8'd58:begin qmh[3:0]<='b0101;qml[3:0]<='b1000; end

8'd59:begin qmh[3:0]<='b0101;qml[3:0]<='b1001; end

default:begin qmh[3:0]<='bx;qml[3:0]<='bx; end

endcase

end

//----------------------------小时计数的十进制转bcd码------------------------

always @(hour)

begin

case(hour)

8'd0:begin qhh[3:0]<='b0000;qhl[3:0]<='b0000; end

8'd1:begin qhh[3:0]<='b0000;qhl[3:0]<='b0001; end

8'd2:begin qhh[3:0]<='b0000;qhl[3:0]<='b0010; end

8'd3:begin qhh[3:0]<='b0000;qhl[3:0]<='b0011; end

8'd4:begin qhh[3:0]<='b0000;qhl[3:0]<='b0100; end

8'd5:begin qhh[3:0]<='b0000;qhl[3:0]<='b0101; end

8'd6:begin qhh[3:0]<='b0000;qhl[3:0]<='b0110; end

8'd7:begin qhh[3:0]<='b0000;qhl[3:0]<='b0111; end

8'd8:begin qhh[3:0]<='b0000;qhl[3:0]<='b1000; end

8'd9:begin qhh[3:0]<='b0000;qhl[3:0]<='b1001; end

8'd10:begin qhh[3:0]<='b0001;qhl[3:0]<='b0000; end

8'd11:begin qhh[3:0]<='b0001;qhl[3:0]<='b0001; end

8'd12:begin qhh[3:0]<='b0001;qhl[3:0]<='b0010; end

8'd13:begin qhh[3:0]<='b0001;qhl[3:0]<='b0011; end

8'd14:begin qhh[3:0]<='b0001;qhl[3:0]<='b0100; end

8'd15:begin qhh[3:0]<='b0001;qhl[3:0]<='b0101; end

8'd16:begin qhh[3:0]<='b0001;qhl[3:0]<='b0110; end

8'd17:begin qhh[3:0]<='b0001;qhl[3:0]<='b0111; end

8'd18:begin qhh[3:0]<='b0001;qhl[3:0]<='b1000; end

8'd19:begin qhh[3:0]<='b0001;qhl[3:0]<='b1001; end

8'd20:begin qhh[3:0]<='b0010;qhl[3:0]<='b0000; end

8'd21:begin qhh[3:0]<='b0010;qhl[3:0]<='b0001; end

8'd22:begin qhh[3:0]<='b0010;qhl[3:0]<='b0010; end

8'd23:begin qhh[3:0]<='b0010;qhl[3:0]<='b0011; end

default:begin qhh[3:0]<='bx;qhl[3:0]<='bx; end

endcase

end

//------------------------------数码管动态扫描-------------------------------------

always @(cnt,qhh,qhl,qmh,qml,qsh,qsl,blink)

begin

case(cnt)

3'b000:begin data[3:0]<=qsl[3:0];scan[5:0]<='b000001&{6{blink[0]}}; end

3'b001:begin data[3:0]<=qsh[3:0];scan[5:0]<='b000010&{6{blink[0]}}; end

3'b010:begin data[3:0]<=qml[3:0];scan[5:0]<='b000100&{6{blink[1]}}; end

3'b011:begin data[3:0]<=qmh[3:0];scan[5:0]<='b001000&{6{blink[1]}}; end

3'b100:begin data[3:0]<=qhl[3:0];scan[5:0]<='b010000&{6{blink[2]}}; end

3'b101:begin data[3:0]<=qhh[3:0];scan[5:0]<='b100000&{6{blink[2]}}; end

default:begin data<='bx;scan<='bx; end

endcase

end

//-----------------------------------7段译码----------------------------------------

always @(data)

begin

case(data[3:0])

4'b0000:seg7[6:0]=7'b1111110;

4'b0001:seg7[6:0]=7'b0110000;

4'b0010:seg7[6:0]=7'b1101101;

4'b0011:seg7[6:0]=7'b1111001;

4'b0100:seg7[6:0]=7'b0110011;

4'b0101:seg7[6:0]=7'b1011011;

4'b0110:seg7[6:0]=7'b1011111;

4'b0111:seg7[6:0]=7'b1110000;

4'b1000:seg7[6:0]=7'b1111111;

4'b1001:seg7[6:0]=7'b1111011;

default:seg7[6:0]=7'b0000000;

endcase

end

endmodule

具体的内容请参考周润景老师的那本书。

hdl四位二进制计数器_用Verilog HDL设计一个4位BCD码计数器相关推荐

  1. 74ls390设计任意进制计数器_异步FIFO:设计原理及Verliog源码

    1.  异步FIFO的概念 异步FIFO为读取与写入采用不同的时钟,使用异步FIFO用于在不同的时钟域传输数据,主要用于跨时钟域传输多bit数据. 2.  异步FIFO的设计难点 同步异步信号,避免亚 ...

  2. HDLBits 系列(18) BCD码计数器的设计

    目录 原题复现 审题 我的设计 原题复现 先给出原题: Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit i ...

  3. logisim,quartus实现模为60的BCD码计数器

    一.分析:利用封装的74161完成带有异步复位端的模6和模10计数器,然后级联构成模为60的BCD码计数器: ​ 由74161功能表可知要构成模6计数器和模10计数器,可以采用同步置数法:当达到需要的 ...

  4. 单片机(keil c51):BCD码转化为二进制(以4位BCD码举例,依此类推)

    BCD码转化为二进制 原理: 一个BCD码表示0~9,所以一个BCD码的取值范围为0000~1001. 在机器里所有的数都是按照二进制存入的,所以只需将BCD码转换为十进制即可. 4位BCD码可以表示 ...

  5. 【 Verilog HDL 】不同抽象级别的Verilog HDL模型之门级结构描述

    本博文参考:<从算法设计到硬件逻辑实现>,仅供学习交流使用. Verilog模型可以是实际电路不同级别的抽象.这些抽象的级别和它们对应的模型类型共有以下五种: 1) 系统级(system) ...

  6. 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器

    三位bcd加法计数器 Problem statement: 问题陈述: To perform addition operation between two 8-bit BCD numbers usin ...

  7. 利用BCD码计数器和7段码转换器子电路

    实验目的:利用BCD码计数器和7段码转换器子电路 实验工具:Quartus ii软件和meli软件联合仿真 实验过程截图 实验结果截图 实验代码: module BCDcount (Clock, Cl ...

  8. hdl四位二进制计数器_四位二进制计数器这样接成十进制计数器

    十进制计数器与4位二进制计数器有些相似,但4位二进制计数器需要计数到1111然后 才能返回到0000,而十进制计数器要求计数到1001 (相当于9)就返回0000.8421BCD码 十进制计数器是一种 ...

  9. hdl四位二进制计数器_四位二进制加法计数器

    一 实验目的 1 .熟悉Q uartusII 的VHDL文本设计流程全过程,学习计数器的设计与仿真 2 .掌握简单逻辑电路的设计方法与功能仿真技巧. 3 .学习使用 V AHDL 语言进行含异步清零和 ...

  10. hdl四位二进制计数器_quartus4位二进制加减法计数器.doc

    贵州大学实验报告 学院: 专业: 班级 姓名学号实验组实验时间指导教师成绩实验项目名称4位二进制加减法计数器实验目的了解二进制加减法计数器的设计,进一步了解,熟悉和掌握quartusII的使用方法 学 ...

最新文章

  1. Adobe Flex 3.0 和 AIR 1.0 正式发布
  2. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
  3. Python用subprocess的Popen来调用系统命令
  4. 下一代iPhone将变成“越南制造”?富士康已在越南买地
  5. Android中如何提取和生成mp4文件
  6. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
  7. 楷书书法规则_郁钧剑为何被誉为“明星书法”第一人?
  8. PyCharm(Python编译器汉化)
  9. 校园网设计超超超级详细的配置来了(以河北科技大学为例)
  10. 《Arduino奇妙之旅:智能车趣味制作天龙八步》一1.4 轰!
  11. ResNet 网络结构与残差连接介绍
  12. 鸿蒙系统和全屋智能,不断升级“常用常新” 搭载鸿蒙系统的全屋智能有多酷?...
  13. HBase二级索引方案
  14. TPC_mcgs打印方案
  15. C#使用欧姆龙PLC的Fins协议读写PLC地址(基本封装)
  16. ARM ELF 镜像结构
  17. 六级考研单词之路-十一
  18. windows输入法英文字体间距比平常大,按照设置里按下"shift+space“键,也依然如此
  19. 2023最新黑客入门(超级详细版)
  20. arcgis表转excel一直失败_arcGIS中属性表怎么导出到EXCEL里|excel表格转shp数据丢失...

热门文章

  1. Unity3d常用快捷键
  2. AM调制解调matlab实验报告,基于MATLAB的AM调制解调系统仿真报告
  3. VS2022 Setup Project 打包
  4. 用DW编写网页--个人简历
  5. 点歌系统源码 android,安卓盒子点歌系统代码
  6. Glide 缓存机制分析二,内存缓存(3.7.0为例 5)
  7. 【spark】map算子n种简化写法
  8. HTML5游戏实战 1 50行代码实现正面跑酷游戏
  9. java编程计算圆球的体积_已知圆球体积为4/3πr³,试编写一个程序,输入圆球半径,经过计算输出圆球的体积.用JAVA编写的...明天(3月11号)要用....
  10. 推荐一款免费的万能电子书格式转换工具电子书转换器NeatConverter