لماذا تدفع ثمنا فى شاشة LCD تسلسلية فى حين يمكنك أن تجعل تصنع واحدة خاصة بك
قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الاليقسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots
شرح الدوال المعرفة بمعرفة المستخدم :
الدالة الأولى : دالة التأخير :
كود:
void Delay_50ms(){
Delay_ms(50);
}
هذه الدالة اختيارية ويمكن استخدام دالة التأخير المدمجة فى الميكروسى Delay_ms(50); ، لكن هذه الدالة يتكرر استدعاؤها العديد من المرات (السطور) ، ولذلك يفضل أن يتم استخدام دالة معرفة بمعرفة المستخدم بحيث ، عند اللزوم، عند الرغبة فى تغيير زمن التأخير ، يتم التغيير فى سطر واحد فقط فى نموذج الدالة وينعكس ذلك بالطبع عند كل استدعاء لهذه الدالة .
الدالة الثانية : دالة نبل 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;
}
الدالة الثالثة : دالة إرسال أمر command مكون من بايت 8-bit على شكل 2 نبل 4-bit .
• فى البداية يتم وضع RS=0 حتى يعلم موديول LCD بأن البيانات القادمة هى بيانات أمر .
• بعد ذلك يتم استخلاص النبل السفلى Low_Nibble والنبل العلوى High_Nibble باستخدام عمليات رياضية بسيطة .
• بعد ذلك يتم إرسال النبل العلوى يليه إرسال النبل السفلى .
• ثم اختبار ما إذا كان الأمر من ضمن أوامر موديول LCD ، عندئذ نستخدم دالة التأخير حتى يستقر الوضع .
الدالة الرابعة : دالة إرسال بيانات حرف 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);
}
الدالة الخامسة :دالة تهيئة موديول LCD
تستخدم هذه الدالة لنقل موديول LCD من الحالة الافتراضية بنظام 8-bit إلى الحالة المطلوب العمل بها وهى نظام 4-bit .
خطوات التهيئة محددة تماما ومذكورة فى الداتا شيت للموديول ، وتتم بإرسال الأوامر المناسبة وبالترتيب المحدد كما هو مذكور بالتعليقات الجانبية .
الدالة السادسة : دالة إرسال سلسلة نصية عند صف وعامود محددين :
كل ما هنالك هو إرسال حرف تلو الآخر مستخدما الدوال السابقة .
فى البداية نستخدم دالة الميكروسى 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;
}
الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:38 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)