منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك

اذهب الى الأسفل

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  Empty لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك

مُساهمة من طرف Admin الأربعاء مايو 11, 2016 9:11 pm

لماذا تدفع ثمنا فى شاشة 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 .


لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  615


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الأربعاء مايو 11, 2016 11:11 pm

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

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  715

ولهذا الغرض يتم ربط خطى الساعة 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 .
.
لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  814

أطراف مصدر القدرة :
يستخدم الجهد +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.

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 12:53 pm

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

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  914


الدائرة الكهربية لهذا المشروع بسيطة الى حد كبير . لكن التحدى فى الجزء الخاص ببرنامج التشغيل المطلوب للميكروكونترولر 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 .


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 1:00 pm

البرنامج :
سوف يتم استخدام المترجم ميكروسى برو فى إنشاء روتينات (دوال) مشغل 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, '?');
        }
}

النتيجة

لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك  915




Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 1:04 pm

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

http://www.mediafire.com/download/elfvyl9c40q9qby/pic12f683-74595-lcd.rar

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 6:35 pm

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


الكود:

void Delay_50ms(){
 Delay_ms(50);
}

هذه الدالة اختيارية ويمكن استخدام دالة التأخير المدمجة فى الميكروسى Delay_ms(50); ، لكن هذه الدالة يتكرر استدعاؤها العديد من المرات (السطور) ، ولذلك يفضل أن يتم استخدام دالة معرفة بمعرفة المستخدم بحيث ، عند اللزوم، عند الرغبة فى تغيير زمن التأخير ، يتم التغيير فى سطر واحد فقط فى نموذج الدالة وينعكس ذلك بالطبع عند كل استدعاء لهذه الدالة .

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 7:17 pm

الدالة الثانية : دالة نبل 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;
}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 7:30 pm

الدالة الثالثة : دالة إرسال أمر command مكون من بايت 8-bit على شكل 2 نبل 4-bit .
• فى البداية يتم وضع RS=0 حتى يعلم موديول LCD بأن البيانات القادمة هى بيانات أمر .
• بعد ذلك يتم استخلاص النبل السفلى Low_Nibble والنبل العلوى High_Nibble باستخدام عمليات رياضية بسيطة .
• بعد ذلك يتم إرسال النبل العلوى يليه إرسال النبل السفلى .
• ثم اختبار ما إذا كان الأمر من ضمن أوامر موديول LCD ، عندئذ نستخدم دالة التأخير حتى يستقر الوضع .


الكود:

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();
}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 7:46 pm

الدالة الرابعة : دالة إرسال بيانات حرف LCDChar عند موقع صف row وعامود col محددين :
• فى البداية نستخدم عبارة الاختيار من متعدد switch…case لاختيار واحد من أربعة خيارات ، كل خيار يعطى موديول LCD الأمر المناسب تبعا للصف والعامود المذكورين كبارامترات عند استدعاء هذه الدالة (راجع معلومات موديول LCD) زذلك بغرض وضع المؤشر عند موقع الصف والعامود المحددين .
• بعد ذلك ، يتم إرسال بيانات الحرف : فى البداية يجب وضع RS=1 لأننا سوف نرسل حرف وليس أمر ، وبعد ذلك يتم استخلاص بيانات النبل السفلى والعلوى من بيانات الحرف ، ثم إرسالها إلى LCD عبر مسجل الإزاحة .



الكود:

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);

}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 7:54 pm

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


الكود:

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();
}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف Admin الجمعة مايو 13, 2016 8:02 pm

الدالة السادسة : دالة إرسال سلسلة نصية عند صف وعامود محددين :
كل ما هنالك هو إرسال حرف تلو الآخر مستخدما الدوال السابقة .
فى البداية نستخدم دالة الميكروسى strlen لإيجاد عدد الأحرف السلسلة ثم نقوم بعمل حلقة for لتكرار إرسال الحرف تلو الآخر .


الكود:

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;
}


Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى