led应用
只有1个移位寄存器,但有1+8个,共9个锁存器。其中第1个锁存器可以理解为中转前置锁存器,它并没有连接Q0-Q7,后面8个锁存器连接了Q0-Q7。
当第1次SCK和LCK时,移位寄存器中=第1位数据,前置锁存器=第1位数据。但是并没有进入到Q0-Q7所对应的锁存器当中去。Q0到Q7=NON。
当第2次SCK和LCK时,移位寄存器中=第2位数据,前置锁存器=第2位数据。同时前置锁存器把之前的第1位数据才更新到Q0对应的锁存器当中去。此时Q0=第1位。Q1到Q7=NON。
当第3次SCK和LCK时,移位寄存器中=第3位数据,前置锁存器=第3位数据。同时前置锁存器把之前的第2位数据才更新到Q0对应的锁存器当中去,Q0把之前的第1位数据给Q1,此时Q0=第2位。Q1=第1位。Q2到Q7=NON。
当循环8次后(给出8个SCK和8个LCK后),移位寄存器中=第8位数据,前置锁存器=第8位数据。但Q0-Q6里分别对应第7位-第1位数据,第8位数据并没有更新到Q0,同时Q7=NON。
这就是为什么给出循环8次的程序,总是不能显示第8位数据的原因。
因此要全部显示8位,需要再多给一次SCK和LCK。
那么问题来了,最后给这次SCK和LCK,全部显示8位了。但是:移位寄存器和前置锁存器中又锁定了8位之外的第9位无用数据。
那么我们就可以用到SCLR(10脚)了。
给SCLR一个下降沿就可以了。这个下降沿同时清空移位寄存器和前置锁存器。但并不立即生效!只有产生下一个SCK时,才生效。
所以,SCLR时,前置锁存器和Q0-Q7锁存器依然锁定的是原来的数据,直到下一个SCK之前,不会改变输出内容。
而等我们下一次再传送一个新的8位数据时,在第一个SCK的时候,SCLR生效之后才接收新数据,因为不会影响接收新数据。
这个过程我称之为“收口操作“。
每个灯就相当于坐标图中的一个点,具有唯一独特的坐标位置,这样就可以通过引脚的信号来控制每个灯的关和开
col管脚连接的是P0的八个引脚,row管脚连接的是595的八位并行输出端。
实验中采取的是逐列显示,通过P0控制八列每列逐列显示,其间通过595位移缓存器控制每列要亮的led灯。
74HC595是串入并出带有锁存功能移位寄存器.形象来说,14引脚是搬运工,11是进厂守门员,12是出厂守门员,11出现上升沿时,从14引脚输入一位数据,一共重复八次12引脚上升沿时,将之前进来的八位数据分别从1到7引脚输出OE为使能端,低电平时使输出有效。
全部0条评论
快来发表一下你的评论吧 !