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的使用方法不会用。好多细节的东西没有注意到
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |