74HC595级联求助
大家好。本人刚玩arduino之前没有学过51单片机之类的。由于本人是电工,学的是plc编程。跟单片机编程形式不一样。现在我想做一个按键控制继电器的。用plc控制的话成本太高,因为只是单纯的驱动继电器。而且位数输出越多就越贵。现在想用矩阵扫描,用74hc595做级联扩展。前两行键盘控制一个595,第三行控制第二个595,第四行控制第三个595。我看了一下论坛的教程,还是不太明白。我是想三片的数据互不干扰,我按第一行。第二第三个595的数据不变。是延迟一次数据?还是发个空数据?下面那个是一片控制的。测试能否实现。#include <Keypad.h>int latchpin = 12;
int clockpin = 11;
int datapin = 9;
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'A','B','C'}
};
byte rowPins = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,0);
digitalWrite(latchpin,HIGH);
}
void loop(){
char key = keypad.getKey();
char a={1,2,4,8,16,32,64,128};
switch(key)
{
case '1':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '2':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '3':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '4':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '5':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '6':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '7':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
case '8':digitalWrite(latchpin,LOW);
shiftOut(datapin,clockpin,MSBFIRST,a);
digitalWrite(latchpin,HIGH);
delay(500);
break;
}
} 现在两片的话,按两次会把第一片的数据传入第二片。现在我想读取第二片的数据一起传入第一片,但不知道如何获取:dizzy::dizzy::dizzy: 有做好的模块不行么?
实在不行直接上2560 可不可以?
越简单越可靠啊 不明白什么意识?
zoologist 发表于 2015-9-7 11:24 static/image/common/back.gif
有做好的模块不行么?
实在不行直接上2560 可不可以?
嗯。打算用51的,引脚比较多。 如果你是4片级联,最好是每次都将四组数据写入后在将ST_CP送入上升沿,这样就不会出现这种情况了。
页:
[1]