找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5362|回复: 0
打印 上一主题 下一主题
收起左侧

fpga数码管动态扫描程序

[复制链接]
跳转到指定楼层
楼主
ID:77367 发表于 2015-4-19 01:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
module display(datain,dataout);
input[3:0] datain;
output[7:0] dataout;//段码
reg[7:0] dataout;
always@(datain)
case(datain)
8'd0: dataout=8'b11000000;
8'd1: dataout=8'b11111001;
8'd2: dataout=8'b10100100;
8'd3: dataout=8'b10110000;
8'd4: dataout=8'b10011001;
8'd5: dataout=8'b10010010;
8'd6: dataout=8'b10000010;
8'd7: dataout=8'b11111000;
8'd8: dataout=8'b10000000;
8'd9: dataout=8'b10010000;
default: dataout=8'b11111111;
endcase
endmodule
(注:以上是基于pnp管开关的,就是段码为1,灯灭,0灯亮,一般的数码管应该是反过来的)
如果只需驱动一位数码管就很简单,直接输入数即可;如果驱动多位数码管,就需要动态扫描显示了,假如是八位数码管显示,这时就要先设计一个计数器了,八位计数器,不断扫描,而且频率也要设计好,每次只驱动一个管子,由于频率很快,等光残影等,人眼根本分辨不出,就造成了所有管子都亮的效果。程序如下
module view(din,clk,rst,dout,dataout);
input clk,rst;
input[23:0] din;
output[7:0] dout;//驱动使能端,有八位,0有效,绑定到对应的使能端
output[7:0] dataout;//段码输出,绑定到对应的led段码端
reg[10:0] count;//分频,因为输入时钟太大
reg[7:0] dout;
reg[3:0] data;
reg[2:0] count1;//八位计数器,不断扫描
reg clk1;
display u1(data,dataout);//调用段码程序
always@(posedge clk)begin
count<=count+1;
if(count==1)
clk1<=~clk1;
end
always@(posedge clk1 or posedge rst)begin
if(rst)begin
data=0;dout=8'b11111110;
end
else begin
count1<=count1+1;
case(count1)
3'd0: begin dout=8'b11111110; data=din[3:0];end//要显示的数,可以改为一个具体数
3'd1: begin dout=8'b11111101; data=din[7:4];end
3'd2: begin dout=8'b11111011; data=din[11:8];end
3'd3: begin dout=8'b11110111; data=din[15:12];end
3'd4: begin dout=8'b11101111; data=din[19:16];end
3'd5: begin dout=8'b11011111; data=din[23:20];end
3'd6: begin dout=8'b11111111; data=din[7:4];end
3'd7: begin dout=8'b11111111;data=din[7:4];end
endcase
end
end
endmodule



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表