七段数码管的动态扫描显示实验(共11页).doc
精选优质文档-倾情为你奉上七段数码管的动态扫描显示实验一、实验名称:七段数码管的动态扫描显示实验二、实验目的:(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;/系统时钟50MHz parameter DCLK_FREQ = 'D10;/输出频率10/2Hz always (posedge clk) begin if(clk_div < (CLK_FREQ/DCLK_FREQ) clk_div <= clk_div+1; else begin clk_div <= 0; div_out <= div_out; end end endmodule输入完成后,将该文件设为顶层实体,该命令在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;input31:0 datain;output7:0 seg_data;output7:0 seg_com;reg7:0 seg_com;reg7:0 seg_data;reg3:0 bcd_led;reg36:0 count;integer temp;always(posedge clk) begin if(!reset_n) count<=0; else begin count<=count+1; temp=datain; end endalways(count14:12 or datain) begin case(count14:12) 3'b000: begin temp=temp%10; bcd_led=temp3:0; seg_com=8'b; end 3'b001: begin temp=temp%100/10; bcd_led=temp3:0; seg_com=8'b; end 3'b010: begin temp=temp%1000/100; bcd_led=temp3:0; seg_com=8'b; end 3'b011: begin temp=temp%10000/1000; bcd_led=temp3:0; seg_com=8'b; end 3'b100: begin temp=temp%/10000; bcd_led=temp3:0; seg_com=8'b; end 3'b101: begin temp=temp%/; bcd_led=temp3:0; seg_com=8'b; end 3'b110: begin temp=temp%/; bcd_led=temp3:0; seg_com=8'b; end 3'b111: begin temp=temp%/; bcd_led=temp3:0; seg_com=8'b; end endcase end always(seg_com or bcd_led) begin case(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; endcase endendmodule输入完成后,将其设为顶层实体,检验后生成元件符号。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 78ledcom0set_location_assignment PIN_147 -to 78ledcom1 set_location_assignment PIN_160 -to 78ledcom2 set_location_assignment PIN_159 -to 78ledcom3set_location_assignment PIN_162 -to 78ledcom4set_location_assignment PIN_161 -to 78ledcom5 set_location_assignment PIN_166 -to 78ledcom6 set_location_assignment PIN_164 -to 78ledcom7set_location_assignment PIN_145 -to 78leddata0 set_location_assignment PIN_143 -to 78leddata1 set_location_assignment PIN_137 -to 78leddata2 set_location_assignment PIN_139 -to 78leddata3 set_location_assignment PIN_144 -to 78leddata4 set_location_assignment PIN_146 -to 78leddata5 set_location_assignment PIN_135 -to 78leddata6 set_location_assignment PIN_142 -to 78leddata77.编译执行菜单命令Project->Set as top-level Entity,将顶层图设为当前顶层实体,然后编译。8.下载1)下载设置:使用下载线下载配置文件到FPGA。2)下载完毕后可看到实验现象:数码管实现显示0000-9999的十进制计数器。六、实验小结(1)这是我们这学期近代电子学实验的第一次实验报告,在前几次的实验中,已经熟悉了QuartusII设计软件的基本功能、原理图输入和HDL输入方法、功能仿真、综合、配置与编程的设计过程,尤其是针对QuartusII的使用初步花了几节课的时间,毕竟这个软件对于我们来说是很陌生的。(2)在前面的实验中,学习QuartusII的基础实验中,课本上和课件上的介绍是很详细的,每一个操作步骤都是有截图的,所以跟着步骤一步一步的,只要小心谨慎,是不会出现错误的。(3)这次的实验是对前几次的实验的整合,在LED的按键控制的基础上进行的实验,在我做实验的工程中,查找错误是最麻烦的琐碎的,往往错误源于很小的失误,比如忘记建立顶层图、调用宏功能模块设计计数器时选错选项等等。这些错误看似微不足道,但是检查起来异常麻烦,所以我们在做实验的时候一定要小心谨慎,切记三心二意。(4)通过这一次的实验练习,希望为以后打下坚实的基础。专心-专注-专业