|
74hc595是一个三态输出的8位移位寄存器,可以把我们三个io口扩展到8个,同时也支持串联使用扩展更多io口,因为esp8266自带的管脚比较少,有不少被内部占用或者与启动关联,因此剩余可用的引脚不是很多,如果要控制的**设备多,显然不够用,那么此时我们就可用使用1个74hc595来扩展io口,只需要使用8266三个引脚即可。
首先我们要了解595的通信时序和引脚功能来决定如何编写控制时序。
我们可用从网上找一份595的手册来了解详细内容
首先是管脚
最主要的是11脚,12脚 14脚,输出使能端我们可以使用低电平拉低,使595一直保持输出状态,就不用使用多余的引脚控制输出了。
11脚sck是移位寄存器的时钟,在上升沿的时候,14脚的电平被输入到移位寄存器,因此我们首先要使用8位数据填满移位寄存器,最后在12脚rck的上升沿移位寄存器的数据被移动到输出寄存器,实现输出。
接下来,我们再看一下时序的时间要求
可见,大部分的时序要求时间位ns,当然这个ns级别的要求,esp8266是无法实现的,因此我们使用1us来完成通信时序即可。
首先我们编写一个初始化函数,初始化3个引脚,分别用于移位寄存器时钟,储存寄存器时钟和数据输入。
接下来,我们使用一个数组存放我们需要写入的8位数据,使用for循环完成8个时钟,同时取出数组内容传送到数据输入端即可
代码如下:
在每个电平的变换期间我们加入1us的延时用于维持时序即可,现在我们就完成了595的驱动程序。
|
|