我用的是EPM3064芯片,下面的程序是实现用一位数码管显示按键的操作次数0-9,每按下一次按键数码管显示加1,蜂鸣器发出“滴”响声,当加到9时回到0。我将程序下载到学习板,按键按一下,数码管显示,加一,但是蜂鸣器一直响。我觉得程序应该能实现的,但不知道是什么问题。
module cntkey(key,clk,seg,sound);
input key;
input clk;
output [6:0] seg;
output sound;
reg sound;
reg [7:0] seg;
reg [16:0] cnt;
reg [19:0] cnt20;
wire carry;
assign carry=key;
integer i;
always@(posedge clk)//用的是20Mhz晶振,分成1hz,蜂鸣器响1s。
begin
if(carry)
begin
for(i=1;i<4500;i=i+1'b1)
begin
for(i=1;i<4500;i=i+1'b1)
begin
cnt20<=cnt20+1'b1;
end
end
sound=~sound;
cnt20<=20'd0;
end
end
always@(posedge key)
begin
if(cnt==4'b1001)
cnt<=4'b0000;
else
cnt<=cnt+1'b1;
end
always@(cnt)
begin
case(cnt)
4'b0000:seg<=8'b11000000;
4'b0001:seg<=8'b11111001;
4'b0010:seg<=8'b10100100;
4'b0011:seg<=8'b10110000;
4'b0100:seg<=8'b10011001;
4'b0101:seg<=8'b10010010;
4'b0110:seg<=8'b10000010;
4'b0111:seg<=8'b11111000;
4'b1000:seg<=8'b10000000;
4'b1001:seg<=8'b10010000;
default:seg<=8'b10000000;
endcase
end
endmodule
|