7段数码管实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA 实验报告
实验名称: 7段数码管控制接口学院:信息工程学院
专业: 11级电子信息工程2班年级、班: 2009级2班
学生姓名:王璐
指导教师:郭华
2014 年 6 月24 日
7段数码管控制接口
一、实验要求。
用设计一个共阴7 段数码管控制接口,要求:在时钟信号的控制下,使 6 位数码管动态刷新显示0—F,其中位选信号为8-3 编码器编码输出。
二、实验内容。
在实验仪器中,8 位7 段数码显示的驱动电路已经做好,并且其位选信(SEL[7..0])为一3-8 译码器的输出,所以我们在设计7 段数码管控制接口时,其位选信号输出必须经8-3编码。
显示控制器的引脚图如图40-1:
图1
图中CP 为时钟输入端,SEGOUT[7..0]为段驱动输出;SELOUT[2..0]为位选信号输出;NUMOUT[3..0]为当前显示的数据输出。
图40-2 7段显示控制器仿真波形图
从图40-2可以看出,6位数码管是轮流点亮的,我们以NUMOUT=1 这段波形为参考:当SELOUT为000时,点亮第一位显示器,显示的数字为1,同时,NUMOUT 输出的数据也为“0001”。同理,当SELOUT 为001 时,点亮第二位显示器,显示数字为1,直到 6 位显示器全都显示完毕,等待进入下一个数字的显示。
同时,还有一个问题不可忽视,位扫描信号的频率至少需要多少以上,才能使显示器不闪烁?简单的说,只要扫描频率超过眼睛的视觉暂留频率24HZ以上就可以达到点亮单个显示,却能享有6个同时显示的视觉效果,而且显示也不闪烁。当我们输入频率为5MHZ时,我们通过加法计数器来产生一个约300HZ 的信号,并且由它来产生位选信号,请参考下面程序段:
PROCESS (CP) -- 计数器计数
Begin
IF CP'Event AND CP='1' then
Q <= Q+1;
END IF;
END PROCESS;
NUM <= Q(24 DOWNTO 21); --about 1 Hz
S <= Q(15 DOWNTO 13); --about 300 Hz
--扫描信号
SEL <= "000" WHEN S=0 ELSE
"001" WHEN S=1 ELSE
"010" WHEN S=2 ELSE
"011" WHEN S=3 ELSE
"100" WHEN S=4 ELSE
"101" WHEN S=5 ELSE
"111111";
由计数器Q 引出到S信号,若时钟信号为5MHZ时,Q13 得到的信号频率约为300HZ,再将它分给扫描信号,最后每个显示器扫描信号频率为:300/6=50HZ>24HZ,所以不会有闪烁情形产生。
实验程序设计如下:
module ledCycle(outData,VGA,CLK);
input CLK;
output [3:0] VGA;
assign VGA[3:0]=4'b0010;
output reg [15:0] outData;
reg [7:0]temp=8'h00;
parameter font0=16'h803F;
parameter font1=16'h8006;
parameter font2=16'h805B;
parameter font3=16'h804F;
parameter font4=16'h8066;
parameter font5=16'h806D;
parameter font6=16'h807D;
parameter font7=16'h8007;
parameter font8=16'h807F;
parameter font9=16'h806F;
parameter fontA=16'h8077;
parameter fontB=16'h807C;
parameter fontC=16'h8039;
parameter fontD=16'h805E;
parameter fontE=16'h8079;
parameter fontF=16'h8071;
always @(posedge CLK)
begin
if(temp>16)
begin
temp=1;
outData=font0;
end
else
begin
case (temp)
0: outData=font0;
1: outData=font1;
2: outData=font2;
3: outData=font3;
4: outData=font4;
5: outData=font5;
6: outData=font6;
7: outData=font7;
8: outData=font8;
9: outData=font9;
10: outData=fontA;
11: outData=fontB;
12: outData=fontC;
13: outData=fontD;
14: outData=fontE;
15: outData=fontF;
default ;
endcase
temp=temp+1;
end
end
endmodule