Arduino shiftOut函数
🌼函数原型
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) {
uint8_t i,MSBFIRST=1,LSBFIRST=0;
for(i = 0; i < 8; i++) {
if(bitOrder == LSBFIRST)//串行数据输出,高位在先 MSBFIRST ; 低位在先LSBFIRST
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}
shiftOut(dataPin,clockPin,bitOrder,val)
函数形参介绍
shiftOut函数能够将数据通过串行的方式在引脚上输出
相当于一般意义上的同步串行通信
这是控制器与控制器、控制器与传感器之间的常用的通信方式。
- shiftOut函数无返回值
dataPin
:数据输出引脚,数据的每位将逐次输出。引脚模式需要设置成输出clockPin
:时钟输出引脚,为数据输出提供时钟,引脚模式需要设置成输出。bitOrder
:数据位移顺序选择位,该参数为byte类型,有两种类型可选择,分别是高位先入MSBFIRST
和低位先入LSBFIRST
val
:所要输出的数据值。
📝示例程序
int latchPin=8; //ST CP of 74HC595
int clockPin=12;//SH CP of 74HC595
int dataPin=11; //DS of 74HC595
char LED_pin=0x00;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
for(int i=0; i<8; i++)
{
LED_pin=~(0x01<<i);
digitalWrite(latchPin,LOW); //低电位表示启动
shiftOut(dataPin,clockPin,LSBFIRST,~LED_pin);
digitalWrite(latchPin,HIGH); //高电位表示停止
delay(25);
}
LED_pin=0x01;
}
LSBFIRST
Proteus仿真效果
MSBFIRST
仿真效果