zxopenljx 发表于 2020-4-30 14:46:49

动态显示之移位模块

今天,我们一起来分享一下数码管滚动显示的最后一个模块:“移位模块”

数码管的移位其实和流水灯差不多。只不过流水灯是一个灯亮其它灯不亮,然后另一个灯亮其它灯不亮;可以看成数据的单个显示。而数码管滚动显示原理和流水灯相似,只不过数码管是多个数据同时流水,而流水灯则是一个LED灯单独流水。
今天,我们采取拼接符的方法来实现多个数据同时流水的目的。

之前我们说过,一个数码管需要4位数据,6个数码管需要24位数据。那么24位数据从高位到低位,每4位对应一个数码管。
24位数据从高位到低位,与6个数码管从左向右依次对应。

移位模块的代码如下:
00//数码管滚动显示之“移位模块”
01module seg_run(clk, rst_n, date_in);
02
03   input clk;                                          //系统时钟
04   input rst_n;                                        //系统复位
05   
06   outputreg date_in;                        //输出数据,每4位数据对应一个数码管显示
07   
08   //计时模块,计1s
09   reg cnt;                                     //定义一个计数器
10   wire flag;                                          //定义一个计时标志信号
11   parameter cnt_num =50_000_000/1-1;               //定参:1秒钟需要数多少个时钟周期
12   
13   always@(posedge clk,negedge rst_n)               //总是在时钟上升沿或复位下降沿时,执行以下操作
14   begin
15         if(!rst_n)                                    //判断是否复位
16            cnt <=26'd0;                               //如果复位,将计数器cnt清零
17         elseif(cnt == cnt_num)                         //否则,判断cnt是否计到最大值
18                      cnt <=26'd0;                     //计到最大值,让计数器cnt清零
19                  else
20                      cnt <= cnt +1;                     //否则,继续计数,让cnt加一
21   end
22   
23   assign flag =(cnt == cnt_num)?1'b1    :   1'b0;   //计时信号(当cnt=cnt_num时,即计够1秒,让flag信号拉高一次;若没计够,flag一直保持低电平)
24   
25   //流水模块
26   always@(posedge clk,negedge rst_n)            
27   begin
28         if(!rst_n)                                    //判断复位
29            date_in <=24'h012345;                      //复位时,给date_in一个初始值“HELLO.”这个数据是由数码管显示模块得到的。
30         else                                          //否则
31            begin
32                  if(flag ==1)                           //判断flag是否拉高
33                      date_in <={date_in,date_in};//若拉高,让date_in的低四位数据和date_in的高20位数据拼接成一个新的24位数据。即实现移位。
34                  else
35                      date_in <= date_in;               //若flag没有拉高,则让date_in的24位数据保持不变。.0
36            end
37   end
38   
39endmodule

今天的分享就到这里,我们明天见!
页: [1]
查看完整版本: 动态显示之移位模块