595串入并出有很多的例子,这里只简单写了一下代码。 - int st = 5;
- int sh = 6;
- int ce = 4;
- int ds = 3;
- byte data1,data2 ;
- byte dd;
- void setup()
- {
- pinMode(ds,OUTPUT);
- pinMode(st,OUTPUT);
- pinMode(sh,OUTPUT);
- pinMode(ce,OUTPUT);
-
-
- }
- void loop()
- {
- digitalWrite(ce,LOW);
- write_595_1(st,sh,ds,data1);
- write_595_2(st,sh,ds,data2);
-
- }
- void write_595_1(int stcp,int shcp, int dspin, byte data)
- {
- digitalWrite(stcp,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
- shiftOut(dspin,shcp,MSBFIRST,data);//
- digitalWrite(stcp,HIGH); //将ST_CP这个针脚恢复到高电平
- }
- void write_595_2(int stcp,int shcp, int dspin, byte data1,byte data2)
- {
- digitalWrite(stcp,LOW); //将ST_CP口上面加低电平让芯片准备好接收数据
- shiftOut(dspin,shcp,MSBFIRST,data1);//
- shiftOut(dspin,shcp,MSBFIRST,data2);//
- digitalWrite(stcp,HIGH); //将ST_CP这个针脚恢复到高电平
- }
复制代码
data1,data2,需要在实际运行时带入数据。
现在来看一下165的使用,其实很早就算是成功了,只是一只以为165和595一样,把ds作为数据接口,后来看了一些资料才发现,165读取数据是Q7,也就是第9脚,当然第7脚也可以,不过是互补的数据。 - int ds = 8; // Q7
- int ce = 9;
- int cp =10;
- int pl =11;
- int ms =5;
- void setup()
- {
- pinMode(ce,OUTPUT);
- pinMode(cp,OUTPUT);
- pinMode(pl,OUTPUT);
- pinMode(ds,INPUT);
- Serial.begin(9600);
- }
- void loop()
- {
- digitalWrite(ce, 0);
- digitalWrite(pl, 0);
- Serial.println(Read_165(),BIN);
- delay(100);
- }
- int Read_165(int ds,int cp,int pl,int num)
- {
- int data;
- int temp;
-
- digitalWrite(pl, 0);
- delayMicroseconds(ms);
- digitalWrite(pl, 1);
- delayMicroseconds(ms);
- data = 0 ;
- for(int i = 0 ; i < 8 * num; i++)
- {
- data = data << 1;
- digitalWrite(cp, 0);
- delayMicroseconds(ms);
- temp = digitalRead(ds);
- data |= temp;
- digitalWrite(cp, 1);
- delayMicroseconds(ms);
- }
- return data ;
- }
复制代码
除了CE接口可以省略外,如果两个同时使用就要6个接口,不知道能否进行功用,CP,PL,ST,SH,DS,Q7复用,用CE来片选,这样需要5个接口,如果公用一个CE,用非门连接595和165的CE这样就需要4个接口了,下一步验证一下。 |