专栏中心

EEPW首页 > 专栏 > 7段LED动态显示源码(原创)

7段LED动态显示源码(原创)

发布人:up2002 时间:2007-10-29 来源:工程师 发布文章


/********************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%!

2025-04-24

数据中心面临电力约束挑战,推动GenAI终端发展

苹果公司CEO乔布斯在斯坦福大学的演讲中文字幕

视频 2011-10-12

BOE(京东方)发布行业首个可持续发展品牌“ONE”

高速数据采集平台解说4

视频 2011-10-17

汽车显示屏——第2部分

高速PCB设计指南之五

意法半导体推出带有\"可改变存储配置\"存储器的车规MCU解决方案

高速PCB设计指南之七

英特尔与黑芝麻智能签署合作备忘录,联合发布舱驾融合平台

输出电压调节

视频 2011-10-08

集成了数字电源管理功能的模拟 DC/DC 控制器

2025蓝牙亚洲大会重返深圳,聚焦未来互联新趋势

高速PCB设计指南之二

贸泽电子蝉联2024年度华强电子网优质供应商奖

Virtex-7 485T I/O处理能力

视频 2011-09-21

使用模拟预失真进行射频功率放大器线性化

高速PCB设计指南之八

高速PCB设计指南之四

更多 培训课堂
更多 焦点
更多 视频

技术专区