笔记4 数码管显示<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
module lesson04
(
CLK, RST,
Code, L0, L1
);
input CLK;
input RST;
output L0,L1;
output [6:0]Code;
//////////////////////////////////////////
reg [25:0]Counter;
always @ (posedge CLK or negedge RST )
if (!RST)
Counter <= 1'd0;
else
Counter <= Counter + 1'b1;
//////////////////////////////////////////
reg [3:0]Number;
always @ (posedge CLK or negedge RST)
if (!RST)
Number <= 1'd0;
else if(Counter == 28'h2ffffff)
Number <= Number + 1'b1;
/////////////////////////////////////////
parameter
_0 = 7'h3f,
_1 = 7'h06,
_2 = 7'h5b,
_3 = 7'h4f,
_4 = 7'h66,
_5 = 7'h6d,
_6 = 7'h7d,
_7 = 7'h07,
_8 = 7'h7f,
_9 = 7'h6f,
_A = 7'h77,
_B = 7'h7c,
_C = 7'h39,
_D = 7'h5e,
_E = 7'h79,
_F = 7'h71;
/////////////////////////////////////////
reg [6:0]Code_Buff;
always @ (Number)
case (Number)
4'h0 : Code_Buff = _0;
4'h1 : Code_Buff = _1;
4'h2 : Code_Buff = _2;
4'h3 : Code_Buff = _3;
4'h4 : Code_Buff = _4;
4'h5 : Code_Buff = _5;
4'h6 : Code_Buff = _6;
4'h7 : Code_Buff = _7;
4'h8 : Code_Buff = _8;
4'h9 : Code_Buff = _9;
4'hA : Code_Buff = _A;
4'hB : Code_Buff = _B;
4'hC : Code_Buff = _C;
4'hD : Code_Buff = _D;
4'hE : Code_Buff = _E;
4'hF : Code_Buff = _F;
default : ;
endcase
assign Code = Code_Buff;
assign L0 = 1'b0;
assign L1 = 1'b0;
//////////////////////////////////////////
endmodule
数码管估计读过电子的朋友一点也不陌生吧。在这里就不叙述原理了,而是直接的了解代码的意思。
代码的开始依然声明了 CLK和RST均为输入。而七位Code和L0,L1为输出,它们分别是段选和位选。
然后建立了26位的计数寄存器,时间的间隔大约是1.3秒左右。每隔这个时间Number计数寄存器都会开始递增。而always模块会因为Number的变化,不断判断Code_Buff寄存器的输出段选码。
在最后的几行代码,分别将L0,L1位选的电平拉低,而且发送段选码。
在这里出现的新脸孔,有parameter这个关键字,意思是常量,和C语言的const意思相通。(实际上c语言的const关键字,有更多不同的意思)
用户286631 2010-6-5 21:28