---
video: //player.bilibili.com/player.html?isOutside=true&aid=112648788117984&bvid=BV1pngCeyEGX&cid=500001589252805&p=1&high_quality=1&autoplay=0
---

# 8x8 点阵屏


8x8点阵屏是一种由64个LED灯组成的显示设备，排列成8行8列。这种点阵屏广泛应用于电子项目中，用于显示数字、字母、简单的图形和动画。

![](https://cdn.zhiyanbang.com/md13/WeChat6740a4c83686e293c8a54df38778212b.jpg)

## 原理讲解

### 类型  

大家拿到老许店铺的8*8点阵屏是共阴极。按照老许的教程接线即可。关于共阴极和共阳极说明如下：

- 共阴极：所有LED的阴极（负极）连接在一起。
- 共阳极：所有LED的阳极（正极）连接在一起。


<div>
<img src="https://cdn.zhiyanbang.com/md13/WeChatafb6236a09504652b342aea760fae19a.jpg"  width="400px"/>
<img src="https://cdn.zhiyanbang.com/md13/WeChatb702b58e2f3866cd166a5bc43e858817.jpg" width="400px"/>
</div>

从图中可以LED 的方向我们就知道 ，三角小的一端是阴极，大的一端是阳极。我们让led灯亮，其实就是给对应的高低电频，及共阴极。  


- 共阴极：某一行给 1 ，某一列给 0 ，行连接到高电平
- 共阳极：某一行给 0 ，某一列给 1 ，列连接到高电平
 


8x8点阵屏可以通过多种方式驱动，包括直接使用微控制器的GPIO引脚或使用专门的驱动芯片。以下是一些常用的驱动8x8点阵屏的芯片：74HC595、HT16K33、MAX7219 等芯片。


## 硬件链接


| 器件 | 数量 |
|--------|--------|
| ESP32开发板 | 1 |
| 8*8 点阵屏 | Cell |

![](https://wordpress-1256190069.cos.ap-shanghai.myqcloud.com/md13%2FWeChat47897cc5922d65863816f327df375552.jpg)


一般有字母的一面，是下方。我们摆好方向后，引脚如图所示。

![](https://cdn.zhiyanbang.com/md13/WeChatee1212ac26e5b16222fa99b7e45e73ad.jpg)  

我们找到我们行和列的相关引脚
 
- R: 代表行。 R1-R8 对应引脚为： D23、D5、  D32、D19、D13、D33、D12、D26
- C: 代表列。 C1-C8对应引脚为： D18、D14、D27、D22、D25、D21、D4、D2


## 软件实现

### 先做一个流水灯，看看是不是所有led都正常

-  定义引脚

```javascript
const row_list = [D23,D5,D32,D19,D13,D33,D12,D26]; // 行

const col_list = [D18,D14,D27,D22,D25,D21,D4,D2]; // 列
```

- 全部熄灭函数

```javascript
function clear_all() {
  for (let i = 0; i < row_list.length; i++) {
    row_list[i].write(0);
    col_list[i].write(1);
  }
}

clear_all();
```

- 点亮某个点

```javascript
function running_led(col, row) {
  clear_all();
  digitalWrite(row_list[row], 1); // 打开选定的行
  digitalWrite(col_list[col], 0); // 关闭选定的列
}
```

- 流水灯效果

```javascript
let col = 0;
let row = 0;

setInterval(() => {
  if (col > 7) {
    col = 0;
    row ++;
  }
  if (row > 7) {
     row = 0;
  }
  running_led(col, row);

  col ++;
}, 500);

```

- 完整代码

```javascript
const row_list = [D23,D5,D32,D19,D13,D33,D12,D26]; // 行
 
const col_list = [D18,D14,D27,D22,D25,D21,D4,D2]; // 列
 
// 先关闭所有LED
 
function clear_all() {
  for (let i = 0; i < row_list.length; i++) {
    row_list[i].write(0);
    col_list[i].write(1);
  }
}
 
clear_all();
 
function running_led(col, row) {
  clear_all();
  digitalWrite(row_list[row], 1); // 打开选定的行
  digitalWrite(col_list[col], 0); // 关闭选定的列
}
 
// 开启所选的LED
let col = 0;
let row = 0;
 
setInterval(() => {
  if (col > 7) {
    col = 0;
    row ++;
  }
  if (row > 7) {
     row = 0;
  }
  running_led(col, row);
  col ++;
}, 500);

```
## 逐行显示

```javascript
const row_list = [D23,D5,D32,D19,D13,D33,D12,D26]; // 行
 
const col_list = [D18,D14,D27,D22,D25,D21,D4,D2]; // 列


function clear_all() {
  for(let i = 0;  i< 8; i++) {
    col_list[i].write(1);
    row_list[i].write(0);
  }
}

function line_light(j) {
  for(let i = 0; i< 8; i++ ) {
    col_list[i].write(0);
  }
  row_list[j].write(1);
}

let row = 0;
clear_all();

function running() {
  const timmer = setInterval(() => {
    if (row > 7) {
      clearInterval(timmer);
      row = 0;
      setTimeout(() => {
        clear_all();
        running();
      }, 1000);
      return;
    }
    line_light(row);
    row++;
  }, 1000);

}
running();


```












