美文网首页
彩灯显示电路

彩灯显示电路

作者: 萍水间人 | 来源:发表于2019-06-05 19:57 被阅读0次

首先认识一下分频电路

时钟是

    always @(posedge clk100khz) //分频1hz
    begin
        if(count == 'd49999)
            begin clk1=~clk1;count<=0;end
        else 
            begin count <= count+1'b1; end
    end

怎么说呢,时钟是100khz,也就是1s之内有100000个波形
那么上升沿也就是有100000次,count理论上就会加到100000次
但是如果count加到了49999之后,也就是100000的一半
clk就取反,是不是就是把49999个波形都抹平了
那样1s之内是不是就只有1个波形了?

所以说分频得到了1hz

同理:

    always @(posedge clk100khz) //分频10hz
    begin
        if(count == 'd4999)
            begin clk2=~clk2;count1<=0;end
        else 
            begin count1 <= count1+1'b1; end
    end

然后再将分频得到的时钟赋过去

    always @(posedge clk100khz)
    begin
        if(b)
            clk <= clk1;
        else 
            clk <= clk2;
    end

之所以有一个b是为了控制时钟用两种节拍交替闪烁
这种情况下,只是抹平了100000/5000 = 20
20次有一半的上升和一半的下降,所以最终得到的波形就是10hz

接下来看
是怎么实现灯之间的状态转换的
实现左到右依次点亮

        if(flag == 3'b000)
            begin
                light <= {1'b1, light[len:1]};
                if(light[0] == 1)
                    flag<=3'b001;
            end

light循环赋值

因为light既在左边出现了,又在右边出现了

然后如果light[1] == 1的时候就跳转到下一个状态,至于为什么是light[1]等于1的时候,我做实验的时候改成了light[0] == 1,这个时候发现灯停顿了一下
我猜测是非阻塞赋值的缘故
因为两个状态是同时赋值的,如果改成了阻塞赋值呢?

实现右到左依次熄灭

        else if(flag == 3'b001)
            begin
                light <= {light[len-1:0], 1'b0};
                if(light[6] == 0)
                    flag<=3'b010;       
            end
    

类似的,这里也是循环移位,然后判断了light[6] == 0的时候跳转到下一个状态

中间到两边亮

        else if(flag == 3'b010)
            begin
                light[len:4]<={light[len-1:4], 1'b1};
                light[len-4:0] <= {1'b1, light[len-4:1]};
                if(light[1] == 1)
                    flag<=3'b011;
            end
    

分成了7:4和3:0
然后从中间开始往两边亮,代码写得很清楚了

两边向中间灭

        else if(flag == 3'b011)
            begin
                light[len:4]<={1'b0, light[len:5]};
                light[len-4:0] <= {light[len-5:0], 1'b0};
                if(light[2] == 0)
                    flag<=3'b100;
            end
    

奇偶位循环点亮

        else if(flag == 3'b100)
            begin
                light[len:4]<={1'b0, light[len:5]};
                light[len-4:0] <= {1'b1, light[len-4:1]};
                if(light[1] == 1)
                    flag<=3'b101;
            end

奇偶位循环点亮这个没搞清楚

相关文章

  • 彩灯显示电路

    首先认识一下分频电路 时钟是 怎么说呢,时钟是100khz,也就是1s之内有100000个波形那么上升沿也就是有1...

  • 键盘显示电路

    简要的分析一下原理: 键盘采用的是PS2协议 clkin信号是检测键盘是否按下的,rst是复位信号所以 input...

  • 西门子数控机床CRT上显示混乱是什么原因?

    1、电源接通后无基本画面显示 (a)电路板03840号板上无监控灯显示 (b)03840号电路板上监控灯亮 ①监控...

  • 超声波测厚仪的操作方法和原理

    超声波测厚仪主要有主机和探头两部分组成,主机电路包括发射电路、接收电路、计数显示电路三部分,由发射电路产生的高压冲...

  • 两个单片机例程:DS1302的时钟电路,分别是串行和并行

    两个单片机例程:DS1302的时钟电路(串行传输显示方式)DS1302的时钟电路(并行传输显示方式) 本主题由 b...

  • 项目七(任务八)利用一位数码管实现0-9数字的显示——例程4.2

    例程4.2:0-9循环显示,每个数字显示1秒 1.模拟电路图 该例程连接电路和代码编写均以共阴极为例——公共端...

  • 手机维修之显示电路

    此文主要探讨一下显示电路的维修思路和方法。 分析显示座子如下: 1.PP_LCM_BL_CAT2_CONN座子1脚...

  • 彩灯

    初一的晚上妈妈带着我、爸爸、奶奶、小姑、三爷、三奶、二宝,一起去运城看彩灯。 原本说要去到晚上怕二宝睡觉...

  • 彩灯

    啊,彩灯。你的光辉照亮了整个城市。 看!蓝色的像蓝莓;绿色的像树叶;红色的像焰火;金色的像太阳;粉...

  • 彩灯

    橘色的光线拢了它满身,它身体本是蓝色的,如今看起来却有些发黄。 他的光照到了身旁的大树上,大树碧绿的叶子也有些发黄...

网友评论

      本文标题:彩灯显示电路

      本文链接:https://www.haomeiwen.com/subject/wlnsxctx.html