|
|
大家好。本人刚玩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[ROWS][COLS] = {
- {'1','2','3'},
- {'4','5','6'},
- {'7','8','9'},
- {'A','B','C'}
- };
- byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
- byte colPins[COLS] = {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[8]={1,2,4,8,16,32,64,128};
- switch(key)
- {
- case '1':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[0]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '2':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[1]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '3':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[2]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '4':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[3]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '5':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[4]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '6':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[5]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '7':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[6]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- case '8':digitalWrite(latchpin,LOW);
- shiftOut(datapin,clockpin,MSBFIRST,a[7]);
- digitalWrite(latchpin,HIGH);
- delay(500);
- break;
- }
- }
复制代码 |
|