只有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。
當循環(huán)8次后(給出8個SCK和8個LCK后),移位寄存器中=第8位數據,前置鎖存器=第8位數據。但Q0-Q6里分別對應第7位-第1位數據,第8位數據并沒有更新到Q0,同時Q7=NON。
這就是為什么給出循環(huán)8次的程序,總是不能顯示第8位數據的原因。
因此要全部顯示8位,需要再多給一次SCK和LCK。
那么問題來了,最后給這次SCK和LCK,全部顯示8位了。但是:移位寄存器和前置鎖存器中又鎖定了8位之外的第9位無用數據。
那么我們就可以用到SCLR(10腳)了。
給SCLR一個下降沿就可以了。這個下降沿同時清空移位寄存器和前置鎖存器。但并不立即生效!只有產生下一個SCK時,才生效。
所以,SCLR時,前置鎖存器和Q0-Q7鎖存器依然鎖定的是原來的數據,直到下一個SCK之前,不會改變輸出內容。
而等我們下一次再傳送一個新的8位數據時,在第一個SCK的時候,SCLR生效之后才接收新數據,因為不會影響接收新數據。
這個過程我稱之為“收口操作“。
74HC595在【8x8LED點陣】中的應用
每個燈就相當于坐標圖中的一個點,具有唯一獨特的坐標位置,這樣就可以通過引腳的信號來控制每個燈的關和開
col管腳連接的是P0的八個引腳,row管腳連接的是595的八位并行輸出端。
實驗中采取的是逐列顯示,通過P0控制八列每列逐列顯示,其間通過595位移緩存器控制每列要亮的led燈。
74HC595是串入并出帶有鎖存功能移位寄存器.形象來說,14引腳是搬運工,11是進廠守門員,12是出廠守門員,11出現上升沿時,從14引腳輸入一位數據,一共重復八次12引腳上升沿時,將之前進來的八位數據分別從1到7引腳輸出OE為使能端,低電平時使輸出有效。





