下决心好好研究一番这个板子了,网上借鉴到一个不错的帖子首先来做一个数码管时钟显示。
数码管时钟我想对于很多学电子的同学来说都不陌生了,闲话不多说,先来说说这个原理。怎么点亮单个数码管我就不说了,无非分清共阴共阳,然后就是置高置低的问题。但是对于4个一起的数码管,要怎么控制他们看起来好像是在同时点亮的而且还能显示不同的内容就比较麻烦了。先上原理图:
显然要控制一个数码管需要两部分的端口--CA...DP和AN0...AN3,我一般叫左边的为段选,右边的为位选。从原理图上来看,位选端接在PNP管的B极,要先让C、E极导通,相应的位选端应该是低电平,比如AN3...AN0四位为1110,就是选择了最后一个数码管。而当数码管选中时(即相应的三极管导通),数码管公共端接的是高电平,显然这些数码管应该是共阳的,于是CA...DP端的编码就可以按共阳数码管的编码方式做了。转换成Verilog代码,可以是一下的常数定义:
parameter AN1 = 4'b1110,AN2 = 4'b1101,AN3 = 4'b1011,AN4 = 4'b0111;//数码管位选定义 parameter zero = 8'b0000_0011,one = 8'b1001_1111,two = 8'b0010_0101,three = 8'b0000_1101,four = 8'b1001_1001, five = 8'b0100_1001,six = 8'b0100_0001,seven = 8'b0001_1111,eigth = 8'b0000_0001,nine = 8'b0000_1001;//数码管段选定义好了,现在搞清楚了第一个问题--怎么将0-9几个数显示出来,接下来的问题是怎么让4个数码管看起来是一起显示的,而且还能显示不同的内容。这个问题相信做过单片机数码管实验的同学马上就猜到了,没错,原理就是利用人眼视觉的暂留性(我是这么叫的,再专业点就不是我研究的问题了)--当两个数码管之间的变化小于100ms(貌似是这么长时间)时,我们的眼睛是看不到他们之间的闪烁的。于是,当我们要显示1234这4个数时,我们可以在1ms时显示1,25ms时显示2,50ms时显示3,75ms时显示4,然后循环,看起来就是一起显示1234这4个数了。当然,我们的硬件可以做的更快,这个时间间隔可以根据实际情况选择更短。把它翻译成Verilog语言就有下面的程序段了:
//数码管刷新显示模块 always@(posedge div1000hz) begin if(rest) begin seg_count <= 0; an <= 4'b0000; seg <= 8'b0000_0000; end else begin case(seg_count) 0 : begin case