当前位置 - 股票行情交易網 - 國際漫評 - 74hc595存儲寄存器引腳是否可以懸空?他的原理是不是讓數據暫停?

74hc595存儲寄存器引腳是否可以懸空?他的原理是不是讓數據暫停?

74HC595 的工作原理 74HC595 的工作原理-編程-顯示 SCH 74HC595 是具有 8 位移位寄存器和壹個存儲器,三態輸出功能。 移位寄存器和存 儲器是分別的時鐘。 數據在 11 SHcp(SCLK P0.4)的上升沿輸入,在 12 STcp(nCS P0.8)的上升 P0.4) P0.8) ( ( 沿進入的存儲寄存器中去。如果兩個時鐘連在壹起,則移位寄存器總是比存儲寄存器早壹個 脈沖。 移位寄存器有壹個串行移位輸入 14 (Ds) P0.6) 和壹個串行輸出 9 (Q7’) MISO (MOSI P0.6), ( P0.5) P0.5),和壹個異步的低電平復位,存儲寄存器有壹個並行 8 位的,具備三態的總線輸出,當 使能 OE 時(為低電平),存儲寄存器的數據輸出到總線。 74HC595 各個引腳的功能: Q1~7 是並行數據輸出口,即儲寄存器的數據輸出口 Q7' 串行輸出口,其應該接 SPI 總線的 MISO 接口 STcp 存儲寄存器的時鐘脈沖輸入口 SHcp 移位寄存器的時鐘脈沖輸入口 OE 的非 輸出使能端 MR 的非 芯片復位端 Ds 串行數據輸入端 程序說明: 每當 SHcp(SCLK)(SCLK P0.4)上升沿到來時,DS(MOSI P0.6) P0.4) ( (MOSI P0.6)引腳當前電平值 在移位寄存器中左移壹位,在下壹個上升沿到來時移位寄存器中的所有位都會向左移壹位, 同時 Q7'( MISO) ( MISO P0.5) P0.5)也會串行輸出移位寄存器中高位的值,這樣連續進行 8 次,就 可以把數組中每壹個數(8 位的數)送到移位寄存器;然後當 STcp(nCS)(nCS P0.8)上升 P0.8) ( 沿到來時,移位寄存器的值將會被鎖存到鎖存器裏,並從 Q1~7 引腳輸出。 //74HC595 串行輸出數據 void outdisp(unsigned char num) { unsigned char i; for (i=0;i<8;i++ ) { DS=num; SHCP=1; SHCP=0; num<<=1; } } 設計顯示 PCB 板(595 壹為傳送位選信號,壹為傳送代碼段信號) CEPARK AVR 單片機 之 HC595 驅動數碼管顯示 (2009-09-16 17:30:13) 標簽: 分類:Avr it 這裏我用的 CEPARK 的 M64 AVR 開發板,這壹課的重點是學會如何使用 74HC595 來驅動數碼管。 74HC595 是具有 8 位移位寄存器和壹個存儲器,三態輸出功能。移位寄存器和存儲器是分別的時 鐘。數據在 SHcp 的上升沿輸入,在 STcp 的上升沿進入的存儲寄存器中去。如果兩個時鐘連在壹起,則移 位寄存器總是比存儲寄存器早壹個脈沖。移位寄存器有壹個串行移位輸入(Ds),和壹個串行輸出(Q7’), 和壹個異步的低電平復位,存儲寄存器有壹個並行 8 位的,具備三態的總線輸出,當使能 OE 時(為低電 平),存儲寄存器的數據輸出到總線。 引腳說明: QA--QH: 八位並行輸出端,可以直接控制數碼管的 8 個段。 QH': 級聯輸出端。我將它接下壹個 595 的 SI 端。 SER(DS): 串行數據輸入端。 74595 的控制端說明: /SCLR(MR)(10 腳): 低點平時將移位寄存器的數據清零。通常我將它接 Vcc。 SCK(SHCP)(11 腳):上升沿時數據寄存器的數據移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數據 不變。(脈沖寬度:5V 時,大於幾十納秒就行了。我通常都選微秒級) RCK(STCP)(12 腳):上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。通 常我將 RCK 置為低電平,當移位結束後,在 RCK 端產生壹個正脈沖(5V 時,大於幾十納秒就行了。我通常 都選微秒級),更新顯示數據。 /G(OE)(13 腳): 高電平時禁止輸出(高阻態)。如果單片機的引腳不緊張,用壹個引腳控制它,可以方便 地產生閃爍和熄滅效果。比通過數據端移位控制要省時省力。 註:74164 和 74595 功能相仿,都是 8 位串行輸入轉並行輸出移位寄存器。74164 的驅動電流(25mA)比 74595(35mA)的要小,14 腳封裝,體積也小壹些。 74595 的主要優點是具有數據存儲寄存器,在移位的過程中,輸出端的數據可以保持不變。這在串行速度 慢的場合很有用處,數碼管沒有閃爍感。 與 164 只有數據清零端相比,595 還多有輸出端時能/禁止控制端,可以使輸出為高阻態。 註明:74HC595 引腳命名我現在看到兩種,如串行數據輸入端(14 腳)有的 Datasheet 上叫 SER,還有壹種 叫 DS。不過這都沒有關系,只是名字不壹樣,大家看這些文檔時,註意點就行。 現在大家對 595 有了壹定的了解,現在我們看 CEPARK AVR 單片機開發板上這壹部分的原理圖: 大家這裏只要註意 11,12,14 這三個引腳由單片機的哪幾個口控制就好。 SHCP(11)-----------PG0 STCP(12)-----------PG1 DS(14)-------------PG2 下面是源程序: 效果:第壹位和第二位數碼管顯示 5; #include <avr/io.h> #include <util/delay.h> #define SER_PORT PORTG //PG 口 #define SER_DATA PG2 //DS,串行數據入口 #define SER_RCK PG1 //STCP,來壹個上升沿時數據進入並行輸出 #define SER_SCK PG0 //SHCP,來壹個上升沿時數據移位 unsigned char Led_Disbuf[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //***陽極 void Send_Byte_HC595(unsigned char byte) //並行數據移位輸出函數 { 壹個數碼管亮 //byte 是表示我們想哪壹位數碼管亮, 如為 0x01,表示第 unsigned char i; //循環變量 for(i = 0;i < 8;i++) { if(byte & 0x80) { SER_PORT |= _BV(SER_DATA); //PG2 輸出 1 } else { SER_PORT &= ~_BV(SER_DATA);//PG2 輸出 0 } SER_PORT |= _BV(SER_SCK); //上升沿觸發,SER_DATA 數據進入移位寄存器 _delay_us(5); SER_PORT &= ~_BV(SER_SCK); byte <<= 1; //通過左移,逐個點亮個個數碼管 } SER_PORT |= _BV(SER_RCK); //上升沿觸發,移位寄存器中的數據並行輸出 _delay_us(5); SER_PORT &= ~_BV(SER_RCK); } int main(void) { PORTB = 0xff; //PB 口賦初值為 ff DDRB = 0xff; //PB 口為輸出態 PORTG = 0x00; //PG 口賦初值為 0 DDRG |= _BV(SER_DATA)|_BV(SER_RCK)|_BV(SER_SCK); //PG0,PG1,PG2 為輸出態 PORTB = Led_Disbuf[5]; //數碼管上顯示 5 Send_Byte_HC595(0x03); //第壹位,第二位數碼管點亮 while(1) {}; }