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

   

المغترب63
:: مهندس ::
تاريخ التسجيل: Oct 2010
الدولة: الحلة-فرنسا
المشاركات: 49
نشاط [ المغترب63 ]
قوة السمعة:
قديم 16-09-2012, 05:44 PM المشاركة 41   
افتراضي



السلام عليكم ورحمة الله وبركاته
هذا المنتدى هو جوهرة المواقع العلمية العربية.
والاستاذ فتح الله عبد العزيز هو جوهرة هذا المنتدى .

سؤالي حول طباعة قيمة متغير ... ممكن أن نستخدم هذه الصيغة كما ذكرت حضرتك:

كود:
   IntToStr (Integer, Text); // Function that makes the whole conversion.

FloatToStr (Decimnal, Text); // function that does the conversion decimal.
وممكن أن نضيف الرقم للمتغير كما ذكر بعض الأخوان, كالتالي :
كود:
x=x+48 ;
Lcd_Out(1,1,x) ;
لكن عند طباعة المتغير يعطي
شكل غريب .فما هي الطريقة بالضبط؟ جزاكم الله خيرا


التعديل الأخير تم بواسطة : المغترب63 بتاريخ 16-09-2012 الساعة 05:58 PM
اعلانات

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


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






كود:
// Declaring Constants represent bitmaps, // Animate a FIGs. These are the result code character editor // MikroC PRO. const char Fig1 [] = {17,14,21,14,31,4,27,0}; // Start CGRAM address 64 (Char=8 bit). const char Fig2 [] = {17,14,21,14,31,4,10,0}; // start address 72(=64+8). const char Fig3 [] = {17,14,21,14,31,21,10,0}; // start address 80(=72+8). const char Fig4 [] = {24,28,30,31,30,28,24,0}; // start address 88(=80+8). // 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 save Declamation characters in RAM. // This function is designed by the developer. void Lcd_RAM_Car (char IntDir , const char * Map) // RAM Address & Char. Map { char i; LCD_Cmd (IntDir); // Start RAM address. // Loop to save the map in the LCD RAM. for (i= 0; i <8; i ++) LCD_Chr_Cp (Map [i]); } void main (void) { Lcd_init (); // Start the LCD. Lcd_RAM_Car (64, Fig1); // Creat & Store the character 1 in first RAM address >>64 Lcd_RAM_Car (72, Fig2); // Creat &Store the character 2 ( 72=64+8) Lcd_RAM_Car (80, Fig3); // Creat &Store the character 3 ( 80=72+8) Lcd_RAM_Car (88, Fig4); // Creat &Store the character 4 ( 88=80+8) LCD_Chr (1, 1, 0); // Finally : Print the character Fig1.(0 in ASCII) in pos ( 1,1) LCD_Chr (1, 2, 1); // Print the character Fig2.(1 in ASCII) in pos ( 1,2) LCD_Chr (1, 3, 2); // Print the character Fig3.(2 in ASCII) in pos ( 1,3) LCD_Chr (1, 4, 3); // Print the character Fig4.(3 in ASCII) in pos (1,4) while (1) // infinite loop. { } }



















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



طباعة المعلومات على LCD , فى بعض الحالات قد تحتاج لتغيير خواص المؤشر cursor . لهذا , فمن الممكن تغيير المؤشر بآخر غير ممتلىء أو ليس به تأثير الوميض , بل يمكنك عدم إظهاره . لتغيير خواص LCD يتم استخدام الدالة : Lcd_Cmd (char out_char), والتى تدخل ضمن أوامر الإعداد , باستخدام البارامتر out_char . لتغيير المؤشر بآخر غير ممتلىء أو قى شكل شريط يتم استخدام الدالة :
Lcd_Cmd (_LCD_UNDERLINE_ON) ولتفعيل وميض المؤشر نستخدم الدالة :
Lcd_Cmd (_LCD_BLINK_CURSOR_ON) ,. ولعدم إظهار المؤشر نستخدم الدالة :
Lcd_Cmd (_LCD_CURSOR_OFF) .

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

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


السلام عليكم ورحمة الله وبركاته
هذا المنتدى هو جوهرة المواقع العلمية العربية.
والاستاذ فتح الله عبد العزيز هو جوهرة هذ المنتدى .

سؤالي حول طباعة قيمة متغير ... ممكن أن نستخدم هذه الصيغة كما ذكرت حضرتك:

كود:
   IntToStr (Integer, Text); // Function that makes the whole conversion.
 
FloatToStr (Decimnal, Text); // function that does the conversion decimal.
وممكن أن نضيف الرقم للمتغير كما ذكر بعض الأخوان, كالتالي :
كود:
x=x+48 ;
Lcd_Out(1,1,x) ;
لكن عند طباعة المتغير يعطي
شكل غريب .فما هي الطريقة بالضبط؟ جزاكم الله خيرا

أخى الكريم


شكرا جزيلا لك

بارك الله فيك

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


أخى الكريم

هناك فروق فى الغرض من وطريقة استخدام كل دالة .

برجاء كتابة المثال المطلوب حتى يتثنى تحديد المطلوب .

ومن الممكن عمل مقارنة بين طريقة استخدام تلك الدوال .

مع تمنياتى بدوام التوفيق


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 16-09-2012 الساعة 06:26 PM

الصورة الرمزية محمود جابر
محمود جابر
:: مهندس متواجد ::
تاريخ التسجيل: May 2007
الدولة: مصر
المشاركات: 61
نشاط [ محمود جابر ]
قوة السمعة:
قديم 16-09-2012, 07:27 PM المشاركة 44   
x4


بارك الله فيك وجعله في ميزان حسناتك
وندعوا الله ان يكثر من امثالك


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


بارك الله فيك وجعله في ميزان حسناتك
وندعوا الله ان يكثر من امثالك

أخى الكريم

شكرا جزيلا لك

بارك الله فيك

مع تمنياتى بدوام التوفيق


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


توضيح :
العبارات :
كود:
x=x+48 ; Lcd_Out(1,1,x) ;
يوجد تعارض بين استخدام العبارة x=x+48 ; والدالة Lcd_Out(1,1,x) ; .

أولا :
الدالة Lcd_Out تختص بطباعة "نص حروف" char *text أى يجب أن يكون x=text . أى أنه يجب تعريفها قبل الدالة على أنها سلسلة نصية , على سبيل المثال :
كود:
char x[] = "example";
وفى هذه الحالة يكون البرنامج :


كود:
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
 
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
 
char x[] = "example";
 
void main()
{
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
    Lcd_Out(1,1,x) ;
    while(1)                         // Endless loop
 
   {
   }
}
والنتيجة :







ثانيا :
إضافة 48 إلى x لتحويلها إلى "حرف" من حروف ASCII المحفوظة فى الذاكرة الثابتة لوحدة LCD حتى نستطيع عرضها .
هذا يعنى أن x "حرف" character وليس "نص" text لذلك لذلك يجب استخدام دالة طباعة الحرف كما يلى :

كود:
char x=7 ;// x = x+48 ; // Write character "x" at row 1, column 1: Lcd_Chr(1, 1,x);

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

كود:
// LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections char x = 7 ; // !!!!!!!!!!!!!! void main() { x = x+48 ; //!!!!!!!!!!!!!!! Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
// Write character "x" at row 1, column 1: Lcd_Chr(1,1,x); while(1) // Endless loop { } }


والنتيجة :







السؤال : إذا كان لدينا أكثر من حرف , ماذا نفعل ؟
الميكروسى سهل الإجابة بدوال تحويل القيم العددية إلى سلسلة نصية :
مثال : عرض مجموعة أرقام ولتكن 123 :
البرنامج :
كود:
// LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections unsigned short x = 123; char text[4]; void main() { Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off ByteToStr(x,text); // text Lcd_Out(1,1,text); while(1) // Endless loop { } }
النتيجة :





qqwweerrttyy
:: مهندس ::
تاريخ التسجيل: Sep 2012
المشاركات: 4
نشاط [ qqwweerrttyy ]
قوة السمعة:
قديم 16-09-2012, 09:52 PM المشاركة 47   
افتراضي


بسم الله الرحمن الرحيم
السلام عليكم

بارك الله فيك


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


بسم الله الرحمن الرحيم

السلام عليكم

بارك الله فيك

وعليكم السلام ورحمة الله وبركاته
أخى الكريم

شكرا جزيلا لك

بارك الله فيك

مع تمنياتى بدوام التوفيق



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