"); //-->
/********************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
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
英特尔与\"面壁智能\"建立战略合作伙伴关系,共同研发端侧原生智能座舱
鼎阳科技2025Q1营收同比增长26.93%,延续高毛利61.80%!
数据中心面临电力约束挑战,推动GenAI终端发展
请教一个关于usb识别得问题
PocketPC2003 BSP for Intel PXA27x
PocketPC2003 BSP for Intel PXA27x
苹果公司CEO乔布斯在斯坦福大学的演讲中文字幕
绕组抽头调速电路(L1型)
鸿运扇电路(钻石KYTQ-25)
绕组抽头调速电路(h型)
BOE(京东方)发布行业首个可持续发展品牌“ONE”
高速数据采集平台解说4
汽车显示屏——第2部分
高速PCB设计指南之五
绕组抽头调速电路(T型)
夺取双色球500万大奖秘诀
意法半导体推出带有\"可改变存储配置\"存储器的车规MCU解决方案
高速PCB设计指南之七
英特尔与黑芝麻智能签署合作备忘录,联合发布舱驾融合平台
输出电压调节
集成了数字电源管理功能的模拟 DC/DC 控制器
PocketPC2003 BSP for Intel PXA27x
2025蓝牙亚洲大会重返深圳,聚焦未来互联新趋势
高速PCB设计指南之二
贸泽电子蝉联2024年度华强电子网优质供应商奖
Virtex-7 485T I/O处理能力
电风扇串并联接法调速电路
使用模拟预失真进行射频功率放大器线性化
高速PCB设计指南之八
高速PCB设计指南之四