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

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

الصورة الرمزية زكرياء المغربي
زكرياء المغربي
:: عضو فضي ::
تاريخ التسجيل: Feb 2013
الدولة: المغرب
المشاركات: 682
نشاط [ زكرياء المغربي ]
قوة السمعة:101
قديم 19-11-2013, 05:37 PM المشاركة 1   
افتراضي مشكل في كود بالسي ارجوا المساعدة Twitter FaceBook Google+



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

كود:
for(;;) { Lcd_out(1,1," REF ="); if(PORTC.B0==1){x=x+1; delay_ms(500);} if(PORTC.B1==1){x=x-1; delay_ms(500);} if(PORTC.B2==1){break;} floattostr(x,str); Lcd_out(2,8,str); delay_ms(100); }
لكن عندما أقوم بزيادة الرقم بالضغط فوق 10 تظهر 10.9999 و أنا أريد 11 بالضبط ، و ايظا عندما انقص القيمة بعد 10 تعطي 90 بدل 9 مما يفرض علي مسح الـLCD لكل مرة مما يعني ظهور و اختفاء متكرر للقيمة .
هل من حل ؟
و مثلا حين اضيف في البرنامج حلقة متكرر مع امكانية الخروج منها في حالة تحقق شرط معين يعطيني demo limit
هل من حل ؟
و شكرا جزيلا

اعلانات

الصورة الرمزية زكرياء المغربي
زكرياء المغربي
:: عضو فضي ::
تاريخ التسجيل: Feb 2013
الدولة: المغرب
المشاركات: 682
نشاط [ زكرياء المغربي ]
قوة السمعة:101
قديم 20-11-2013, 11:54 AM المشاركة 2   
افتراضي


ارجوا المساعدة اخواني فالامر مستعجل

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

zamalkawi
:: مهندس جيد ::
تاريخ التسجيل: May 2013
المشاركات: 270
نشاط [ zamalkawi ]
قوة السمعة:0
قديم 20-11-2013, 01:20 PM المشاركة 3   
افتراضي


أقترح أن تعرف x على أنها عدد صحيح int من خلال إضافة الأمر
int x;
في بداية الكود
واستعمل دالة inttostr بدلا من floattostr للتحويل
أظن أن هذا سيحل المشكلة الاولى


التعديل الأخير تم بواسطة : zamalkawi بتاريخ 20-11-2013 الساعة 09:22 PM

zamalkawi
:: مهندس جيد ::
تاريخ التسجيل: May 2013
المشاركات: 270
نشاط [ zamalkawi ]
قوة السمعة:0
قديم 20-11-2013, 01:31 PM المشاركة 4   
افتراضي


أما بخصوص المشكلة الثانية، فالمشكلة هنا أن الأمر Lcd_Out يكتب عدد الأحرف المراد كتابتها بداية من المكان الذي تريد الكتابة في، ويترك باقي الحروف لا يغيرها
فإذا كتبت 9 فسيكتب حرف واحد فقط، فلو كان الرقم المكتوب الآن 10، فسيحذف الواحد ويكتب مكانها 9، أما ال0 فسيتركها كما هي
أحد الحلول المقترحة، هي أن تضيف سطر يكتب فراغ بطول حرفين قبل كتابة x وبالتالي تضمن أن الرقم السابق تم حذفه سواء كان 10 أو 9 أو 15 أو غيرها (لو وصلت إلى 100 فسيكون عليك إضافة فراغ آخر)
وبالتالي يكون عليك إضافة الآتي
Lcd_out(2,8," ");
Lcd_out(2,8,str);
لا أعرف إن كانت هناك حلول أفضل، ولكن أظن أن هذا كافي لحل المشكلة الثانية
هناك حل آخر، وهو أن تكتب فراغ إضافي بعد كتابة الرقم، وذلك باستعمال الأمر
Lcd_Out_Cp(" ");
وبهذا تضمن أن الصفر سيتم حذفه عند النزول من 10 إلى 9، أو من 100 إلى 99 أو من 1000 إلى 999


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 20-11-2013, 03:26 PM المشاركة 5   
افتراضي


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

كود:
for(;;) { Lcd_out(1,1," REF ="); if(PORTC.B0==1){x=x+1; delay_ms(500);} if(PORTC.B1==1){x=x-1; delay_ms(500);} if(PORTC.B2==1){break;} floattostr(x,str); Lcd_out(2,8,str); delay_ms(100); }
لكن عندما أقوم بزيادة الرقم بالضغط فوق 10 تظهر 10.9999 و أنا أريد 11 بالضبط ، و ايظا عندما انقص القيمة بعد 10 تعطي 90 بدل 9 مما يفرض علي مسح الـLCD لكل مرة مما يعني ظهور و اختفاء متكرر للقيمة .
هل من حل ؟
و مثلا حين اضيف في البرنامج حلقة متكرر مع امكانية الخروج منها في حالة تحقق شرط معين يعطيني demo limit
هل من حل ؟
و شكرا جزيلا
سلام عليكم
بالنسبه الى float هو مايكروسي يعطيك مثلا 10.99999 ولايعطيك 11 وحقيقه لاأعرف سبب ذلك
ولكن يمكنك تحديد الرقم بسهوله عن طريق مصفوفه
للتوضيح شاهد هذا الرابط وركز على كيفيه تحديد القيم الى 3 او 4 او ....
http://eeecb.com/vb/showthread.php?t=842

ايضا
http://eeecb.com/vb/showthread.php?t=841

وهذا ملف أيضا لاحظ كيف أعرضت الرقم هو يحتوي على الارقام عشريه
http://arabsh.com/files/0c36474e67f0...older-rar.html

************************************************** ***
اما بالنسبه لظهور مشكله demo limit
سببه هو أن برنامج لديك غير مسجل لذلك يسمحلك بكتابه برنامج لغايه 2 كيلوبايت
حمل برنامج أدناه ألغي قديم ومسحه بشكل نهائي ونصب برنامج مرفق وبعد ذلك يوجد ملف كراك أنسخه وضعه في ملفات البرنامج

http://www.mediafire.com/download/zc...uild.6.0.0.rar


الصورة الرمزية عريبى محمود
عريبى محمود
:: ( رحمه الله عليه ) ::
تاريخ التسجيل: Jan 2009
الدولة: لا تسأل الطغاه لماذا طغو بل اسأل العبيد لماذا انحنو
المشاركات: 3,139
نشاط [ عريبى محمود ]
قوة السمعة:188
قديم 20-11-2013, 05:07 PM المشاركة 6   
x4


سلام عليكم
بالنسبه الى float هو مايكروسي يعطيك مثلا 10.99999 ولايعطيك 11 وحقيقه لاأعرف سبب ذلك
ولكن يمكنك تحديد الرقم بسهوله عن طريق مصفوفه
للتوضيح شاهد هذا الرابط وركز على كيفيه تحديد القيم الى 3 او 4 او ....
http://eeecb.com/vb/showthread.php?t=842

ايضا
http://eeecb.com/vb/showthread.php?t=841

وهذا ملف أيضا لاحظ كيف أعرضت الرقم هو يحتوي على الارقام عشريه
http://arabsh.com/files/0c36474e67f0...older-rar.html

************************************************** ***
اما بالنسبه لظهور مشكله demo limit
سببه هو أن برنامج لديك غير مسجل لذلك يسمحلك بكتابه برنامج لغايه 2 كيلوبايت
حمل برنامج أدناه ألغي قديم ومسحه بشكل نهائي ونصب برنامج مرفق وبعد ذلك يوجد ملف كراك أنسخه وضعه في ملفات البرنامج

http://www.mediafire.com/download/zc...uild.6.0.0.rar
السلام عليكم ورحمة الله وبركاته
---------------------------------
اخى الكريم زكرياء
سبب ظهور 10.999999 بدلا من 11 هو انك تستخدم متغير float وهو متغير
من خصائصه ان يظهر الارقام الصحيحة والكسور العشرية



التعديل الأخير تم بواسطة : عريبى محمود بتاريخ 20-11-2013 الساعة 05:12 PM
إضافة رد

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

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

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


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

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