|
發布時間: 2021-3-2 18:18
正文摘要:驅動點陣有很多方法,比如單用HC138,單用HC595以及它兩混用均可,本壇也有許多例子供大家參考,但是它們都是采用級聯的方式來做,出于初學者的好奇心,想用一片595控制列,一片控制行,而不采用級聯,然而程序無法 ... |
名字不是重點 發表于 2021-3-5 09:22 我用的是stcp分開,ds、shcp分別共用IO口。 |
| 舉一反三而已。 |
cn_zhx 發表于 2021-3-3 16:09 不會的 兩個芯片的數據 同時發就行了 |
| MR接地了, 595不能工作。 |
| 兩片不級聯,不能共用移位時鐘和鎖存時鐘信號,把這兩個信號分開搞試試。公用的話,兩片同時都會移位和鎖存,數據會亂的。 |
wulin 發表于 2021-3-2 21:52 非常感謝你的分享。確實,按照你的原理圖編程能夠實現595單獨控制點陣的列和行(非級聯,仿真通過)。我認為這種方法雖然多用1個IO口,但控制靈活,對于初學者來說更容易理解硬件原理,編程好像更容易一點。 |
| 595好像是總線控制吧,你要想一個控制行或列用573好些吧 |
| 這是我的貼子 趕緊去看看 保證讓你徹底搞懂595和點陣 http://m.raoushi.com/bbs/dpj-200961-1.html |
| 100%程序的問題,我們量產的點陣模塊就是兩片595驅動列,兩片595驅動行。 |
Tuier 發表于 2021-3-2 18:18 兩片74HC595分別驅動點陣LED行/列完全可以,但要多用1個IO口。接法如下,程序也要修改。
|
|
程序: #include <reg51.H> //#define uint unsigned int //#define uchar unsigned char typedef unsigned char u8; typedef unsigned int u16; sbit ds1 =P2^0; sbit shcp = P2^1; sbit stcp = P2^2; sbit ds2 = P2^3; u8 code display[]={ 0x66,0x99,0x81,0x81,0x42,0x24,0x18,0x00};//“心”圖案 u8 code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(u8 b)//延時 { while(b--); } /**************** 向HC595發送一個字節函數 ******************/ void Send1(u8 dat) { u8 i; for(i=0;i<8;i++) { ds1 =dat&0x01; dat>>=1; shcp = 1; shcp = 0; } stcp = 1; stcp = 0; } void Send2(u8 ddat) { u8 j; for(j=0;j<8;j++) { ds2 =ddat&0x80; ddat<<=1; shcp = 1; shcp = 0; } stcp = 1; stcp = 0; } void main() { u8 k; while(1) { for(k=0;k<8;k++) { Send2(wei[k]); Send1(display[k]); delay(100); } } } |