我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第一篇博客,讲述74HC595芯片的工作原理
一般情况下,使用单片机来控制LED。一个引脚,控制一个LED,是最直观的方法。但也是最笨的方法。引脚对于单片机来说是珍贵的资源,同样性能的芯片引脚越多,价格就越贵。然而有些外设会占用很多引脚,例如LED屏幕。理论上来讲,一个LED需要一个引脚来操作,64个LED组成8×8屏幕,就需要多达64个引脚。但聪明的工程师会节省引脚,把LED按照行列连接,形成矩阵,只需要16个引脚。如果感觉用16个引脚还是有点多的话,可以考虑使用移位寄存器级联应用电路,最少只需要3个引脚,就可以控制很多个LED,多于64个,理论上甚至无限多。
74HC595具有1个8位移位寄存器和1个存储器,具备三态输出功能。移位寄存器和存储寄存器有相互独立的时钟。数据在移位寄存器时钟输入的上升沿输入到移位寄存器中,在存储寄存器时钟输入的上升沿输入到存储寄存器中去。移位寄存器有1个串行移位输入,和1个串行输出,还有1个异步的低电平复位,存储寄存器有1个并行8位的,具备三态的总线输出,当使能OE时(为低电平时),存储寄存器的数据输出到总线。
很多厂家都有生产该类芯片(比如TI、NXP等),虽然都是595芯片,但名称略有区别,如74lv595、74ls595、74hc595等,除此之外,引脚名称、速度、电压、电路、输入输出电平等,也不尽相同,具体的需要参考对应的元件手册。595芯片最大的一个特点就是可以级联,最少只需要占用控制器3个IO口就可以控制很多片595。只要电路设计合理,级联上百片不成问题。想象一下如果用来驱动继电器、LED等1个引脚就能控制的设备,级联100片595,每片可以驱动8个设备,总共可以驱动800个,所占用的只是控制器3个IO口
引脚 | 名称 | 别名 | 电路板丝印 | 功能 | 说明 |
15,1-7 | QA-QH | Q0-Q7 | 并行数据输出 | ||
9 | QH’ | Q7S | 串行数据输出 | 当移位寄存器内的数据溢出时,把最先存入的1bit数据从此脚挤出去。常用于级联。 | |
10 | nRESET | 复位 | 低电平有效,可以清除移位寄存器中的数据。 | ||
11 | SRCLK | SHCP | CLOCK | 移位寄存器时钟输入 | 上升沿时,把新的1bit数据挤入移位寄存器 |
12 | RCLK | STCP | LANCH | 存储寄存器时钟输入 | 上升沿时,把移位寄存器的8bit数据全部存入存储寄存器。 |
13 | 输出使能 | 低电平有效,把存储寄存器中的8bit数据输出给QA-QH | |||
14 | SER | DS | DI | 数据串行输入 | 数据在此引脚上一位一位输入。 |
8,16 | GND,VCC | 地,电源 |
一般情况下为了说明74HC595的工作原理,都要讲解它的真值表与时序图。但是这两者都没有体现出移位寄存器与存储寄存器的工作逻辑,并且有些信息并不实用,所以本文不讲真值表与时序图,只结合下图来讲解74HC595的工作原理,并梳理关键点。
1:在SRCLK上升沿时,来自SER的数据可以存入移位寄存器。移位寄存器只有8位,如果数据溢出,溢出的数据从QH’输出(图中用空心箭头表示)。
2:在RCLK上升沿时,移位寄存器的8位数据全部传给存储寄存器(图中用虚线表示)。此时如果OE是低电平,8位数据会并行输出。
3:SRCLR在低电平时可以清空移位寄存器,一般只在第一次安全上电时拉低,其它时间置高。OE在低电平时允许输出,高电平输出三态。三态既不是高电平,也不是低电平,被称为高阻态。实际应用时OE常常设为低电平。
4:假设来自于控制芯片的数据是ABCD EFGH,每个字母表示1bit数据,非0即1。那么会把高位的数字A最先存入移位寄存器,第1个数据会从QH输出,存入的第8个数据会从QA输出。