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

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

Abmarhon
:: مهندس ::
تاريخ التسجيل: Apr 2015
المشاركات: 35
نشاط [ Abmarhon ]
قوة السمعة:0
قديم 09-12-2015, 01:52 PM المشاركة 1   
ha رجاء ساعدوني بالمايكروسي بك Keypad w LCD إستقبال قيميتن وعرضهما ومن ثم عرض الناتج. Twitter FaceBook Google+



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

عندي مسألة بسيطه بس غلبتني بجد وياريت تساعدوني فيها, ألا وهي الكيباد والقيم المأخوذه منها..



البرنامج المطلوب :
-عند الضغط بالكيباد يظهر الرقم الاول ع الشاشة بالسطر الاول
-عند الضغط مره أخرى يظهر الرقم الاخر بعد مسافة من الرقم السابق بالسطر الاول
-تتم عملية الضرب و الناتج من يكون بالسطر الثاني
-تستمر العملية

شرح أكثر :
مثلاً أدخلت 2 ثم أدخلت 5

فــ إن الشاشة ستظر مايلي

كود:
Num     2       3
Total   6
رابط الكود مع ملف المحاكاة :.... (إستخدمت بروتوس 8.3)
http://www.4shared.com/rar/ts3HUKMYb...alculator.html
https://www.mediafire.com/?6qr3b1c8vboow2v

كود:
unsigned short kp, cnt, oldstate = 0,num1 , num2;
char txt[6];


    //Keypad moudule connection
char  keypadPort at PORTC;
    //end keypad module connection

// Lcd pinout settings
sbit LCD_RS at Rb1_bit;
sbit LCD_EN at Rb0_bit;
sbit LCD_D4 at Rb4_bit;
sbit LCD_D5 at Rb5_bit;
sbit LCD_D6 at Rb6_bit;
sbit LCD_D7 at Rb7_bit;

// Pin direction
sbit LCD_RS_Direction at TRISb1_bit;
sbit LCD_EN_Direction at TRISb0_bit;
sbit LCD_D4_Direction at TRISb4_bit;
sbit LCD_D5_Direction at TRISb5_bit;
sbit LCD_D6_Direction at TRISb6_bit;
sbit LCD_D7_Direction at TRISb7_bit;       //END lCD MODULE CONNECTION

 void config()
 {
  Keypad_Init();                           // Initialize Keypad
  Lcd_Init();                              // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                     // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
 }

 void keypad()
 {
  do
  {
    kp = 0;                                // Reset key code variable

    // Wait for key to be pressed and released
    do
      {kp = Keypad_Key_Click();}             // Store key code in kp variable
    while (!kp);

   // Prepare value for output, transform key to it's ASCII value
    switch (kp)
     {
      case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
      case  2: kp = 50; break; // 2
      case  3: kp = 51; break; // 3
      case  5: kp = 52; break; // 4
      case  6: kp = 53; break; // 5
      case  7: kp = 54; break; // 6
      case  9: kp = 55; break; // 7
      case 10: kp = 56; break; // 8
      case 11: kp = 57; break; // 9
      case 13: kp = 42; break; // *
      case 14: kp = 48; break; // 0
      case 15: kp = 35; break; // #
     }
   }  while (1);
 }


void main() {
  void config();

  Lcd_Out(1, 1, "Nu:");                 // Write message text on LCD
  Lcd_Out(2, 1, "Total:");



    Loop:  //main loop

    //Get First Number
     NO1_Loop:
      Lcd_out(1,5,"N1: ");
      keypad();                                  // ??????? ??????? ???????

      num1 = kp;       //store first number
      delay_ms(200);  //wait
      WordToStr(kp, num1);                   // Transform counter value to string
      Lcd_Out(1, 7, num1);                   // Display counter value on LCD
      delay_ms(200); //wait

      //Get Second Number
     NO2_Loop:
      Lcd_out(1,10,"N2: ");
      keypad();  //go to keypad function to get the input
      num2 = kp; //store second number
      WordToStr(kp, num2);                   // Transform counter value to string
      Lcd_Out(1, 13, num2);                   // Display counter value on LCD
      delay_ms(200); //wait



    cnt = num1 + num2;
    WordToStr(cnt, txt);                   // Transform counter value to string
    Lcd_Out(2, 10, txt);                   // Display counter value on LCD

}

اعلانات

عيسات كمال
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2015
الدولة: الجزائر
المشاركات: 55
نشاط [ عيسات كمال ]
قوة السمعة:0
قديم 09-12-2015, 02:00 PM المشاركة 2   
attension


السلام عليكم و رحمة الله و بركاته.
الكود فيه بعض الأخطا البسيطة على ما أعتقد فمثلا :
بعد الأمر NO1_Loop:
يوجد الأمر
Lcd_out(1,5,"N1: ");
أي أنك ستكتب عبارة
"N1: "
بدأً من الخانة الخامسة و إنتهاءا في الخانة 9 لأن طول العبارة هو 4 حروف أجنبية.

ثم أضفت الأمر
Lcd_Out(1, 7, num1);
و هذا الأمر سيكتب الرقم الأول المُدخَل في الخانة 7 . و في هذا تعارض في الأمرين فالمتحكم سيخلط بين الرمز ";" و الرقم المُدخَل. فكلاهما رتبته 7 في أثناء أداء المتحكم للأوامر الفعلية.

الأصح أن تكتب مثلا :

Lcd_Out(1, 1, "N: ");
Lcd_Out(1, 5, num1);

و الله أعلى و أعلم.


التعديل الأخير تم بواسطة : عيسات كمال بتاريخ 09-12-2015 الساعة 02:16 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

Abmarhon
:: مهندس ::
تاريخ التسجيل: Apr 2015
المشاركات: 35
نشاط [ Abmarhon ]
قوة السمعة:0
قديم 09-12-2015, 02:59 PM المشاركة 3   
افتراضي


السلام عليكم و رحمة الله و بركاته.
الكود فيه بعض الأخطا البسيطة على ما أعتقد فمثلا :
بعد الأمر NO1_Loop:
يوجد الأمر
Lcd_out(1,5,"N1: ");
أي أنك ستكتب عبارة
"N1: "
بدأً من الخانة الخامسة و إنتهاءا في الخانة 9 لأن طول العبارة هو 4 حروف أجنبية.

ثم أضفت الأمر
Lcd_Out(1, 7, num1);
و هذا الأمر سيكتب الرقم الأول المُدخَل في الخانة 7 . و في هذا تعارض في الأمرين فالمتحكم سيخلط بين الرمز ";" و الرقم المُدخَل. فكلاهما رتبته 7 في أثناء أداء المتحكم للأوامر الفعلية.

الأصح أن تكتب مثلا :

Lcd_Out(1, 1, "N: ");
Lcd_Out(1, 5, num1);

و الله أعلى و أعلم.
جزاك الله خير هذا عشان يوضح بان المدخل هو الرقم الاول
ياريت تصحح الكود حتى لو تمسح كل شي


عيسات كمال
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2015
الدولة: الجزائر
المشاركات: 55
نشاط [ عيسات كمال ]
قوة السمعة:0
قديم 09-12-2015, 05:17 PM المشاركة 4   
attension


جزاك الله خير هذا عشان يوضح بان المدخل هو الرقم الاول
ياريت تصحح الكود حتى لو تمسح كل شي

سأعمل عليه إنشا الله و غدا أوافيك بالجديد


عيسات كمال
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2015
الدولة: الجزائر
المشاركات: 55
نشاط [ عيسات كمال ]
قوة السمعة:0
قديم 10-12-2015, 01:20 PM المشاركة 5   
win


جزاك الله خير هذا عشان يوضح بان المدخل هو الرقم الاول
ياريت تصحح الكود حتى لو تمسح كل شي
السلام عليكم و رحمة الله و بركاته

لقد قمت بتعديل الكود، يمكنك تحميل الملف من الرابط : هنا

أنا لم أمسح البرنامج و لم أعد كتابته من جديد و لكن عدلت على الأخطاء التي كانت موجودة فيه، يمكنك مقارنة الكود الجديد بالقديم لمعرفة مواضع الخطأ التي وقعت فيها، حتى لا تعيدها مرة أخرى. وعلى الرغم من أنني صححته إلا أن هنالك بعض المشاكل التي عليك حلها فمثلا الكود سيسمح لك بالقيام بعملية حسابية واحدة فقط و يتوجب عليك الضغط في كل مرة على الزر Reset لإعادة تشغيل المتحكم و القيام بعملية أخرى.
و أيضا هل فكر لو ضغط بالخطأ عل الزر * أو # فكيف يمكنك حذفها أو إكمال العملية بمثل هذه الرموز.
البرنامج سيسمح لك بعملية ضرب، جمع أو طرح فقط بقيمة لا تتجاوز 9*9 أو 9+9 أو 9-9.
بوُدي أن أساعدك أكثر لكن، بالأخطاء نتعلم، حاول أن تحسن الكود أكثر، إذا واجهتك أي مشاكل سأساعدك، تذكر ‘‘ أنتَ لا تفشل إلا إذا توقفت عن المحاولة ‘‘ .


Abmarhon
:: مهندس ::
تاريخ التسجيل: Apr 2015
المشاركات: 35
نشاط [ Abmarhon ]
قوة السمعة:0
قديم 10-12-2015, 01:54 PM المشاركة 6   
win


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

لقد قمت بتعديل الكود، يمكنك تحميل الملف من الرابط : هنا

أنا لم أمسح البرنامج و لم أعد كتابته من جديد و لكن عدلت على الأخطاء التي كانت موجودة فيه، يمكنك مقارنة الكود الجديد بالقديم لمعرفة مواضع الخطأ التي وقعت فيها، حتى لا تعيدها مرة أخرى. وعلى الرغم من أنني صححته إلا أن هنالك بعض المشاكل التي عليك حلها فمثلا الكود سيسمح لك بالقيام بعملية حسابية واحدة فقط و يتوجب عليك الضغط في كل مرة على الزر Reset لإعادة تشغيل المتحكم و القيام بعملية أخرى.
و أيضا هل فكر لو ضغط بالخطأ عل الزر * أو # فكيف يمكنك حذفها أو إكمال العملية بمثل هذه الرموز.
البرنامج سيسمح لك بعملية ضرب، جمع أو طرح فقط بقيمة لا تتجاوز 9*9 أو 9+9 أو 9-9.
بوُدي أن أساعدك أكثر لكن، بالأخطاء نتعلم، حاول أن تحسن الكود أكثر، إذا واجهتك أي مشاكل سأساعدك، تذكر ‘‘ أنتَ لا تفشل إلا إذا توقفت عن المحاولة ‘‘ .
لك خالص الشكر م. عيسات كامل ع النصائح الذهبية
فعلا لم يعمل البرنامج ولكنني وجدت المشكلة أكرر شكري ^.^

إضافة رد

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

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

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


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025