动态数码管显示_设计 EDA.doc
文本预览下载声明
数码管动态显示
1实验目的
学习动态扫描显示的原理;利用数码管动态扫描显示的原理编写程序,实现自己学号的显示。
2实验内容
(1)在SmartSOPC实验箱上完成数码管动态显示自己学号的后八个数字。
(2)放慢扫描速度演示动态显示的原理过程。
3实验原理
数码管的八个段a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0~SEG7,8个数码管分别由八个选通信号DIG0~DIG7来选择,被选通的数码管显示数据,其余关闭。如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口SEG0~SEG7加上该对应数码管上显示的数据,于是随着选通信号的扫描就能实现动态扫描显示的目的。虽然每次只有1个数码管显示,但只要扫描显示速率足够快,利用人眼的视觉余辉效应,我们仍会感觉所有的数码管都在同时显示。
4实验指导
同学们统一将新建的项目命名为scan_led, 新建的Verilog HDL文件命名为scan_led.v,模块的接口定义如下:
module scan_led(sys_clk,dig,seg); //模块名scan_led
input sys_clk; //输入时钟
output[7:0] dig; //数码管选择输出引脚
output[7:0] seg; //数码管段输出引脚
reg [25:0]count;
reg clk;
always @(posedge sys_clk)
begin
if (count 26
begin
count = count + 1b1;
clk = 1b0;
end
else
begin
count = 17d0;
clk = 1b1;
end
end
reg [7:0]seg_r,dig_r;
reg[3:0]disp_dat;
reg [2:0]cnt;
always @( posedge sys_clk)
begin
if(clk)
cnt=cnt+1b1;
end
always @( posedge sys_clk)
if(clk)
begin
case(cnt) //选择扫描显示数据
3d0:disp_dat =4h0; //第一个数码管
3d1:disp_dat =4h1; //第二个数码管
3d2:disp_dat =4h0; //第三个数码管
3d3:disp_dat =4h9; //第四个数码管
3d4:disp_dat =4h0; //第五个数码管
3d5:disp_dat =4h1; //第六个数码管
3d6:disp_dat =4h2; //第七个数码管
3d7:disp_dat =4h5; //第八个数码管
endcase
case(cnt) //选择数码管显示位
3d0:dig_r = 8 //选择第一个数码管显示
3d1:dig_r = 8 //选择第二个数码管显示
3d2:dig_r = 8 //选择第三个数码管显示
3d3:dig_r = 8 //选择第四个数码管显示
3d4:dig_r = 8 //选择第五个数码管显示
3d5:dig_r = 8 //选择第六个数码管显示
3d6:dig_r = 8 //选择第七个数码管显示
3d7:dig_r = 8 //选择第八个数码管显示
endcase
end
always @(disp_dat)
begin
case(disp_dat) //七段译码
4h0:seg_r = 8hc0; //显示0
4h1:seg_r = 8hf9; //显示1
4h2:seg_r = 8ha4; //显示2
4h3:seg_r = 8hb0; //显示3
4h4:seg_r = 8h99; //显示4
4h5:seg_r = 8h92; //显示5
4h6:seg_r = 8h82; //显示6
4h7:seg_r = 8hf8; //显示7
4h8:seg_r = 8h80; //显示8
4h9:seg_r = 8h90; //显示9
4ha:seg_r = 8h88; //显示a
显示全部