74HC595 和74HC165的使用
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个接口了,下一步验证一下。 請問程式裡num是什麼?
页:
[1]