الدالة shiftOut()
في أردوينو
تزيح الدالة shiftOut()
بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى HIGH
. يمكن ترتيب عملية إزاحة البتات وكتابتها على الرجل إمَّا بدءًا من البت الأكثر أهمية (أقصى اليسار) أو من البت الأقل أهمية (أقصى اليمين).
البنية العامة
shiftOut(dataPin, clockPin, bitOrder, value)
في كل بت، تقدح الرجل clockPin
عملية كتابة البت التالي من القيمة value
على الرجل dataPin
عند الجبهة الصاعدة للإشارة (أي عندما تنتقل النبضة من LOW
إلى HIGH
) ثم يجب حينها على الرجل clockPin
أن تعود للحالة المنخفضة (LOW
) لتشير إلى أنَّ البت كتب على الرجل وأصبح متاحًا.
إن كنت تتعامل مع جهازٍ يعمل أو يولِّد نبضات عند الجبهات الصاعدة، فيجب عليك أن تتأكد أنَّ حالة الرجل clockPin
هي LOW
قبل استدعاء الدالة shiftOut()
عبر استدعاء digitalWrite(clockPin, LOW)
مثلًا.
ملاحظة: هذه العملية التي تجريها الدالة هي تنفيذٌ برمجيٌّ؛ توفر أردوينو المكتبة SPI التي تستعمل التنفيذ العتادي لهذه العملية التي تتميز بسرعتها سوى أنَّها تعمل على أرجل معيَّنة فقط.
المعاملات
dataPin
عددٌ صحيح يشير إلى الرجل التي سيُظهَر عليها كل بت من بتات القيمة value
تباعًا.
clockPin
عددٌ صحيح يشير إلى الرجل التي تمثِّل نبضات الساعة التي تقدح (عند الجبهة الصاعدة) عملية كتابة بتٍّ واحدٍ على الرجل dataPin
.
bitOrder
يحدِّد هذا المعامل ترتيب عملية إزاحة البتات المكتوبة على الرجل dataPin
عند كل جبهة صاعدة لنبضات الرجل clockPin
. يأخذ هذا المعامل القيمة MSBFIRST
إن كان أول بت يراد إزاحته وكتابته هو البت الأكثر أهمية أو القيمة LSBFIRST
إن كان أول بت يراد إزاحته وكتابته هو البت الأقل أهمية.
value
بايتٌ من البيانات يراد إزاحته وإخراجه على الرجل dataPin
.
القيم المعادة
لا يعاد أي شيء.
أمثلة
مثالٌ على استخدام مسجل الإزاحة 74HC595 والتحكم به:
//**************************************************************//
// Name : shiftOutCode, Hello World //
// Author : Carlyn Maw,Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
// لمسجل الإزاحة ST_CP وصل الرجل 8 مع الرجل
int latchPin = 8;
// لمسجل الإزاحة SH_CP وصل الرجل 12 مع الرجل
int clockPin = 12;
//// لمسجل الإزاحة DS وصل الرجل 11 مع الرجل
int dataPin = 11;
void setup() {
// تهيئة الأرجل إلى أرجل خرج
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// استعمال عداد تصاعدي
for (int j = 0; j < 256; j++) {
// منخفضة والإبقاء عليها كذلك طالما تجري عملية النقل latchPin جعل جهد الرجل
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
// لإبلاغ شريحة المسجل latchPin إعادة رفع جهد الرجل
// بالتوقف عن انتظار القيمة المراد نقلها وإزاحتها
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
للاطلاع على كيفية وصل الدارة الإلكترونية المرافقة لهذا المثال، انتقل إلى هذا الدرس.
ملاحظات وتحذيرات
يجب تهيئة الرجل dataPin
والرجل clockPin
مسبقًا إلى وضع الإخراج (output) عبر استدعاء الدالة pinMode()
.
كتُبَت الدالة shiftOut()
للعمل على إظهار بايتٍ واحدٍ (8 بت) من البيانات فقط، لذا تتطلب عملية إظهار قيم أكبر من 255 إلى تجزئتها إلى مرحلين كما موضح في الشيفرة التالية:
// MSBFIRST إزاحة البت الأكثر أهمية أولًا
int data = 500;
// إزاحة البايت العلوي
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// إزاحة البايت السفلي
shiftOut(dataPin, clock, MSBFIRST, data);
// LSBFIRST إزاحة البت الأقل أهمية أولًا
data = 500;
// إزاحة البايت السفلي
shiftOut(dataPin, clock, LSBFIRST, data);
// إزاحة البايت العلوي
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
انظر أيضًا
- الدالة
noTone()
: توقف توليد موجةٍ مربَّعةٍ على رجل معيَّنة أُنشئَت باستعمال الدالةtone()
. - الدالة
pulseIn()
: تحسب طول نبضةٍ (إمَّاHIGH
أوLOW
) على رجل محدَّدة. - الدالة
pulseInLong()
هي دالةٌ بديلةٌ محسَّنةٌ للدالةpulseIn()
، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة. - الدالة
shiftIn()
: تزيح بايتًا من البيانات من رجل محدَّدة إلى متغيِّر مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلىHIGH
. - الدالة
tone()
: تولِّد موجةً مربَّعةً بتردد محدَّد (وبنسبة 50% لدورة العمل [duty cycle]) على رجل معيَّنة.