|
显示电路很简单,就是一个4位数码管加4个8550三极管,没有画图直接焊了。
顺便问下,减法计算器要怎么做?想来好久都想不出来。
// test3.v
/**************************************************************
** 模块名称:test3
**************************************************************/
module test3(
clk48M, //48M时钟输入
RSTn, //复位信号,高电平复位
a, //key1
b, //key2
q, //led1
q2, //led2
DIGIT, //数码管输出
SEG //数码管段位输出
);
input clk48M;
input RSTn;
input a;
input b;
output [7:0] DIGIT;
output [3:0] SEG;
output [0:0] q;
output [0:0] q2;
reg [23:0] count; //分频计数器
reg [15:0] count2;//数码管扫描计数器
reg [7:0] DIGIT;
reg [3:0] SEG;
reg [3:0] cach1;
reg [3:0] cach2;
reg [3:0] cach3;
reg [3:0] cach4;
assign q = a & b;
assign q2 = a | b;
always@(posedge clk48M or negedge RSTn)
begin
if(!RSTn) //异步复位
begin
cach1=4'b0000;
cach2=4'b0000;
cach3=4'b0000;
cach4=4'b0000;
DIGIT=8'hff;
SEG=4'b1111;
count=23'h0;
count2=16'h0;
//计数器赋初值
end
else
begin
fork
count=count+1;
count2=count2+1;
join
if(count==24'hff_ff_ff)
begin
cach1=cach1+1;
if(cach1==4'h0a)
fork
cach1=4'h0;
cach2=cach2+1;
join
if(cach2==4'h0a)
fork
cach2=4'h0;
cach3=cach3+1;
join
if(cach3==4'h0a)
fork
cach3=4'h0;
cach4=cach4+1;
join
if(cach4==4'h0a)
cach4=4'h0;
end
if(count2==16'h00)
begin
SEG=4'b1111; //熄灯
end
else if(count2==16'h100)
begin
case(cach1) //七段译码
4'h0:DIGIT = 8'hc0; //显示0
4'h1:DIGIT = 8'hf9; //显示1
4'h2:DIGIT = 8'ha4; //显示2
4'h3:DIGIT = 8'hb0; //显示3
4'h4:DIGIT = 8'h99; //显示4
4'h5:DIGIT = 8'h92; //显示5
4'h6:DIGIT = 8'h82; //显示6
4'h7:DIGIT = 8'hf8; //显示7
4'h8:DIGIT = 8'h80; //显示8
4'h9:DIGIT = 8'h90; //显示9
4'ha:DIGIT = 8'h88; //显示a
4'hb:DIGIT = 8'h83; //显示b
4'hc:DIGIT = 8'hc6; //显示c
4'hd:DIGIT = 8'ha1; //显示d
4'he:DIGIT = 8'h86; //显示e
4'hf:DIGIT = 8'h8e; //显示f
endcase
SEG=4'b1110;
end
else if(count2==16'h3fff)
begin
SEG=4'b1111;
end
else if(count2==16'h4100)
begin
case(cach2) //七段译码
4'h0:DIGIT = 8'hc0; //显示0
4'h1:DIGIT = 8'hf9; //显示1
4'h2:DIGIT = 8'ha4; //显示2
4'h3:DIGIT = 8'hb0; //显示3
4'h4:DIGIT = 8'h99; //显示4
4'h5:DIGIT = 8'h92; //显示5
4'h6:DIGIT = 8'h82; //显示6
4'h7:DIGIT = 8'hf8; //显示7
4'h8:DIGIT = 8'h80; //显示8
4'h9:DIGIT = 8'h90; //显示9
4'ha:DIGIT = 8'h88; //显示a
4'hb:DIGIT = 8'h83; //显示b
4'hc:DIGIT = 8'hc6; //显示c
4'hd:DIGIT = 8'ha1; //显示d
4'he:DIGIT = 8'h86; //显示e
4'hf:DIGIT = 8'h8e; //显示f
endcase
SEG=4'b1101;
end
else if(count2==16'h7fff)
begin
SEG=4'b1111;
end
else if(count2==16'h8100)
begin
case(cach3) //七段译码
4'h0:DIGIT = 8'hc0; //显示0
4'h1:DIGIT = 8'hf9; //显示1
4'h2:DIGIT = 8'ha4; //显示2
4'h3:DIGIT = 8'hb0; //显示3
4'h4:DIGIT = 8'h99; //显示4
4'h5:DIGIT = 8'h92; //显示5
4'h6:DIGIT = 8'h82; //显示6
4'h7:DIGIT = 8'hf8; //显示7
4'h8:DIGIT = 8'h80; //显示8
4'h9:DIGIT = 8'h90; //显示9
4'ha:DIGIT = 8'h88; //显示a
4'hb:DIGIT = 8'h83; //显示b
4'hc:DIGIT = 8'hc6; //显示c
4'hd:DIGIT = 8'ha1; //显示d
4'he:DIGIT = 8'h86; //显示e
4'hf:DIGIT = 8'h8e; //显示f
endcase
SEG=4'b1011;
end
else if(count2==16'hbfff)
begin
SEG=4'b1111;
end
else if(count2==16'hc100)
begin
case(cach4) //七段译码
4'h0:DIGIT = 8'hc0; //显示0
4'h1:DIGIT = 8'hf9; //显示1
4'h2:DIGIT = 8'ha4; //显示2
4'h3:DIGIT = 8'hb0; //显示3
4'h4:DIGIT = 8'h99; //显示4
4'h5:DIGIT = 8'h92; //显示5
4'h6:DIGIT = 8'h82; //显示6
4'h7:DIGIT = 8'hf8; //显示7
4'h8:DIGIT = 8'h80; //显示8
4'h9:DIGIT = 8'h90; //显示9
4'ha:DIGIT = 8'h88; //显示a
4'hb:DIGIT = 8'h83; //显示b
4'hc:DIGIT = 8'hc6; //显示c
4'hd:DIGIT = 8'ha1; //显示d
4'he:DIGIT = 8'h86; //显示e
4'hf:DIGIT = 8'h8e; //显示f
endcase
SEG=4'b0111;
end
end
end
endmodule |
|