"); //-->
/********************LED_7seg*************************
**模块名称:LED_7seg
**功能描述:7段数码管的显示控制
************************************************/
module LED_7seg(clk_48M,seg,sl,key);
input clk_48M; //48M时钟输入
input [3:0] key; //按键输入
output [7:0] seg; //段码输出
output [3:0] sl; //位码输出
reg [7:0] seg_reg; //段码寄存器
reg [3:0] sl_reg; //位码寄存器
reg [15:0] disp_buf_reg; //四位数据显示缓存区
reg [3:0] disp_dat; //一位数据显示缓存区
reg [14:0] count; //计数器
reg [3:0] dout1,dout2,dout3; //去抖寄存器
wire [3:0] key_reg; //按键控制
wire [15:0] disp_buf; //显示控制
assign disp_buf = disp_buf_reg; //显示控制
assign key_reg = (dout1&dout2&dout3); //去抖控制
always@(posedge clk_48M) //节拍计数器
begin
count <= count + 15'd1;
end
always@(posedge count[4]) //去抖控制
begin
dout1 <= key;
dout2 <= dout1;
dout3 <= dout2;
end
always@(posedge clk_48M) //通过按键来改变显示缓存区
begin
if(key_reg[0])
disp_buf_reg <= 16'h7002;
else if(key_reg[1])
disp_buf_reg <= 16'h8002;
else if(key_reg[2])
disp_buf_reg <= 16'h9002;
else if(key_reg[3])
disp_buf_reg <= 16'h0102;
end
always @(count[14:13]) //定义显示数据触发事件
begin
case (count[14:13]) //选择扫描显示数据
2'h0: disp_dat <= disp_buf[3:0]; //显示秒的个位数据
2'h1: disp_dat <= disp_buf[7:4]; //显示秒的十位数据
2'h2: disp_dat <= disp_buf[11:8]; //显示分的个位数据
2'h3: disp_dat <= disp_buf[15:12]; //显示分的十位数据
endcase
case (count[14:13]) //选择数码管显示位
2'h0: sl_reg <= 4'b0111; //选择个位数码管
2'h1: sl_reg <= 4'b1011; //选择十位数码管
2'h2: sl_reg <= 4'b1101; //选择百位数码管
2'h3: sl_reg <= 4'b1110; //选择千位数码管
endcase
end
always @(disp_dat) //显示译码输出
begin
case (disp_dat) //选择输出数据
4'h0: seg_reg <= 8'hc0; //显示0
4'h1: seg_reg <= 8'hf9; //显示1
4'h2: seg_reg <= 8'ha4; //显示2
4'h3: seg_reg <= 8'hb0; //显示3
4'h4: seg_reg <= 8'h99; //显示4
4'h5: seg_reg <= 8'h92; //显示5
4'h6: seg_reg <= 8'h82; //显示6
4'h7: seg_reg <= 8'hf8; //显示7
4'h8: seg_reg <= 8'h80; //显示8
4'h9: seg_reg <= 8'h90; //显示9
4'ha: seg_reg <= 8'h88; //显示a
4'hb: seg_reg <= 8'h83; //显示b
4'hc: seg_reg <= 8'hc6; //显示c
4'hd: seg_reg <= 8'ha1; //显示d
4'he: seg_reg <= 8'h86; //显示e
4'hf: seg_reg <= 8'h8e; //显示f
endcase
//if((count[14:13]==2'h2)&&count[21])
// seg_reg = seg_reg&8'h7f; //小数点闪烁
end
assign seg = seg_reg;
assign sl = sl_reg;
endmodule
//---------------------------------------
以上程序仅作参考。
ACTEL FPGA 项目开发、芯片咨询,技术交流探讨,欢迎联系TOM:
TEL:139 2466 7001
QQ :416763076
MSN:up.2002@hotmail.com
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。