- 0
- 0
- 约5.67千字
- 约 5页
- 2026-01-27 发布于北京
- 举报
FPGA系列实验——数码管动态显示
1.实验任务
实现开发板上8个数码管动态显示0~7通过这个实验掌握采用VerilogHDL
语言编程实现7段数码管显示译以及数码管动态扫描显示的方法。
2.实验环境
硬件实验环境为电子型号EP2C8Q208C8增强版开发套件。
软件实验环境为QuartusII8.1开发软件。
3.实验原理
由于LED静态显示需要占用较多的I/O口,且功耗较大,因此在大多数场合通
常不采用静态显示,而采用动态扫描的方法来控制LED数码管的显示。动态
显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位
数码管有效。点亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各
位数码管送出字形码和相应的位选,只要扫描显示速度够快,利用发光管的
和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态
显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示
电路中的。动态扫描显示时刷新频率大于50HZ,即没显示一轮的时间不
超过20ms,每个数码管显示时间不能太长也不能太短,时间太长会影响刷新
率,导致总体显示呈现闪烁的现象,时间太短发光二极管的电流导通时间也
就短,会影响总体的显示亮度。一般控制在1ms左右最佳。
4.实验程序
modulescan_led(clk,rst,sm_seg,sm_bit);
inputclk,rst;
output[7:0]sm_seg;//数码管段选择输出
output[7:0]sm_bit;//数码管位选择输出
reg[7:0]sm_seg;//数码管段选择输出寄存器
reg[7:0]sm_bit;//数码管位选择输出寄存器
reg[15:0]cnt_scan;//扫描频率计数器
reg[4:0]dataout_buf;
always@(posedgeclkornegedgerst)
begin
if(!rst)begin
cnt_scan=0;
end
elsebegin
cnt_scan=cnt_scan+1b1;
end
end
always@(cnt_scan)
begin
case(cnt_scan[15:13])
3b000:
sm_bit8b1111_1110;
3b001:
sm_bit8b1111_1101;
3b010:
sm_bit8b1111_1011;
3b011:
sm_bit8b1111_0111;
3b100:
sm_bit8b1110_1111;
3b101:
sm_bit8b1101_1111;
3b110:
sm_bit8b1011_1111;
3
原创力文档

文档评论(0)