module shixian60(sys_clk,
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [2:0] disp_dat;//显示数据寄存器
reg [35:0] delay_cnt;//延时寄存器
reg ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=16'd0;
else
begin
if(delay_cnt==36'd49_999_999_999)
delay_cnt<=16'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==26'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==36'd49_999_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==16'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
不知道错误在哪里,希望大神帮一下小弟
10楼
module shixian60(sys_clk,
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [1:0] disp_dat;//显示数据寄存器
reg [27:0] delay_cnt;//延时寄存器
reg [3:0] ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=28'd0;
else
begin
if(delay_cnt==28'd49_999)
delay_cnt<=28'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==28'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==28'd499_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==28'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
标记颜色的都是改过后的,我的思路是:个位每一秒记一次,十位是每十秒记一次,估计是always的使用方法不会用。好多细节的东西没有注意到
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [1:0] disp_dat;//显示数据寄存器
reg [27:0] delay_cnt;//延时寄存器
reg [3:0] ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=28'd0;
else
begin
if(delay_cnt==28'd49_999)
delay_cnt<=28'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==28'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==28'd499_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==28'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
标记颜色的都是改过后的,我的思路是:个位每一秒记一次,十位是每十秒记一次,估计是always的使用方法不会用。好多细节的东西没有注意到
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
