wuzhaoxuan 发表于 2015-9-7 09:22:38

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;
         }
}

wuzhaoxuan 发表于 2015-9-7 09:49:52

现在两片的话,按两次会把第一片的数据传入第二片。现在我想读取第二片的数据一起传入第一片,但不知道如何获取:dizzy::dizzy::dizzy:

zoologist 发表于 2015-9-7 11:24:48

有做好的模块不行么?

实在不行直接上2560 可不可以?

越简单越可靠啊

hubertdong 发表于 2015-9-7 11:43:47

不明白什么意识?

wuzhaoxuan 发表于 2015-9-7 12:16:49

zoologist 发表于 2015-9-7 11:24 static/image/common/back.gif
有做好的模块不行么?

实在不行直接上2560 可不可以?


嗯。打算用51的,引脚比较多。

164335413 发表于 2015-9-7 17:12:58

如果你是4片级联,最好是每次都将四组数据写入后在将ST_CP送入上升沿,这样就不会出现这种情况了。
页: [1]
查看完整版本: 74HC595级联求助