قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 06:38 PM المشاركة 33   
افتراضي



الخطوة التالية هى كتابة (طباعة) معلومات على الشاشة , ولهذا الغرض يمكنك استخدام أربع دوال . دالتان منهم تسمح لك بكتابة الحروف والدالتان الأخريان تسمح بكتابة السلاسل النصية .
يمكنك كتابة الحروف بطريقتين , الأول ببساطة كتابة الحروف بترتيب متسلسل معروف لوحدة العرض والطريقة الثانية كتابة الحروف فى السطر والعامود الذى يحدده المبرمج .

5-2-1 دوال كتابة (طباعة) الحروف Functions to print characters
الدالة الأولى لكتابة الحروف هى Lcd_Chr_Cp (char out_char) ويتم استدعاؤها عند كتابة حرف من حروف كود أسكى ASCII code , الموجود فى بارامتر الدخل out_char . وعند إحساس وحدة العرض بالأمر بكتابة حرف جديد فإن المؤشر ينتقل تلقائيا للموقع التالى مباشرة . لفهم أداء هذه الدالة راقب وحلل المثال التالى :


كود:
void main (void) { Lcd_init (); // Start the LCD. Lcd_Chr_Cp('H'); // These functions printed letter by letter the word "Hello". Lcd_Chr_Cp('e'); Lcd_Chr_Cp('l'); Lcd_Chr_Cp('l'); Lcd_Chr_Cp('o'); while (1) / infinite loop. { } }


ويصبح البرنامج بالصيغة التالية :









الشكل التالى يبين المحاكاة :


اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 06:42 PM المشاركة 34   
افتراضي


لكتابة حروف من خلال إحداثيات الصفوف والأعمدة نستخدم الدالة :
Lcd_Chr (char row, char column, char out_char) والتى تطبع الحرف out_char بالصف row والعامود column . المثال التالى يوضح لك هذا المفهوم :


كود:
void main (void) { Lcd_init (); // Start the LCD. Lcd_Chr_Cp ('H'); // These functions printed letter by letter the word "Hello". Lcd_Chr_Cp ('e'); Lcd_Chr_Cp ('l'); Lcd_Chr_Cp ('l'); Lcd_Chr_Cp ('o'); Lcd_Chr (1, 6, '1'); // prints the character 1, row 1, column 6 Lcd_Chr (2, 7, '2'); // prints the character 2, row 2, column 7 Lcd_Chr (3, 8, '3'); // prints the character 3, row 3, column 8 Lcd_Chr (4, 9, '4'); // Prints the character 4, row 4, column 9 while (1) // infinite loop. { } }







البرنامج :







الشكل التالى يبين المحاكاة :

5-2-2 دوال كتابة (طباعة) سلاسل النصوص Functions to print text strings :

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 07:39 PM المشاركة 35   
افتراضي


5-2-2 دوال كتابة (طباعة) سلاسل النصوص Functions to print text strings :
أيضا كتابة السلاسل النصية إما أن يتم كتابتها فى موقع المؤشر الحالى وفق سريان الكتابة أو تكتب فى موقع يحدد بإحداثيات الصف والعامود .
لكتابة سلسلة نصية عند الموقع الحالى لمؤشر الكتابة نستخدم الدالة التالية :
Lcd_Out_Cp (char * text) , ولها بارامتر دخل واحد وهو مؤشر للسلسلة النصية والتى تسمى هنا text . للتعرف على استخدام هذه الدالة راقب وحلل هذا المثال :

void main (void)
{
Lcd_init (); // Start the LCD.
Lcd_Out_Cp ("Hello World ...");
while (1) // infinite loop.
{
}
}








يمكن تنفيذ هذه الدالة مع سلسلة من الثوابت أو من المتغيرات , نعرف السلاسل بالأقواس المزدوجة فى بدايتها وفى نهايتها , على سبيل المثال "Hello World ...", , الصيغة المتغيرة يتم إعلانها بالشكل :
char Text [20] = "Hello World ..." .

البرنامج :






الشكل التالى يبين المحاكاة :



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 07:42 PM المشاركة 36   
افتراضي


لكتابة السلسلة النصية إبتداء من نقطة إحداثيات محددة نستخدم الدالة :
Lcd_Out (char row, char column, char * text)
هذه الدالة تعمل بطريقة مماثلة للدالة السابقة بإختلاف أن البيانات تتضمن الصف والعامود . لفهم عمل هذه الدالة راقب وحلل المثال التالى :


كود:
void main (void) { Lcd_init (); // Start the LCD. Lcd_Out (1, 1, "Row 1, Column 1"); Lcd_Out (2, 2, "Row 2, Column 2"); while (1) // infinite loop. { } }







البرنامج :








الشكل التالى يبين المحاكاة :

5-2-3 كتابة القيم العددية Printing numeric values :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 07:46 PM المشاركة 37   
افتراضي


5-2-3 كتابة القيم العددية Printing numeric values :
طباعة القيم العددية أمر حيوى فى العديد من التطبيقات . على سبيل المثال عندما تريد عرض حالة التغير لحساس مثل درجة الحرارة أو الرطوبة أو الضغط أو أى جهاز آخر يتم التعامل معه .
لتحقيق هذا الهدف يمكن استخدام دوال التحويل الجاهزة والموجودة ضمن المترجم . يمكنك استخدام مكتبة التحويلات Conversions , هذه المكتبة بها دوال تقوم بتحويل القيم العددية إلى سلسلة .
عندما يتطلب الأمر عرض قيمة لعدد صحيح يتم استخدام الدالة :
IntToStr (int input, char *output) , هذه الدالة لها بارامتران هما : input وهو قيمة العدد الصحيح المراد عرضه , و output والذى يشير إلى متغير لسلسلة نصية والذى تريد وضع نتيجة تحويل القيمة العددية input إلى سلسلة نصية .
لفهم هذا التحويل لااقب وحلل المثال التالى :


كود:
void main (void) { int Integer = 123; // Declaration of an integer variable with initial value 123. char Text [20]; // String data printing. Lcd_init (); // Start the LCD. IntToStr (Integer, Text); // function that does the conversion. Lcd_Out_Cp (Text) ; // print text on the LCD screen. while (1) // infinite loop. { } }







البرنامج :








عند طباعة العدد الصحيح كنص باستخدام هذه الدالة دائما يفترض أن العدد مداه سبعة حروف فأن كان العدد أقل من ذلك فإن باقى الحروف سوف تكون مسافات فارغة .
بعد الترجمة والمحاكاة تكون النتيجة كما فى الشكل التالى :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 15-09-2012, 07:49 PM المشاركة 38   
not funny


يمكن طباعة الأعداد الحقيقية ذات العلامة العشرية باستخدام الدالة :
FloatToStr (FNUM float, char * str) . مبدأ عمل هذه الدالة مماثل للدالة السابقة .
لتنفيذ المثال التالى يجب تغيير الميكروكونترولر , وذلك لأن سعة ذاكرة PIC16F84A غير كافية . سوف نستخدم PIC16F628A وله نفس ترتيب الأطراف مثل PIC16F84A ولكن له سعة ذاكرة أكبر كما أن به وحدات داخلية مثل USART .
لفهم هذه الدالة راقب وحلل المثال التالى :



كود:
void main (void) { int Integer = 123; // Declaration of an integer variable with initial value 123. float Decimnal = 12.76543; // Declaring a variable with decimal point // initialized to 12.76543. char Text [20]; // String data printing. Lcd_init (); // Start the LCD. IntToStr (Integer, Text); // Function that makes the whole conversion. Lcd_Out (1,1, Text); // print text on the LCD screen. FloatToStr (Decimnal, Text); // function that does the conversion decimal. Lcd_Out (2,1, Text); // print text on the LCD screen. while (1) // infinite loop. { } }





البرنامج :










الشكل التالى يبين نتيجة المحاكاة :









نفس العملية يمكن تنفيذها على الأنواع الأخرى للمتغيرات مثل : حالة المتغير shortنستخدم الدالة
ShortToStr (short input, char * output);
وحالة المتغير Long نستخدم الدالة
LongToStr (long input, char * output);
وحالة المتغير Unsigned short نستخدم الدالة :
WordToStr (unsigned int input, char * output);


5-2-4 إنشاء حروفك الخاصة Creating own characters :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 16-09-2012, 04:59 PM المشاركة 39   
افتراضي


-2-4 إنشاء حروفك الخاصة Creating own characters :
وحدات عرض الحروف LCD لديها القدرة على تخزين حتى 8 حروف مصممة بواسطة المبرمج . قيم أسكى للحروف المصممة بالمستخدم تناظر القيم الرقمية من 0 إلى 7 .






على سبيل المثال , إذا رغبت فى طباعة أول حرف مصمم بواسطة المستخدم يتم ذلك عن طريق استخدام دوال طباعة الحروف كما يلى :
Lcd_Chr_Cp (0); أو Lcd_Chr(1,1,0); . يتم تخزين الأحرف التى ينشؤها المستخدم فى ذاكرة RAMلشاشة وحدة العرض LCD ولهذا السبب يجب إعادة برمجتها فى كل مرة تقوم فيها ببدء LCD .
الحروف هى مجموعة من القيم الثنائية تشكل صورة نقطية , والنتيجة هى صورة تعرض على الشاشة بدقة
5 x 7 pixels .
تحرير وبرمجة هذه البيانات هو مضيعة للوقت , لكن المترجم ميكروسى برو يوجد ضمن أدواته محرر للحروف لتصميم الحروف بمعرفة المبرمج . فى هذا المحرر البسيط يتم تحرير حرف الصورة النقطية وتوليد كود لغة السى اللازم لتحديد الحرف على الشاشة . والخلاصة أنه يتم تحرير الحرف ثم نسخ ولصق كود المصدر الخاص به فى برنامج المشروع .
إظهار هذا المحرر يتم عن طريق قائمة الأدوات Tools ثم الخيار Custom CharacterLCD.




الشكل التالى يبين نافذة هذا المحرر :





فى هذا المحرر يقوم المستخدم بالنقر على المربعات (النقط) التى تشكل الحرف , يتم اختيار قيمة أسكى التى تخصص للحرف من خلال الصندوق Char: . هذه القيمة يجب أن تقع بين 0 و 7 . يتم إنهاء هذه العملية بالضغط على الزر Generate Codeونسخ هذاالكود لاستخدامه فى البرنامج . الشكل التاللى يبين المحرر عند تحرير حرف أسكى وتخصيص الصفر له :

البرنامج التالى يوضح ذلك :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 16-09-2012, 05:03 PM المشاركة 40   
افتراضي


البرنامج التالى يوضح ذلك :



كود:
// Output pins for LCD sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D7 at RB3_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D4 at RB0_bit; // Configuration bits TRIS sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D7_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB0_bit; // Function to store in LCD RAM memory // Constants created by the character editor, it contains the character bitmap. const char character [] = {17,14,21,14,31,4,27,0}; void CustomChar (char pos_row , char pos_char) { char i; LCD_Cmd(64); // address character 0. for (i=0;i<=7;i++) LCD_Chr_Cp(character[i]);// Loop to save the bitmap. LCD_Cmd (_LCD_RETURN_HOME);// For practical purposes, this feature can be ignored. LCD_Chr(pos_row,pos_char,0); // Impression ASCII code 0. } void main (void) { Lcd_init(); // Start the LCD. CustomChar (1,1);// Print the character 0. while(1) // infinite loop. { } }


















بعد الترجمة والمحاكاة نحص على النتيجة التالية :




الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:03 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)