数码管扫描显示 数电实验综述Word格式文档下载.docx
- 文档编号:20970663
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:8
- 大小:17.14KB
数码管扫描显示 数电实验综述Word格式文档下载.docx
《数码管扫描显示 数电实验综述Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数码管扫描显示 数电实验综述Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
实验时间
2016.1.5
实验地点
1教233
实验设备号
一、实验程序源代码
(含实验程序源代码及模块设计说明、注释等)
/*
1.实验分工
本实验的代码主要由陈孟春同学完成,程平安同学做了后期的测试工作。
2.程序介绍
本程序分为4个模块,分别为主模块(shiyan18)、显示模块(Display)、分频模块(Timer)、十进制计数器模块(DecAdder)。
主模块(shiyan18)主要负责连接其他模块以及连接各个管脚。
显示模块(Display)的功能是把4位8421码转换为数码管所需的位选信号和段选信号。
分频模块(Timer)的功能是把100M的时钟转换成其他频率的时钟。
比如显示模块每位数字的刷新时间大约为2.6ms,那就用了分频模块输出的第19、18位作为位选的时钟。
数码管的计数需要较慢的速度,所以选择了第24位作为它的时钟,如果需要更快的增加速度,也可以选择23或者22位。
十进制计数器模块(DecAdder)的功能是对时钟的脉冲个数进行计数,当来了一个时钟上升沿时就可以加一。
由于本实验的数码管是4位的,所以在主模块中创建了4个十进制计数器模块的实例,通过级联来实现4位的十进制计数器。
*/
`timescale1ns/1ps
moduleshiyan18(
inputStartStop,
inputclk,
input_clr,
output[3:
0]AN,
output[7:
0]seg
);
wire[24:
0]delay;
wirec0,c1,c2,c3;
wire[15:
0]data;
Timertimer(clk,delay);
Displaydisplay(data,delay[19:
18],AN,seg);
DecAdderda0(_clr,StartStop,delay[24],data[3:
0],c0),
da1(_clr,StartStop,c0,data[7:
4],c1),
da2(_clr,StartStop,c1,data[11:
8],c2),
da3(_clr,StartStop,c2,data[15:
12],c3);
endmodule
moduleTimer(
inputCP,
outputreg[24:
0]delay={24{1'
b0}}
always@(posedgeCP)
begin
delay<
=delay+1'
b1;
end
moduleDisplay(
input[15:
0]Data,
input[1:
0]Bit_Sel,
outputreg[3:
outputreg[7:
0]Seg
reg[7:
0]memory[0:
15]={8'
b00000011,
8'
b10011111,
b00100101,
b00001101,
b10011001,
b01001001,
b01000001,
b00011111,
b00000001,
b00001001,
b00010001,
b11000001,
b01100011,
b10000101,
b01100001,
b01110001
};
always@(Bit_Sel)
begin
case(Bit_Sel)
0:
begin
AN<
=4'
b0111;
Seg<
=memory[Data[15:
12]];
end
1:
b1011;
=memory[Data[11:
8]];
2:
b1101;
=memory[Data[7:
4]];
3:
b1110;
=memory[Data[3:
0]];
default:
AN<
b1111;
Seg<
={8{1'
b1}};
end
endcase
moduleDecAdder(
input_MR,
inputEN,
inputCLK,
0]Q,
outputregC1
always@(negedge_MRorposedgeCLK)
if(_MR==0)
{C1,Q}<
=5'
b00000;
elseif(EN)
begin
if(Q==4'
b1001)
begin
Q<
b0000;
C1<
=1'
end
else
begin
=Q+1'
b0;
end
二、仿真波形
三、电路图
四、引脚配置(约束文件)
NET"
AN[0]"
LOC=N16;
AN[1]"
LOC=N15;
AN[2]"
LOC=P18;
AN[3]"
LOC=P17;
seg[7]"
LOC=T17;
seg[6]"
LOC=T18;
seg[5]"
LOC=U17;
seg[4]"
LOC=U18;
seg[3]"
LOC=M14;
seg[2]"
LOC=N14;
seg[1]"
LOC=L14;
seg[0]"
LOC=M13;
clk"
LOC=V10;
StartStop"
LOC=T10;
_clr"
LOC=T9;
五、思考与探索
(1)在实验中,你碰到了哪些问题,又是如何解决的?
如果感觉数字闪烁,分析是什么原因?
如何解决?
答:
写完程序后,第一次上板子测试的时候除了有个数字显示错了,其他基本没有问题。
但在后来仿真的时候,代码报错,似乎是不能直接给寄存器数组初始化,于是改了一下原来的代码,最后显示出了仿真波形。
如果数字闪烁可能是刷屏的频率不够高,可以把分频模块的输出时钟频率调的高一点。
(2)板级实验时,当你置开关Start/Stop=0时,观察数码管显示状态:
停止计数了吗?
数码管是某个点亮还是4个均点亮?
当你Start/Stop=1时,计数从0000开始,还是从刚才停止的数据开始?
假如要求停止计数时,数码管稳定显示停止时的4位计数值,再次启动计数时,又从刚才中断的计数值继续开始计数,请你修改你的程序,达到上述效果。
停止计数了。
4个均点亮。
从刚才的数据开始。
我的程序已经实现了上述效果。
(3)考虑设计一个通用的4位数码管显示模块,输入端口为16位的数据Data[15:
0],每4位用一个数码管显示,输入端口即为数码管位选AN[3:
0]和段选Seg[7:
0]。
代码如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管扫描显示 数电实验综述 数码管 扫描 显示 实验 综述