用户工具

站点工具


reference:language:shiftout

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
zh:reference:language:shiftout [2014/08/10 13:45] – [例子] 弘毅reference:language:shiftout [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== shiftOut() ======
 +
 +===== 描述 =====
 +
 +将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
 +
 +**注意:**如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。
 +
 +**注意:**这是一个软件实现;ocrobot提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。
 +===== 语法 =====
 +
 +shiftOut(dataPin, clockPin, bitOrder, value)
 +===== 参数 =====
 +
 +dataPin:输出每一位数据的引脚(int)
 +\\ clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)
 +\\ bitOrder:输出位的顺序,最高位优先或最低位优先
 +\\ value: 要移位输出的数据(byte)
 +===== 返回 =====
 +
 +
 +===== 注意 =====
 +
 +dataPin和clockPin要用pinMode()配置为输出。
 +shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。
 +<code cpp>
 +//最高有效位优先串行输出
 +int 数据= 500;
 +//移位输出高字节
 +shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  
 +//移位输出低字节
 +shiftOut(data, clock, MSBFIRST, data);
 +
 +//最低有效位优先串行输出
 +data = 500;
 +//移位输出低字节
 +shiftOut(dataPin, clock, LSBFIRST, data);  
 +//移位输出高字节
 +shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 
 +</code> 
 +===== 例子 =====
 +
 +相应电路,查看tutorial on controlling a 74HC595 shift register
 +<code cpp>
 +// ************************************************ ************** //
 +//  Name    : shiftOut代码, Hello World                         //
 +//  Author  : Carlyn Maw,Tom Igoe                               //
 +//  Date    : 25 Oct, 2006                                      //
 +//  版本 : 1.0                                               //
 +//  注释:使用74HC595移位寄存器从0到255计数         //
 +//
 +// ************************************************ ****************
 +
 +//引脚连接到74HC595的ST_CP
 +int latchPin = 8;
 +//引脚连接到74HC595的SH_CP
 +int clockPin = 12;
 +//引脚连接到74HC595的DS
 +int dataPin = 11;
 +
 +void setup() {
 +//设置引脚为输出
 +  pinMode(latchPin, OUTPUT);
 +  pinMode(clockPin, OUTPUT);
 +  pinMode(dataPin, OUTPUT);
 +}
 +
 +void loop() {
 +  //向上计数程序
 +   (J = 0; J <256; J + +){
 +     //传输数据的时候将latchPin拉低
 +digitalWrite(latchpin, LOW);
 +     shiftOut的 (dataPin,clockPin,LSBFIRST,J);
 +    //之后将latchPin拉高以告诉芯片
 +     //它不需要再接受信息了
 +digitalWrite(latchpin, HIGH);
 +     delay(1000);
 +
 +}
 +}
 +</code>
 +