القرية الإلكترونية - الكترونيات - كمبيوتر - هاردوير - خدمات المواقع - كهرباء - فضائيات - جوال - اتصالات - تكييف وتبريد - اجهزة الانتاج الزراعي - كهرباء السيارات

كود تفعيل العضوية - الابلاغ عن روابط لاتعمل - صيانة التلفزيون - الحاسبة - الأعضاء المتميزين - البرامج و المخططات - بث مباشر للقنوات الفضائية - إذاعة - تردد القنوات - بحث


لوحة مفاتيح عربية

العودة   منتدى القرية الإلكترونية > القسم الالكتروني > منتدى الإلكترونيات
التسجيل       اجعل كافة المشاركات مقروءة

منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

رد
 
أدوات الموضوع
قديم 11-05-2016, 09:10 PM   #1
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تصنع واحدة خاصة بك

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تصنع واحدة خاصة بك
تمهيد :
وحدات العرض LCD المعتمدة على الميكروكونترولر HD44780 تحظى بشعبية كبيرة من أجل المشاريع المدمجة لأنها رخيصة وسهلة الربط والتوصيل ، ويمكنها عرض الأحرف ، وتستهلك قدرة أقل بكثير من وحدات العرض السفن سيجمنت ، ومعظم برامج الترجمة تمتلك مكتبة دوال خاصة بها . ولكن ، العيب الوحيد هو أنها تتطلب على الأقل 6 أطراف دخل/خرج من الميكروكونترولر . حسنا، قد تسأل، أليس ذلك أقل مما تتطلبه وحدات السفن سيجمنت ؟ الإجابة : نعم، هذا صحيح ولكن هناك ظروف حيث قد لا تجد أطراف كافية لوحدة العرض LCD. على سبيل المثال ، إذا كنت تنوى تصميم جهاز استشعار بدرجة الحرارة مبنى على الميكروكونترولر PIC12F683 ، والذى لديه 6 أطراف دخل/خرج فقط ، فقد لا يكون لديك أطراف لربط LCD . أحد الحلول فى مثل هذه الظروف هو استخدام وحدة العرض LCD التسلسلية . لكنه قد لا تكون متاحة فى السوق كما أن ثمنها أكثر من ضعف وحدة LCD القياسية والتى تعتمد على HD44780 . شاشات LCD التسلسلية لا يزال يكون بها وحدة LCD قياسية لكنها تمتلك وحدة إضافية والتى تستقبل البيانات / الأوامر من الميكروكونترولر فى شكل تسلسلى وتحولها إلى الشكل المتوازى المقابل والمناسب لدخل وحدة LCD القياسية بالميكروكونترولر D44780 .
الهدف من هذا الموضوع هو استعراض كيفية صنع شاشة LCD تسلسلية باستخدام ثلاثة خطوط لاستخدامه مع الميكروكنترولر ذات الأطراف قليلة العدد مثل سلسلة PIC12F وذلك عن طريق استخدام مسجل إزاحة دخل تسلسلى خرج متوازى (هنا سوف نستخدم الدائرة المتكاملة 74HC595 ) . ولقد تم اختيار الميكروكونترولر PIC12F683 . وحيث أن الدائرة المتكاملة 74HC595 هى مجرد مسجل الإزاحة ليس إلا ، لذلك يقع العبء على الميكروكونترولر المضيف (PIC12F683) لنقل ،وبشكل مناسب ، بيانات أحرف /أوامر وحدة العرض LCD وإشارات التحكم فى شكل تسلسلى . يتم دمج هذا الجزء الذكى داخل ذاكرة برنامج الميكروكونتروار PIC12F683.
الأطراف الثلاثة المطلوبة من الميكروكونترولر PIC12F683 هى كما يلى :
1- طرف نقل البيانات التسلسلية Serial data إلى مسجل الإزاحة 74HC595 .
2- إشارة الساعة Clock signal من أجل مسجلى الإزاحة والتخزين بمسجل الإزاحة 74HC595 .
3- إشارة التمكين Enable signal إلى موديول LCD القياسى مع HD44780 .





التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 12-05-2016 الساعة 06:32 AM.
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً khamis54 ( شكر العضو على هذه المشاركة )
اعجاب khamis54 ( أعجبته المشاركة )
اعلانات
قديم 11-05-2016, 09:42 PM   #2
أمجد حشمت موسى
مهندس متواجد

المشاركات: 53
أحصائية الترشيح

عدد النقاط : 11


النشاط

معدل تقييم المستوى: 0
افتراضي

جزاك الله كل خير على هذه المعلومات
أمجد حشمت موسى غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً F.Abdelaziz ( شكر العضو على هذه المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
قديم 11-05-2016, 11:11 PM   #3
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

نبذة عن مسجل الإزاحة 74HC595 :
74الدائرة المتكاملة 74HC595 هى مسجل إزاحة ،عالى السرعة ، 8 بت دخل تسلسلى ، خرج تسلسلى أو متوازى . كما أنه أيضا على سجل ، ومخارج ثلاثية الحالة . سجلى الإزاحة والتخزين له خط ساعة منفصل هما SH_CP و ST_CP على التوالى . يتم إزاحة البيانات فى سجل الإزاحة عند الحافة الصاعدة لنبضة الساعة SH_CP ، ومحتويات مسجل الإزاحة سوف تنتقل إلى مسجل التخزين عند الحافة الصاعدة لنبضة الساعة ST_CP . إذا تم توصيل خطى الساعة معا ، فوسوف يكون مسجل الإزاحة متقدما عن مسجل التخزين بنبضة ساعة واحدة . طرف تمكين الخرج OE ، عندما يتم سحبه إلى الحالة المنخفضة low ، يمكن البيانات ذات 8 بتات الموجودة بسجل التخزين من الظهور على المداخل المتوازية
Q0-Q7 .



ولهذا الغرض يتم ربط خطى الساعة SH_CP و ST_CP معا وتشغيلها معا بطرف من أطراف الميكروكونترولر. لذلك ، فإن مخارج مسجل التسجيل تكون متأخرة (خلف) مسجل الإزاحة بنبضة ساعة واحدة ، وهذا يتطلب نبضة ساعة إضافية بعد أن يتم تغذية آخر بت إلى المدخل التسلسلى بحيث تظهر على المخارج .
نبذة عن وحدة LCD المعتمدة على الميكروكونترولر HD44780 :
هذه الشاشة تستخدم 14 طرف للتوصيل : 8 خطوط بيانات 8 data lines (D0-D7) ، وثلاثة خطوط تحكم
3 control lines (RS, E, R/W), ، وثلاثة خطوط قدرة (Vdd, Vss, Vee) . بعض شاشات LCD تأتي مع ميزة الإضاءة الخلفية والتي تساعد على قراءة البيانات وعرضها في ظروف الإضاءة المنخفضة. فى هذه الحالة يكون لدى الشاشة اثنين من أطراف التوصيل الإضافية (LED+ and LED-) .
وصف الأطراف :
أطراف التحكم :
طرف التحكم RS (اختيار السجل) يحدد ما إذا كان نقل البيانات بين موديول LCD والميكروكونترولر هو بيانات أحرف فعلية أو أو أمر/حالة command/status . عندما يحتاج الميكروكونترولر إلى إرسال أوامر commands إلى موديول LCD أو قراءة حالة الموديول ، يجب سحب هذا الخط إلى الحالة المنخفضة . بالمثل ، يجب سحب هذا الخط إلى الحالة المرتفعة إذا احتاج الميكروكونترولر إرسال أو استقبال بيانات حرف إلى أو من موديول LCD .
طرف التحكم R/W : يحدد اتجاه انتقال البيانات . إذا تم سحبه إلى الحالة المنخفضة ، فإن بيانات الأوامر أو الحرف يتم كتابتها (إرسالها) إلى موديول LCD . وإذا تم سحبه إلى الحالة المرتفعة ، يتم قراءة بيانات الحرف أو معلومات الحالة من سجلات موديول LCD . هنا ، سوف نستخدم طريق واحد لنقل البيانات ، أى من الميكروكونترولر إلى موديول LCD ، لذلك فإن الطرف R/W سوف يتم توصيله بالأرضى بشكل دائم .
طرف التحكم E : يتحكم فى إطلاق (بدء) النقل الفعلى للبيانات . عند الكتابة إلى شاشة LCD ، يتم نقل البيانات فقط عند الانتقال من الحالة المرتفعة إلى الحالة المنخفضة (الحافة الهابطة) للطرف E .
.


أطراف مصدر القدرة :
يستخدم الجهد +5V DC لتشعيل موديول LCD ، لكن البعض منها قد يعمل على مدى أوسع من الجهد (3.0 to 5.5 V) . يجب توصيل الطرف Vdd (2) بالجهد الموجب لمصدر القدرة وتوصيل الطرف Vss (1) إلى الأرضى . الطرف Vee(3) مخصص من أجل ضبط تباين الشاشة ويتم توصيله بجهد بين 0V و 2V عن طريق مقاومة متغيرة .
أطراف البيانات :
الأطراف D0-D7(7-14) هى أطراف البيانات . يمكن تحقيق انتقال البيانات من وإلى الشاشة إما بنظام 8-bit أو بنظام
4-bit . نظام 8-bit يستخدم جميع خطوط البيانات الثمانية لنقل بايت ، بينما فى نظام 4-bit يتم نقل البايت باعتباره مكون من 2 نبل كل نبل مكون من 4-bit . فى الحالة الأخيرة ، يتم فقط استخدام الأربعة خطوط العليا للبيانات (D4-D7) . هذه التقنية تكون مفيدة لأنها توفر بعض من أطراف الدخل /الخرج للميكروكونترولر .

مخطط الرسم البياني لهذا المشروع هو بسيطة الى حد كبير. كما ذكر سابقا، فإن جزءا تحديا من هذا المشروع هو برنامج التشغيل المطلوبة لPIC12F683. يستخدم لنقل البيانات LCD وضع 4 بت. لذلك، يتم إرسال أية بيانات الأوامر أو حرف 8 بت في خطوتين: أرسل أعلى عاب الأول، ثم عاب أقل. ويرتكز دبوس R / W السيطرة لأنه لا يوجد بيانات أو وضع قراءة من وحدة LCD في هذا المشروع. يتم نقل البيانات عاب 4 بت والتسجيل اختر (RS) إشارة التحكم بشكل متسلسل إلى 74HC595. تظهر في Q0-Q4 على نبض مدار الساعة 6TH. ترتبط ملاحظة، Q0-Q3 إلى D4-D7 وQ4 لRS. عندما تكون جاهزة في خطوط LCD البيانات (D4-D7) والسيطرة RS دبوس، تمكين يتم إنشاء نبض من قبل PIC12F683. هذا الترتيب، لذلك، يتطلب 3 دبابيس من متحكم لعرض البيانات الشخصية على شاشة LCD الموازي: 2 دبابيس لتوفير على مدار الساعة والبيانات إلى 74HC595، و 1 دبوس لتمكين التحكم (E) دبوس من وحدة LCD.
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً khamis54 ( شكر العضو على هذه المشاركة )
اعجاب khamis54 ( أعجبته المشاركة )
قديم 13-05-2016, 12:53 PM   #4
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

الدائرة الكهربية :




الدائرة الكهربية لهذا المشروع بسيطة الى حد كبير . لكن التحدى فى الجزء الخاص ببرنامج التشغيل المطلوب للميكروكونترولر PIC12F683.
• لنقل بيانات LCD سوف نستخدم نظام 4-bit . لذلك، يتم إرسال أى أمر أو بيانات حرف 8 بت على خطوتين: فى البداية يتم إرسال النبل 4-bit العلوى ، بعد ذلك يتم إرسال النبل 4-bit السفلى .
• يتم توصيل طرف التحكم R/W بالأرضى لأنه لا يوجد قراءة لبيانات أو حالة من موديول LCD ، فى حالتنا.
• يتم نقل بيانات النبل 4-bit وإشارة التحكم فى اختيار السجل RS بشكل متسلسل إلى 74HC595 . وسوف تظهر على المخارج Q0-Q4 عند نبضة الساعة السادسة . ملاحظة ، المخارج Q0-Q3 تكون متصلة بخطوط البيانات D4-D7 والمخرج Q4 يكون متصلا بالخط RS .
• عندما تكون البيانات جاهزة على خطوط بيانات (D4-D7) موديول LCD وطرف التحكم RS ، يتم توليد نبضة التمكين بواسطة PIC12F683 . لذلك ، فإن هذا الترتيب يتطلب 3 أطراف من الميكروكونترولر لعرض بيانات حرف على شاشة LCD متوازية : 2 طرف لتوفير الساعة Clock والبيانات Data لمسجل الإزاحة 74HC595 ، وطرف من أجل التحكم فى التمكين E لموديول LCD .
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 13-05-2016, 12:59 PM   #5
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

البرنامج :
سوف يتم استخدام المترجم ميكروسى برو فى إنشاء روتينات (دوال) مشغل driver موديول LCD باستخدام ثلاثة خطوط . فى الوضع الافتراضى ، بداية تشغيل موديول LCD تكون فى النظام 8-bit . هذا يتطلب تسلسل من الأوامر لإعداد هذا الموديول فى النظام 4-bit . الروتينات المذكورة هنا مخصصة لموديول LCD من نوع 16X2 ، ومع ذلك ، يمكن تعديلها للعمل مع موديولات LCD من نوع آخر .

ملحوظة :
ناشر هذا البرنامج هو Jayanth Devarayanadurga ويقول أنه قام بتعديل البرنامج المكتوب بمعرفة
Rajendra Bhatt ، بغرض أن يكون لدينا دوال مثل المستخدمة ضمن المترجم ميكروسى برو نفسه ، أى :


Serial_LCD_Out
Serial_LCD_Chr
Serial_LCD_Cmd

البرنامج الكامل :


كود:
/* 3-wire Serial LCD using 74HC595
    Jayanth Devarayanadurga
    08/05/2013
*/

#define _LCD_FIRST_ROW    		0x80         //Move cursor to the 1st row
#define _LCD_SECOND_ROW         0xC0         //Move cursor to the 2nd row
#define _LCD_THIRD_ROW          0x94         //Move cursor to the 3rd row
#define _LCD_FOURTH_ROW         0xD4         //Move cursor to the 4th row
#define _LCD_CLEAR              0x01         //Clear display
#define _LCD_RETURN_HOME        0x02         //Return cursor to home position, returns a shifted display to
											 //its original position. Display data RAM is unaffected.
#define _LCD_CURSOR_OFF         0x0C         //Turn off cursor
#define _LCD_UNDERLINE_ON       0x0E         //Underline cursor on
#define _LCD_BLINK_CURSOR_ON    0x0F         //Blink cursor on
#define _LCD_MOVE_CURSOR_LEFT   0x10         //Move cursor left without changing display data RAM
#define _LCD_MOVE_CURSOR_RIGHT  0x14         //Move cursor right without changing display data RAM
#define _LCD_TURN_ON            0x0C         //Turn Lcd display on
#define _LCD_TURN_OFF           0x08         //Turn Lcd display off
#define _LCD_SHIFT_LEFT         0x18         //Shift display left without changing display data RAM
#define _LCD_SHIFT_RIGHT        0x1E         //Shift display right without changing display data RAM

sbit Serial_Data_Pin at GP5_bit;
sbit Serial_Clk_Pin at GP1_bit;
sbit Enable_Pin at GP2_bit;

//Function Prototypes
void Serial_LCD_Cmd(unsigned char Command);
void Serial_LCD_Chr(unsigned int row, unsigned int col, char LCDChar);
void Serial_LCD_Init();
void Serial_LCD_Out(unsigned int row, unsigned int col, unsigned char str[20]);
void Write_Nibble(unsigned short N);

// Always mention this definition statement
unsigned short Low_Nibble, High_Nibble, p, q,  Mask, N, t, RS, Flag, temp;

void Delay_50ms(){
 Delay_ms(50);
}

void Write_Nibble(unsigned short N){
 Enable_Pin = 0;
 // ****** Write RS *********
 Serial_Clk_Pin = 0;
 Serial_Data_Pin = RS;
 Serial_Clk_Pin = 1;
 Serial_Clk_Pin = 0;
 // ****** End RS Write

 // Shift in 4 bits
 Mask = 8;
  for (t=0; t<4; t++){
   Flag = N & Mask;
   if(Flag==0) Serial_Data_Pin = 0;
   else Serial_Data_Pin = 1;
   Serial_Clk_Pin = 1;
   Serial_Clk_Pin = 0;
   Mask = Mask >> 1;
  }
  // One more clock because SC and ST clks are tied
  Serial_Clk_Pin = 1;
  Serial_Clk_Pin = 0;
  Serial_Data_Pin = 0;
  Enable_Pin = 1;
  Delay_us(500);
  Enable_Pin = 0;
}

void Serial_LCD_Cmd(unsigned char Command)
{
      RS = 0; // It is command, not data
      Low_Nibble = Command & 15; // AS : Low_Nibble = Command & 0x0F;  
      High_Nibble = Command/16; // AS : High_Nibble = Command>>4;  
	  Write_Nibble(High_Nibble);
      Write_Nibble(Low_Nibble);
      if((Command == 0x0C) || (Command == 0x01) || (Command == 0x0E) || (Command == 0x0F) || (Command == 0x10)
                   || (Command == 0x1E) || (Command == 0x18) || (Command == 0x08) || (Command == 0x14)
                   || (Command == 0x02))
      Delay_50ms();
}


void Serial_LCD_Chr(unsigned int row, unsigned int col, char LCDChar)
{
        switch(row){

                case 1:
                Serial_LCD_Cmd(0x80 + col-1);
                break;
                case 2:
                Serial_LCD_Cmd(0xC0 + col-1);
                break;
                case 3:
                Serial_LCD_Cmd(0x94 + col-1);
                break;
                case 4:
                Serial_LCD_Cmd(0xD4 + col-1);
                break;
        }

        RS = 1; // It is Data, not command
		Low_Nibble = LCDChar & 15;//Low_Nibble = LCDChar & 0x0F; //
        High_Nibble = LCDChar/16;//High_Nibble = LCDChar>>4;
		Write_Nibble(High_Nibble);
        Write_Nibble(Low_Nibble);

}


void Serial_LCD_Init(){
        Delay_50ms();
        Serial_LCD_Cmd(0x03); // Wake-Up Sequence
        Delay_50ms();
        Serial_LCD_Cmd(0x03);
        Delay_50ms();
        Serial_LCD_Cmd(0x03);
        Delay_50ms();
        Serial_LCD_Cmd(0x02);
        Delay_50ms();
        Serial_LCD_Cmd(0x28); // 4-bits, 2 lines, 5x7 font
        Delay_50ms();
        Serial_LCD_Cmd(0x06); // Entry mode- Auto-increment, No Display shifting
        Delay_50ms();
}

void Serial_LCD_Out(unsigned int row, unsigned int col, unsigned char str[20])
{       q = strlen(str);
        for (p = 0; p<q; p++){
            Serial_LCD_Chr(row,col++,str[p]);   // print first character on LCD
        }
        row = 1;
        col = 1;
}

void main() {
        CMCON0 = 7;                            // Disable Comparators
        TRISIO = 0b00001000;                   // All Outputs except GP3
        ANSEL = 0x00;                          // No analog i/p

        Serial_LCD_Init();
        Serial_LCD_Cmd(_LCD_CLEAR);
        Serial_LCD_Cmd(_LCD_CURSOR_OFF);

        while(1){
               Serial_LCD_Out(1,1,"3-Wire");
               Serial_LCD_Out(2,1,"Serial LCD");
               Serial_LCD_Out(3,1,"20X4");
               Serial_LCD_Out(4,1,"Using 74HC595");
               Serial_LCD_Chr(1,10, '?');
        }
}

النتيجة




F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 13-05-2016, 01:04 PM   #6
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

ملفات البرنامج والمحاكاة على الرابط :

http://www.mediafire.com/download/el...-74595-lcd.rar
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 13-05-2016, 06:35 PM   #7
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

شرح الدوال المعرفة بمعرفة المستخدم :
الدالة الأولى : دالة التأخير :


كود:
void Delay_50ms(){
 Delay_ms(50);
}

هذه الدالة اختيارية ويمكن استخدام دالة التأخير المدمجة فى الميكروسى Delay_ms(50); ، لكن هذه الدالة يتكرر استدعاؤها العديد من المرات (السطور) ، ولذلك يفضل أن يتم استخدام دالة معرفة بمعرفة المستخدم بحيث ، عند اللزوم، عند الرغبة فى تغيير زمن التأخير ، يتم التغيير فى سطر واحد فقط فى نموذج الدالة وينعكس ذلك بالطبع عند كل استدعاء لهذه الدالة .
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 13-05-2016, 07:17 PM   #8
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

الدالة الثانية : دالة نبل 4-bit وسوف تستخدم فى الدوال التى تليها (لهذا السبب يجب أن نبدأ بها ، حتى لا يعطيك المترجم أخطاء ) : دالة إرسال بايت أمر 8-bit ودالة إرسال حرف 8-bit على شكل 2 نبل ، بالإضافة إلى دالة تهيئة موديول LCD . راجع التعليفات بجوار كل سطر .


كود:
void Write_Nibble(unsigned short N){
 Enable_Pin = 0; // Disable 
 // ****** Write RS *********
 Serial_Clk_Pin = 0;
 Serial_Data_Pin = RS;  // For command RS =0 , for character RS=1 , as you see later 
 Serial_Clk_Pin = 1; // Shift RS
 Serial_Clk_Pin = 0;
 // ****** End RS Write

 // Shift in 4 bits
 Mask = 8; // 0b00001000
  for (t=0; t<4; t++){ // Get and shift lower 4-bit  , one bit each loop
   Flag = N & Mask; //get
   if(Flag==0) Serial_Data_Pin = 0;
   else Serial_Data_Pin = 1;
   Serial_Clk_Pin = 1;//shift
   Serial_Clk_Pin = 0;
   Mask = Mask >> 1;//0b000000100
  }
  // One more clock because SC and ST clks are tied  
  Serial_Clk_Pin = 1;
  Serial_Clk_Pin = 0;//Now , data at shift register outputs Q0 to Q4
  Serial_Data_Pin = 0; //
  Enable_Pin = 1; // Enable to send data to LCD module 
  Delay_us(500); //Some delay for enable pulse  
  Enable_Pin = 0;
}
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
رد

العلامات المرجعية

أدوات الموضوع

تعليمات المشاركة
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع إلى

الساعة الآن: 04:01 PM


Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025
Feedback Buttons provided by Advanced Post Thanks / Like (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
القرية الإلكترونية