艾米电子工作室—让开发变得更简单 http://www.amy-studio.com
FPGA 入门系列实验教程——数码管动态显示
1. 实验任务
实现开发板上 8 个数码管动态显示 0~7。通过这个实验,掌握采用 Verilog HDL
语言编程实现 7 段数码管显示译码器以及数码管动态扫描显示的方法。
2. 实验环境
硬件实验环境为艾米电子工作室型号 EP2C8Q208C8 增强版开发套件。
软件实验环境为 Quartus II 8.1 开发软件。
3. 实验原理
由于LED静态显示需要占用较多的I/O口,且功耗较大,因此在大多数场合通
常不采用静态显示,而采用动态扫描的方法来控制LED数码管的显示。动态
显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位
数码管有效。点亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各
位数码管送出字形码和相应的位选,只要扫描显示速度够快,利用发光管的
余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态
显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示
电路中的。动态扫描显示时刷新频率最好大于50HZ,即没显示一轮的时间不
超过20ms,每个数码管显示时间不能太长也不能太短,时间太长会影响刷新
率,导致总体显示呈现闪烁的现象,时间太短发光二极管的电流导通时间也
就短,会影响总体的显示亮度。一般控制在1ms左右最佳。
4. 实验程序
module scan_led(clk,rst,sm_seg,sm_bit);
input clk,rst;
output[7:0] sm_seg; //数码管段选择输出
output[7:0] sm_bit; //数码管位选择输出
reg[7:0] sm_seg; //数码管段选择输出寄存器
reg[7:0] sm_bit; //数码管位选择输出寄存器
艾米电子工作室—让开发变得更简单 http://www.amy-studio.com
reg[15:0] cnt_scan;//扫描频率计数器
reg[4:0] dataout_buf;
always@(posedge clk or negedge rst)
begin
if(!rst) begin
cnt_scan<=0;
end
else begin
cnt_scan<=cnt_scan+1'b1;
end
end
always @(cnt_scan)
begin
case(cnt_scan[15:13])
3'b000 :
sm_bit = 8'b1111_1110;
3'b001 :
sm_bit = 8'b1111_1101;
3'b010 :
sm_bit = 8'b1111_1011;
3'b011 :
sm_bit = 8'b1111_0111;
3'b100 :
sm_bit = 8'b1110_1111;
3'b101 :
sm_bit = 8'b1101_1111;
3'b110 :
sm_bit = 8'b1011_1111;
3'b111 :
sm_bit = 8'b0111_1111;
default :
sm_bit = 8'b1111_1110;
endcase
end
艾米电子工作室—让开发变得更简单 http://www.amy-studio.com
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:
dataout_buf=0;
8'b1111_1101:
dataout_buf=1;
8'b1111_1011:
dataout_buf=2;
8'b1111_0111:
dataout_buf=3;
8'b1110_1111:
dataout_buf=4;
8'b1101_1111:
dataout_buf=5;
8'b1011_1111:
dataout_buf=6;
8'b0111_1111:
dataout_buf=7;
default:
dataout_buf=8;
endcase
end
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"
endcase
end
endmodule
艾米电子工作室—让开发变得更简单 http://www.amy-studio.com
5. 实验步骤
(1)建立新工程项目:
打开 Quartus II 软件,进入集成开发环境,点击 File→New project
wizard 建立一个工程项目 scan_led。
(2)建立文本编辑文件:
点击 File→New..在该项目下新建 Verilog HDL 源程序文件 scan_led.v,
输入试验程序中的源程序代码保存后选择工具栏中的 按钮启动编
译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。
(3)选择器件型号及引脚的其他设置:
选择所用的 FPGA 器件----EP2C8Q208C8,以及进行一些配置。选择配置
器件 EPCS4,设置不需要使用的 IO 功能为 As inputs,tri-stated。点击两
次 ok,回到主界面。
(4)配置 FPGA 引脚:
在 Quartus II 软件主页面下,选择 Assignments→Pins 或选择工具栏上
按钮,配置 rst,sm_seg,sm_bit 以及 clk 的引脚。
(5)编译工程项目:
在 Quartus II 主页面下,选择 Processing→Start Compilation 或点击工具
栏上的 按钮启动编译,直到出现“Full Compilation Report”对话框,点
击 OK 即可。
(6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。
(7)下载设计程序.sof 文件到目标 FPGA,下载采用 JTAG 方式(由于配置芯
片擦写次数有限,实验均采用 JTAG 下载方式)。
6. 实验现象
开发板 8 个数码管动态显示 0~7。大家可以试着改写程序让数码管动态显示
其他任意数字。
艾米电子工作室—让开发变得更简单 http://www.amy-studio.com
实验教程配套开发板一览:
了解详情登陆淘宝店铺:
艾米电子淘宝店:http://shop33537127.taobao.com/
本文档为【FPGA入门数码管动态显示】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。