名字不是重点 发表于 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://www.51hei.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); } } } |