新闻  |   论坛  |   博客  |   在线研讨会
笔记4 数码管显示
0750long | 2010-03-10 21:17:58    阅读:1332   发布文章

笔记数码管显示

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

 

 

数码管估计读过电子的朋友一点也不陌生吧。在这里就不叙述原理了,而是直接的了解代码的意思。

 

代码的开始依然声明了 CLKRST均为输入。而七位CodeL0L1为输出,它们分别是段选和位选。

 

然后建立了26位的计数寄存器,时间的间隔大约是1.3秒左右。每隔这个时间Number计数寄存器都会开始递增。而always模块会因为Number的变化,不断判断Code_Buff寄存器的输出段选码。

 

在最后的几行代码,分别将L0L1位选的电平拉低,而且发送段选码。

在这里出现的新脸孔,有parameter这个关键字,意思是常量,和C语言的const意思相通。(实际上c语言的const关键字,有更多不同的意思)

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客