“第二十七课--Microduino 8*8点阵静态显示/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
Pkj讨论 | 贡献
(Created page with "{{Language|Lesson_27--Microduino_8*8_Lattice_Static_Display}} {| style="width: 800px;" |- | ==目的== 本教程将教大家如何使用2个74HC595芯片来控制8*8点阵LED,...")
(没有差异)

2014年3月13日 (四) 05:32的版本

Language English

目的

本教程将教大家如何使用2个74HC595芯片来控制8*8点阵LED,显示一个静态的笑脸

设备


8*8点阵LED简介: 8*8点阵LED就是把64个发光二极管做成点阵的形式,由于型号不同,引脚的定义也不同,本例用到的8*8点阵LED的型号是:LD-1088BS,其引脚定义如下图:


原理图


引脚表:

点阵ROW 点阵16pin 74HC595 74HC595
1 13 15 Q0
2 3 1 Q1
3 4 2 Q2
4 10 3 Q3
5 6 4 Q4
6 11 5 Q5
7 15 6 Q6
8 16 7 Q7
点阵COL 点阵16pin 74HC595 74HC595
1 5 15 Q0
2 2 1 Q1
3 7 2 Q2
4 1 3 Q3
5 12 4 Q4
6 8 5 Q5
7 14 6 Q6
8 9 7 Q7


程序

    //Pin 连接到 74HC595的ST_CP
    int latchPin = 8;
    //Pin 连接到 74HC595的SH_CP
    int clockPin = 12;
    ////Pin 连接到 74HC595的DS
    int dataPin = 11;
     
     
     
    void setup() {
      //波特率为9600,用于调试   
      Serial.begin(9600);
      //设置 latchpin 为 output
      pinMode(latchPin, OUTPUT);
     
    }
     
    void loop() {
      //Smile for 8x8 Matrix LED
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B01111111);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B00111100);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B10111111);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B01000010);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11011111);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B10100101);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11101111);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B10000001);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11110111);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B10100101);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11111011);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B10011001);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11111101);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B01000010);  //行row
      digitalWrite(latchPin, 1);
     
      digitalWrite(latchPin, 0);
      shiftOut(dataPin, clockPin, B11111110);  //掩盖的列(col)
      shiftOut(dataPin, clockPin, B00111100);  //行row
      digitalWrite(latchPin, 1);
     
     
    }
     
    void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
     
      //初始化设置
      int i=0;
      int pinState;
      pinMode(myClockPin, OUTPUT);
      pinMode(myDataPin, OUTPUT);
     
      //clear everything out just in case to
      //prepare shift register for bit shifting
      digitalWrite(myDataPin, 0);
      digitalWrite(myClockPin, 0);
     
      //for each bit in the byte myDataOut�
      //NOTICE THAT WE ARE COUNTING DOWN in our for loop
      //This means that %00000001 or "1" will go through such
      //that it will be pin Q0 that lights.
      for (i=7; i>=0; i--)  {
        digitalWrite(myClockPin, 0);
     
        //if the value passed to myDataOut and a bitmask result
        // true then... so if we are at i=6 and our value is
        // %11010100 it would the code compares it to %01000000
        // and proceeds to set pinState to 1.
        if ( myDataOut & (1<<i) ) {
          pinState= 1;
        }
        else {       
          pinState= 0;
        }
     
        //Sets the pin to HIGH or LOW depending on pinState
        digitalWrite(myDataPin, pinState);
        //register shifts bits on upstroke of clock pin  
        digitalWrite(myClockPin, 1);
        //zero the data pin after shift to prevent bleed through
        digitalWrite(myDataPin, 0);
      }
     
      //stop shifting
      digitalWrite(myClockPin, 0);
    }

调试

步骤一:把代码复制到IDE中,编译

步骤二:电路连接如下图:

为了更好的保护电路,可以在其中一个74HC595芯片连接8*8点阵之间的八条线中各加一个220欧姆电阻,本例中没有加入电阻所以LED特别亮,如果点阵的质量不好的话很容易坏掉。

步骤三:运行代码

结果

8*8点阵LED上面会显示一个笑脸

视频