基于EDA的8位数码管显示
- 格式:doc
- 大小:1.08 MB
- 文档页数:8
河南科技
8位数码管显示电路设计
2012——20113学年第五学期
EDA技术课程考试
专业班级:电气106
姓名:耀
学号:
考核老师:
1 引言
EDA技术是当前数字系统设计领域比较火热的一种工具,他可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。使用VHDL语言描述硬件系统使得EDA技术有了更为广阔的空间。本设计使用了基于Altera公司的开发软件工具Quartus II,使用Verilog HDL语言设计了一款很实用的八位共阴数码管显示驱动电路,由Quartus II生成的RTL图如下:
2.1 设计思路
设计总框图如下:
2.2 总体原理图
图1 总体原理图
2.3 总体功能介绍
由总体原理图可知,原理图中共有五个输入和两个输出。CLK为时钟输入端,DATA为预显示数据的加载端,在实际应用中可用通信总线代替27位并行总线输入数据,将并口改为串口来简化电路。LOAD为数据加载端DATA的使能端。D为移位寄存器的数据加载端,MD 为数据加载端D的使能端。输出端口LED为数码管显示数据输出端,端口K为数码管位选数据输出端。
总体功能介绍:由CLK输入时钟控制信号,DATA加载待显示的数据。先将LOAD置0,使加载端DATA的数据被存入内部寄存器。然后,随着时钟信号的输出,转制电路将内部寄存器中的数据按十进制,依次在输出端口DOUT输出低位到高位。输出端口COUT为8位移位寄存器的时钟控制端,当寄存器DOUT中被存入数据时,COUT端被置1,使的移位寄存器的时钟输入信号变的有效。D为移位寄存器的数据加载端,在D端输入FE,通过移位寄存器控制共阴数码管的位选。MD为数据加载端D的使能端,先将MD置1,使D端口的数据存入移位寄存器中,在数据存入后,将MD置0阻止D端口的数据存入。输出端口K接数码管的位选端1~8,以控制数码管的动态显示。
3 各个模块的实现
3.1二进制转十进制
二进制转十进制是通过将待显示的数据用内部的寄存器存储,然后对其除以10取整数部分和对其除以10取余数来实现二进制转十进制。在这以27位的并行总线来传入数据,在实际电路中,可选用一种总线协议来代替27位的并行总线,将并口改为串口。如:在单片机中用此电路时,可用IIC总线代替并口,实现并口转串口传输数据。
图2 进制转换电路
功能介绍:包括三个输入CLK、 DATA、LOAD和两个输出COUT、 DOUT。由CLK输入一个时钟脉冲,DATA为待输入显示的数据的加载端,LOAD为待加载输入数据的控制端。当时LOAD=0时,在时钟信号的上升沿将端口DATA的数据载入内部寄存器Q1。输出端口COUT为移位寄存器shft2的时钟控制端,通过与时钟信号的与作为移位寄存器的时钟。输出端口DOUT是将输入的数据按十进制取出的各位的输出端,将其与数码管显示电路输入端口A连结。
3.2数码管显示
这里的数码管使用的是八位一体共阴数码管显示。
图3 数码管显示电路
功能介绍:端口A为显示数据输入端,内部电路将要显示的0~9的二进制数据转换成
可有共阴数码管显示的十六进制数。输出端口LED,为8位并行输出。在实际应用时由高位到底位直接接数码管的端口a,b,c,d,e,f,g,dp。八位一体共阴数码管的位选端口1~8接移位寄存器shft2的八位并行输出端口K。通过移位寄存器输出数据随输入时钟信号的移位,来实现数码管的动态显示。
3.3 8位移位寄存器
图4 8移位寄存器电路
功能介绍:移位寄存器包括三个输入CLK、D、MD和一个输出K。移位寄存器的时钟信号CLK由转制电路上总的时钟信号CLK和其输出端口COUT的与来控制,使的转制电路中LOAD=1时,端口DATA输入的数据不被加载,此时输出端口COUT被置一,使得总的时钟信号CLK在移位寄存器的信号输入端有效。输入端D为数据加载端,在端口D输入FE后存入内部寄存器REG中,通过移位寄存器对其随时钟信号移位来控制共阴数码管的动态显示。输入MD为加载数据控制端。
4 波形仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如图5的仿真波形。时钟端CLK输入时钟信号,8位移位的数据加载端D输入FE,如图5,移位寄存器的数据输入使能端MD在前两个时钟信号时置1,使D端的输入数据有效。在二进制转十进制的电路输入端输入最大的8位十进制数99999999,显示数据加载使能端LOAD在第一个时钟信号时置0,使输入的显示数据有效,在第一个时钟信号后使能端LOAD置1,阻止显示数据的加载。共阴八位一体数码管的位选输出端K的输出如图5所示,这里以二进制比较直观的显示了移位寄存器内部数据的移动。在第二个时钟信号的输入后,数据被加载入移位寄存器,以后在每一时钟信号的上升沿,移位寄存器的输出数据被移位。共阴数码管的显示字符对应如下表:
0 1 2 3 4 5 6 7 8 9
3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 如图5所示,输出端LED在每个时钟信号下对应显示一个9(6F),在图5中以16进制比较直观显示。
图5 顶层文件仿真图
附录二进制转十进制:
module
CNT10(CLK,COUT,DOUT,DA TA,LOAD);
input CLK,LOAD;
input [26:0]DA TA;
output [3:0]DOUT;
output COUT;
reg [3:0]i=1;
reg COUT=0;reg [26:0]Q1;
reg [3:0]DOUT;
always @(posedge CLK )
begin if(!LOAD) Q1=DATA;
else
begin
case(i)
1:begin DOUT<=Q1%10;i=i+1;end 2:begin DOUT<=Q1%10;i=i+1;end 3:begin DOUT<=Q1%10;i=i+1;end 4:begin DOUT<=Q1%10;i=i+1;end 5:begin DOUT<=Q1%10;i=i+1;end 6:begin DOUT<=Q1%10;i=i+1;end 7:begin DOUT<=Q1%10;i=i+1;end 8:begin DOUT<=Q1%10;i=i+1;end default:begin DOUT<=0;end
endcase
Q1=Q1/10;
COUT=1;
end
end
endmodule
8位移位寄存器:
module shft2(CLK,D,MD,K);
output [7:0]K;
input CLK,MD;
input [7:0]D;
reg [7:0] REG;
always @(posedge CLK)
case(MD)
0:begin
REG[7:1]<=REG[6:0];REG[0]<=REG[7];
end
1:begin
REG<=D;
end
default:begin REG<=REG;end endcase
assign K=REG;
endmodule 共阴数码管显示:
module DECL7S (A,LED7S); input [3:0]A;
output [7:0] LED7S;
reg [7:0] LED7S;
always @(A)
begin
case(A)
0:LED7S=8'b00111111;
1:LED7S=8'b00000110;
2:LED7S=8'b01011011;
3:LED7S=8'b01001111;
4:LED7S=8'b01100110;
5:LED7S=8'b01101101;
6:LED7S=8'b01111101;
7:LED7S=8'b00000111;
8:LED7S=8'b01111111;
9:LED7S=8'b01101111;
default:LED7S=8'b00111111;
endcase
end
endmodule