循环移位法和数据拼接法基于led

Posted 晓鹏的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环移位法和数据拼接法基于led相关的知识,希望对你有一定的参考价值。

功能描述 让led每隔0.5s从两边向中间闪烁,然后在从中间向两边闪烁,不断循环

项目实现

开发板 晶振为50M,那么达到0.5s时计数器count1需要达到24_999_999这么多次数

计数器代码为

1 always@(posedge CLK or negedge RSTn)
2 if(!RSTn)
3     Count1<=28\'d0;
4 else if(Count1==TIME)
5     Count1<=28\'d0;
6 else
7     Count1<=Count1+1\'b1;

可以让前5个led进行循环移位法 后五位进行数据拼接法

循环移位法:先让led灯进行循环右移当达到2.5s时让其反向移动,当到达5s时初始化为0    可以设置一个标志位 在0~2.5s时设置FLAG为0,在2.5~5秒时设置FLAG置一

 1 always@(posedge CLK or negedge RSTn)
 2 if(!RSTn)
 3     begin
 4         FLAG<=1\'b0;
 5         TIME_MS<=4\'b0;
    end
6 else if(Count1==TIME) 8 if(TIIME_MS==4\'d10) 9 TIME_MS<=4\'d0; 10 else if(TIME_MS>=4\'d0&&TIME_MS<4\'d5) 11 FLAG<=1\'b0; 12 else if(TIME_MS>=4\'d5&&TIME_MS<4\'d10) 13 FLAG<=1\'b1; 14 else 15 TIME_MS<=TIME_MS+1\'b1;

功能模块程序为

always@(posedge CLK or negedge RSTn)
if(!RSTn)
  rLED_Out<=5\'d1;
else if(!FLAG)
  rLED_Out<=rLED_Out>>1;
else if(FLAG)
  rLED_Out<=rLED_Out<<1;
  

 

在数据拼接中同样的是

always@(posedge CLK or negedge RSTn)
if(!RSTn)
    rLED_Out<=5\'b10000;
else if(Count==TIME)
    begin
        if(!FLAG)
            rLED_Out<={1\'b0,[4:1]rLED_Out};//应为rLED_Out[4:1]
        else if(FLAG)
            rLED_Out<={[3:0]rLED_Out,1\'b0};
    end

然后在顶层模块中组合起来

 1 module led_top_module
 2 (
 3    CLK,RSTn,LED_Out
 4 );
 5 input CLK;
 6 input RSTn;
 7 output [9:0] LED_Out;
 8 
 9 wire [4:0] LED_Out1;
10 module_yiwei_led U1
11 (
12 .CLK(CLK),
13 .RSTn(RSTn),
14 .LED_Out(LED_Out1)
15 );
16 
17 wire[9:5] LED_Out2;
18 module_xunhuan_led U2
19 (
20 .CLK(CLK),
21 .RSTn(RSTn),
22 .LED_Out(LED_Out2)    
23 );
24 assign LED_Out={LED_Out1,LED_Out2};

rtl 视图为:

 

以上是关于循环移位法和数据拼接法基于led的主要内容,如果未能解决你的问题,请参考以下文章

光学基于matlab GUI矩阵法和等效界面法光学薄膜对反射率影响含Matlab源码 2102期

光学基于matlab GUI矩阵法和等效界面法光学薄膜对反射率影响含Matlab源码 2102期

循环移位算法

基于线性回归法和时间序列法的石油产量预测研究

基于python语言的经典排序法(冒泡法和选择排序法)

基于51单片机Proteus的8X8led点阵滚动显示图形