74HC595介绍

介绍

74HC595芯片是一个串行输入,并行输出设备。其内部包括一个8位移位寄存器、一个存储器以及三态输出门电路,其中移位寄存器和存储器都有相互独立的时钟。

参考文档

74HC595 说明文档

74HC595 原理说明文档

引脚图

74hc595引脚图
74hc595引脚说明图

原理图(这个是讲述74hc595的原理图)

原理图

8x8点阵

介绍

8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上 点阵一共有两种类型 共阴(AS) 和 共阳(BS) ,这里我推

参考文档

8x8点阵参考文档

电路图

8x8电路图

原理介绍

既然8x8点阵是有64个led二极管组成,那是不是就意味我们可以根据用8组正负极电源就可以控制LED的显示,这样看来就比较简单,示例如下

显示一个点

8x8显示一个点

显示两个点

8x8显示两个点

这样看来一切都显得合情合理,那这样理解8x8点阵就很简单了呀,很容易就可以自己自定义图案了呀,但是我当我们需要显示三个点的时候问题就来了

显示三个点

8x8显示三个点

你会发现,当我们需要显示三个点的时候,会显示四个点!所以说我们上述的原理是错误的,因为我们有64个led,所以就需要64组才能单独控制!但是会不会有什么其他的方法呢?其实是有的,接着往下看!

原理

由于我们人眼能看的刷新频率是很低的,所以只要相应足够快,而且保持连贯我们看到的就是一个完整的画面,就像电影一样,都是一帧一帧的,点整其实也是这样子的,是一种逐行扫描的显示方式

原理图

就是在短时间内,先显示第0行,再显示第2行,一次类推,然后保持循环,这样就能正常显示我们需要的内容

74hc595 驱动 8x8点阵

参考文档

参考文档1-这个比较详细

参考文档1-这个比较侧重介绍74hc595

这个是官方的文档写得挺好的,不过是英文的

电路图

不想焊接或者使用面包板的同学可以淘宝直接购买套件,动手能力比较强的同学可以自己动手尝试一下,但是这个74HC595容易烧坏,建议多买几块,以防止意外

电路图

接线图

接线图

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//**************************************************************//
// Name : shiftOutCode, Dual Binary Counters //
// Author : Carlyn Maw, Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//**************************************************************//

//Leo tested with smile(Loop() changed) 2012.11.21

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
//Start Serial for debuging purposes
Serial.begin(9600);
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT); //让三个脚都是输出状态
}

void loop() {
unsigned int b[8][2] = {
{0x7f, 0x3c}
, {0xbf, 0x42}
, {0xdf, 0xa5}
, {0xef, 0x81}
, {0xf7, 0xa5}
, {0xfb, 0x99}
, {0xfd, 0x42}
, {0xfe, 0x3c}
};

show(b);
}

/**
* 显示点阵内容
* @param a:点阵内容数据
*/
void show(unsigned int a[8][2]) {
for ( int i = 0; i < 8; i++) {
//Smile for 8x8 Matrix LED
digitalWrite(latchPin, 0);
for (int j = 0; j < 2; j++) {
shiftOut(dataPin, clockPin, LSBFIRST, a[i][j]);
}
digitalWrite(latchPin, 1);
}
}

感悟

写到最后,我个人是不推荐用74hc595
来驱动8x8点阵的,由于点阵是扫描显示,所以在一定程度上来说它只能让我们只显示一个图案,如果说你需要显示动图,或者滚动显示,这个实现起来就会比较麻烦,但是学习使用还是很好的,适合我们这样的初学者入门学习,而且淘宝上有74hc595的线程的模块买,不想焊接的同学可以买现成的套装,最后如果你真的像驱动显示8x8的点阵,我推荐使用max7219芯片,后期我也会出一个关于max7219驱动8x8点阵的帖子的,目前还在学习中…

鸣谢

文章我使用了很多来自其他平台的文章,在这里我表示感谢,也表示歉意,没有一个一个署名的著名他们的文章和姓名,也没有事先取得用户的意见就将文章链接写到我这个帖子里面,实属不对,在这里你发现有你的文章链接,欢迎跟我联系,我会一一署名鸣谢

欢迎添加QQ1286396784(单纯学习交友,无其他不良目的)共同学习进步