我们知道,shiftOut这个函数有四个参数,而且常常用于74hc595控制数码管或者LED的流水灯的程序中,一个74hc595一个shiftOut函数,整在一起,常常把初学者搞晕。这里我们来把关键点捋一捋。
1、四个参数
函数shiftOut(dataPin,clockPin,bitOrder,val)有四个参数,即:dataPin、clockPin、bitOrder、val,其具体含义如下:
dataPin:对于arduino板,它是输出每一位数据的引脚(如某数字口),引脚需配置成输出模式。
clockPin:为位移芯片提供时钟的脚(即指arduino板上的某个数字口),当我们准备将dataPin的数据推送出去时,发送一个高电平(当然,这个引脚须配置成输出模式)。
bitOrder:输出位的顺序,有最高位优先(MSBFIRST)和最低位优先(LSBFIRST)两种方式。
val:所要输出的数据值,该数据值将以byte形式输出。
2、与位移芯片对应关系
dataPin:自然是要对应位移芯片的DS引脚(数据引脚),需要注意的是这些数据必须在SCK引脚(SH_CP)触发上升沿的时候才会被逐位送入位移芯片(如hc595,hc164等芯片)
clockPin:对应的是位移芯片的SH_CP引脚,负责将dataPin送来的数据一位一位的送到芯片的寄存器中,每出现一个上升沿就送一位进入寄存器。
补充:需要补充的是,位移芯片还有一个ST_CP引脚RCK,这个引脚负责输出芯片中已有的数据到8个输出管脚,换句话说,如果没有它的触发,芯片是不会向外输出的,它也是上升沿触发,也就是说需要一个由低到高的电平调变来触发。
总结:SH_CP,负责进,ST_CP负责出,不同的是SH_CP,是逐位的输入,ST_CP一次输出。
3、数据的操作方式
shiftOut函数的作用是将一个数据的一个字节一次性送出,其内部实际是配合clockPin的时钟信号,一个一个bit的就写入了位移芯片,它是一个无返回值函数。从最高有效位(最左边)或最低有效位(最右边)开始,依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
4、假如没有shiftOut
既然说没有它的情况,那么我们就首先了解有它的情况。有了它,我们可以一次向位移寄存器写入一个字节(8个位),类似批处理的方式。所以,没有它,我们就要把字节拆解了一个位一个位的写入位移芯片。这样效率太低,尤其是对于我们的数码管显示操作来说,太不直观了。
注意
shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。
具体有关shiftOut结合595的仿真,请参考我前面的博文。