七段数码管动态显示实验问题怎么办

如题所述

七段数码管的动态扫描显示实验一、实验名称:七段数码管的动态扫描显示实验二、实验目的:(1)进一步熟悉QuartusII软件进行FPGA设计的流程(2)掌握利用宏功能模块进行常用的计数器,译码器的设计(3)学习和了解动态扫描数码管的工作原理的程序设计方法三、实验原理:实验板上常用4位联体的共阳极7段数码管,其接口电路是把所有数码管的8个笔划段a-h同名端连在一起,而每一个数码管由一个独立的公共极COM端控制。当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I/O控制的,所以就可以自行决定何时显示哪一位。动态扫描即采用分时方法,轮流控制各个LED轮流点亮。在轮流点亮扫描过程中,每一位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。四、实验要求:实现显示0000-9999的十进制计数器。五、实验步骤1.建立工程建立名为leddisplay的工程,并建立顶层图。2.设计技术时钟设计一分频器,对50MHz分频输出到计数器,让计数器以较慢速度递增。打开File..New,新建一个.v文件。输入以下程序:module int_div(clk, div_out);input clk;output reg div_out;reg [31:0] clk_div;parameter CLK_FREQ = 'D50_000_000; //系统时钟50MHzparameter DCLK_FREQ = 'D10; //输出频率10/2Hzalways @(posedge clk)beginif(clk_div < (CLK_FREQ/DCLK_FREQ))clk_div <= clk_div+1;
elsebeginclk_div <= 0;div_out <= ~div_out;endendendmodule输入完成后,将该文件设为顶层实体,该命令在Project->Set as top-level Entity。分析该设计文件:执行工具栏处的“Start Analysis &Synthesis命令按钮,开始分析综合,此步骤在这里用于检查设计错误。分析成功后要生成一个分频器的元件符号,执行File->Create Symbol files for current file,开始建立该文件的元件符号。3.数码管扫描显示程序设计module segmain(clk,reset_n,datain,seg_data,seg_com);input clk;input reset_n;input[31:0] datain;output[7:0] seg_data;output[7:0] seg_com;reg[7:0] seg_com;reg[7:0] seg_data;reg[3:0] bcd_led;reg[36:0] count;integer temp;always@(posedge clk)beginif(!reset_n) count<=0;elsebegincount<=count+1;temp=datain;endendalways@(count[14:12] or datain)begincase(count[14:12])3'b000:begintemp=temp%10;bcd_led=temp[3:0];seg_com=8'b11111110;
end3'b001:begintemp=temp%100/10;bcd_led=temp[3:0];seg_com=8'b11111101;end3'b010:begintemp=temp%1000/100;bcd_led=temp[3:0];seg_com=8'b11111011;end3'b011:begintemp=temp%10000/1000;bcd_led=temp[3:0];seg_com=8'b11110111;end3'b100:begintemp=temp%100000/10000;bcd_led=temp[3:0];seg_com=8'b11101111;end3'b101:begintemp=temp%1000000/100000;bcd_led=temp[3:0];seg_com=8'b11011111;end3'b110:begintemp=temp%10000000/1000000;bcd_led=temp[3:0];seg_com=8'b10111111;end3'b111:begintemp=temp%100000000/10000000;
bcd_led=temp[3:0];seg_com=8'b01111111;endendcaseendalways@(seg_com or bcd_led)begincase(bcd_led)4'h0:seg_data=8'hc0;4'h1:seg_data=8'hf9;4'h2:seg_data=8'ha4;4'h3:seg_data=8'hb0;4'h4:seg_data=8'h99;4'h5:seg_data=8'h92;4'h6:seg_data=8'h82;4'h7:seg_data=8'hf8;4'h8:seg_data=8'h80;4'h9:seg_data=8'h90;4'ha:seg_data=8'h88;4'hb:seg_data=8'h83;4'hc:seg_data=8'hc6;4'hd:seg_data=8'ha1;4'he:seg_data=8'h86;4'hf:seg_data=8'h8e;default:seg_data=8'hc0;endcaseendendmodule输入完成后,将其设为顶层实体,检验后生成元件符号。4.调用宏功能模块设计计数器双击顶层图空白处,弹出symbol对话框,展开Libraries,找到lpm_counter.按步骤一步步生成4位BCD码的计数器。5.设计完整的顶层返回顶层原理图,并注意重新将顶层原理图设为顶层实体。双击顶层图空白的地方,弹出symbol对话框,展开Libraries栏的Project库,可看到上述步骤建立的一些元件符号。
按OK,在图纸上空白地方点击即可输入相应的元件,添加其它元件,完成下图连接:6.设置芯片和管脚。参照以下tcl script 文件配置芯片管脚,并运行该tcl脚本。#Setup.tclset_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFFset_location_assignment PIN_149 -to clkset_location_assignment PIN_90 -to reset#ledset_location_assignment PIN_148 -to 78ledcom[0]set_location_assignment PIN_147 -to 78ledcom[1] set_location_assignment PIN_160 -to 78ledcom[2]set_location_assignment PIN_159 -to 78ledcom[3]set_location_assignment PIN_162 -to 78ledcom[4]set_location_assignment PIN_161 -to 78ledcom[5] set_location_assignment PIN_166 -to 78ledcom[6]set_location_assignment PIN_164 -to 78ledcom[7]set_location_assignment PIN_145 -to 78leddata[0]set_location_assignment PIN_143 -to 78leddata[1]set_location_assignment PIN_137 -to 78leddata[2]
set_location_assignment PIN_139 -to 78leddata[3]set_location_assignment PIN_144 -to 78leddata[4]set_location_assignment PIN_146 -to 78leddata[5]set_location_assignment PIN_135 -to 78leddata[6]set_location_assignment PIN_142 -to 78leddata[7]7.编译执行菜单命令Project->Set as top-level Entity,将顶层图设为当前顶层实体,然后编译。8.下载1)下载设置:使用下载线下载配置文件到FPGA。2)下载完毕后可看到实验现象:数码管实现显示0000-9999的十进制计数器。六、实验小结(1)这是我们这学期近代电子学实验的第一次实验报告,在前几次的实验中,已经熟悉了QuartusII设计软件的基本功能、原理图输入和HDL输入方法、功能仿真、综合、配置与编程的设计过程,尤其是针对QuartusII的使用初步花了几节课的时间,毕竟这个软件对于我们来说是很陌生的。(2)在前面的实验中,学习QuartusII的基础实验中,课本上和课件上的介绍是很详细的,每一个操作步骤都是有截图的,所以跟着步骤一步一步的,只要小心谨慎,是不会出现错误的。(3)这次的实验是对前几次的实验的整合,在LED的按键控制的基础上进行的实验,在我做实验的工程中,查找错误是最麻烦的琐碎的,往往错误源于很小的失误,比如忘记建立顶层图、调用宏功能模块设计计数器时选错选项等等。这些错误看似微不足道,但是检查起来异常麻烦,所以我们在做实验的时候一定要小心谨慎,切记三心二意。(4)通过这一次的实验练习,希望为以后打下坚实的基础。

5.9
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
七段数码管的动态扫描显示实验
七段数码管的动态扫描显示实验
一、实验名称:七段数码管的动态扫描显示实验
二、实验目的:
(1)进一步熟悉QuartusII软件进行FPGA设计的流程
(2)掌握利用宏功能模块进行常用的计数器,译码器的设计
(3)学习和了解动态扫描数码管的工作原理的程序设计方法
三、实验原理:
第 1 页
实验板上常用4位联体的共阳极7段数码管,其接口电路是把所有数码管的8个笔划段a-h同名端连在一起,而每一个数码管由一个独立的公共极COM端控制。
当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I/O控制的,所以就可以自行决定何时显示哪一位。动态扫描即采用分时方法,轮流控制各个LED轮流点亮。
在轮流点亮扫描过程中,每一位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
温馨提示:答案为网友推荐,仅供参考