七段数码管的动态扫描显示实验.docx
- 文档编号:12515039
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:9
- 大小:206.62KB
七段数码管的动态扫描显示实验.docx
《七段数码管的动态扫描显示实验.docx》由会员分享,可在线阅读,更多相关《七段数码管的动态扫描显示实验.docx(9页珍藏版)》请在冰豆网上搜索。
七段数码管的动态扫描显示实验
七段数码管的动态扫描显示实验
一、实验名称:
七段数码管的动态扫描显示实验
二、实验目的:
(1)进一步熟悉QuartusII软件进行FPGA设计的流程
(2)掌握利用宏功能模块进行常用的计数器,译码器的设计
(3)学习和了解动态扫描数码管的工作原理的程序设计方法
三、实验原理:
实验板上常用4位联体的共阳极7段数码管,其接口电路是把所有数码管的8个笔划段a-h同名端连在一起,而每一个数码管由一个独立的公共极COM端控制。
当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I/O控制的,所以就可以自行决定何时显示哪一位。
动态扫描即采用分时方法,轮流控制各个LED轮流点亮。
在轮流点亮扫描过程中,每一位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
四、实验要求:
实现显示0000-9999的十进制计数器。
五、实验步骤
1.建立工程
建立名为leddisplay的工程,并建立顶层图。
2.设计技术时钟
设计一分频器,对50MHz分频输出到计数器,让计数器以较慢速度递增。
打开File..New,新建一个.v文件。
输入以下程序:
moduleint_div(clk,div_out);
inputclk;
outputregdiv_out;
reg[31:
0]clk_div;
parameterCLK_FREQ='D50_000_000;//系统时钟50MHz
parameterDCLK_FREQ='D10;//输出频率10/2Hz
always@(posedgeclk)
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->Setastop-levelEntity。
分析该设计文件:
执行工具栏处的“StartAnalysis&Synthesis命令按钮,开始分析综合,此步骤在这里用于检查设计错误。
分析成功后要生成一个分频器的元件符号,执行File->CreateSymbolfilesforcurrentfile,开始建立该文件的元件符号。
3.数码管扫描显示程序设计
modulesegmain(clk,reset_n,datain,seg_data,seg_com);
inputclk;
inputreset_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;
integertemp;
always@(posedgeclk)
begin
if(!
reset_n)count<=0;
else
begin
count<=count+1;
temp=datain;
end
end
always@(count[14:
12]ordatain)
begin
case(count[14:
12])
3'b000:
begin
temp=temp%10;
bcd_led=temp[3:
0];
seg_com=8'b11111110;
end
3'b001:
begin
temp=temp%100/10;
bcd_led=temp[3:
0];
seg_com=8'b11111101;
end
3'b010:
begin
temp=temp%1000/100;
bcd_led=temp[3:
0];
seg_com=8'b11111011;
end
3'b011:
begin
temp=temp%10000/1000;
bcd_led=temp[3:
0];
seg_com=8'b11110111;
end
3'b100:
begin
temp=temp%100000/10000;
bcd_led=temp[3:
0];
seg_com=8'b11101111;
end
3'b101:
begin
temp=temp%1000000/100000;
bcd_led=temp[3:
0];
seg_com=8'b11011111;
end
3'b110:
begin
temp=temp%10000000/1000000;
bcd_led=temp[3:
0];
seg_com=8'b10111111;
end
3'b111:
begin
temp=temp%100000000/10000000;
bcd_led=temp[3:
0];
seg_com=8'b01111111;
end
endcase
end
always@(seg_comorbcd_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
end
endmodule
输入完成后,将其设为顶层实体,检验后生成元件符号。
4.调用宏功能模块设计计数器
双击顶层图空白处,弹出symbol对话框,展开Libraries,找到lpm_counter.
按步骤一步步生成4位BCD码的计数器。
5.设计完整的顶层
返回顶层原理图,并注意重新将顶层原理图设为顶层实体。
双击顶层图空白的地方,弹出symbol对话框,展开Libraries栏的Project库,可看到上述步骤建立的一些元件符号。
按OK,在图纸上空白地方点击即可输入相应的元件,添加其它元件,完成下图连接:
6.设置芯片和管脚。
参照以下tclscript文件配置芯片管脚,并运行该tcl脚本。
#Setup.tcl
set_global_assignment-nameRESERVE_ALL_UNUSED_PINS"ASINPUTTRI-STATED"
set_global_assignment-nameENABLE_INIT_DONE_OUTPUTOFF
set_location_assignmentPIN_149-toclk
set_location_assignmentPIN_90-toreset
#led
set_location_assignmentPIN_148-to78ledcom[0]
set_location_assignmentPIN_147-to78ledcom[1]
set_location_assignmentPIN_160-to78ledcom[2]
set_location_assignmentPIN_159-to78ledcom[3]
set_location_assignmentPIN_162-to78ledcom[4]
set_location_assignmentPIN_161-to78ledcom[5]
set_location_assignmentPIN_166-to78ledcom[6]
set_location_assignmentPIN_164-to78ledcom[7]
set_location_assignmentPIN_145-to78leddata[0]
set_location_assignmentPIN_143-to78leddata[1]
set_location_assignmentPIN_137-to78leddata[2]
set_location_assignmentPIN_139-to78leddata[3]
set_location_assignmentPIN_144-to78leddata[4]
set_location_assignmentPIN_146-to78leddata[5]
set_location_assignmentPIN_135-to78leddata[6]
set_location_assignmentPIN_142-to78leddata[7]
7.编译
执行菜单命令Project->Setastop-levelEntity,将顶层图设为当前顶层实体,然后编译。
8.下载
1)下载设置:
使用下载线下载配置文件到FPGA。
2)下载完毕后可看到实验现象:
数码管实现显示0000-9999的十进制计数器。
六、实验小结
(1)这是我们这学期近代电子学实验的第一次实验报告,在前几次的实验中,已经熟悉了QuartusII设计软件的基本功能、原理图输入和HDL输入方法、功能仿真、综合、配置与编程的设计过程,尤其是针对QuartusII的使用初步花了几节课的时间,毕竟这个软件对于我们来说是很陌生的。
(2)在前面的实验中,学习QuartusII的基础实验中,课本上和课件上的介绍是很详细的,每一个操作步骤都是有截图的,所以跟着步骤一步一步的,只要小心谨慎,是不会出现错误的。
(3)这次的实验是对前几次的实验的整合,在LED的按键控制的基础上进行的实验,在我做实验的工程中,查找错误是最麻烦的琐碎的,往往错误源于很小的失误,比如忘记建立顶层图、调用宏功能模块设计计数器时选错选项等等。
这些错误看似微不足道,但是检查起来异常麻烦,所以我们在做实验的时候一定要小心谨慎,切记三心二意。
(4)通过这一次的实验练习,希望为以后打下坚实的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管 动态 扫描 显示 实验