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

   

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 14-11-2016, 04:02 AM المشاركة 9   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما



العفو أخي..
ما فائدة اعطاء تلك المصفوفة اقام من (0) الى (9) ؟
اعتقد تسأل عن وظيفة هذه المصفوفة اصلا
لأنها تفيدنا عند العرض:
فكرة جميلة ..المصفوفة في هذه الحالة تعمل مثل 'دالة' ان فهمت قصدي
فكرة المصفوفة هنا كل ما تقوم به هو تحويل رقم (من 0 الى 9) الى 8 بتات تناسب البور والشاشة ليتم عرض ذلك الرقم
مثلا في لحظة ما تريد اظهار الرقم 8 في الشاشة:
كود:
portb=segment[8];
لاحظ ان المصفوفة تقوم فقط بالترجمة ان صح التعبير..
-----------
لاحظ كيف يم استخلاص قيم وحدات ومئات والاف العدد tlong عن طريق حساب القسمة والباقي ..
ليكن tlong = 2498
يتم تعيين رقم المئات .. هكذا
كود:
tlong%1000/100
والنتيجة تساوي 4 في حالتنا
هل سنرسل مباشرة القيمة 4 الى البور؟
طبعا لا .. هنا نذخل المصفوفة تتصرف كدالة ، تعود لنا بالقيمة اللازم ارسالها في البور لاظهار (4) في الشاشة
ولاحظت قبل ذلك اجراء عملية and مع القيمة 0x08 لا ادري لماذا ربما لتجنب ثغرة ما ,, المهم اعتبر الكود كما يلي
كود:
seg_data=segment[tlong%1000/100];
اتمنى ان اكون قد اجبتك ,,
واي استفسار لا تتردد ..


بارك الله فيك أخى ..

والله عاجز عن الشكر .. شكراااا جزيلا لك ..


فعلا شرح شافى ووافى ..

ولكن لى بعض التوضيحات ...

انا الحمد لله فهمة الغرض من المصفوفه وكتابتها بهذا الشكل

كود:
 char segment[]={63,6,91,79,102,109,125,7,127,111};
وهى تشبه كثيرااا هذة الفكرة مع اختلاف بسيط..


كود:
 unsigned short mask(unsigned short num){
               switch (num){
 case 0 : return 0xC0;
 case 1 : return 0xF9;
 case 2 : return 0xA4;
 case 3 : return 0xB0;
 case 4 : return 0x99;
 case 5 : return 0x92;
 case 6 : return 0x82;
 case 7 : return 0xD8;
 case 8 : return 0x80;
 case 9 : return 0x90;
}
}
هذه الفكرة من الكود هى أختبار القيمة الداخله عليها والتحقق من الرقم لو يتشابه مع رقم من ( 0 ) الى ( 9 ) يأخذ هذا الرقم ويحولة .. أو يترجمه الى 8 بتات .. بنظام الهيكس .. أو بالديسمال .. ويبعتة الى متغير أخر ومن ثم يعرض على الشاشه .. لأن الشاشه لا تفهم الأرقام بشكل مباشر يجب تحويلها الى بتات لكى تضيء العارضات المرادفة للبتات بختلاف انواعها .. لو كانت ( أنود ) أو ( كاسود ) ..

كما نعلم أن ال7سيجمنت مكونه من 7عارضات ليدات .. وبيتم تشكيل الأرقام والرموز عليها من خلال اشعال العرضات المختارة ..

ولكن لى سؤال أو توضيح ..
كيف تتم هذة المعادلة
كود:
tlong%1000/100
.. يرجى شرحها بالتفصيل وياريت لو بمثال على استخراج رقم فى خانة الأحاد .. ورقم فى خانة المئات وياريت تتم الشرح بمسال للأستخراج رقم من خانة الألاف ..

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

السؤال ..

عندنا رقم غير وليكن ( 2498 ) وتم اسناد هذا الرقم لمتغير طويل من نوع
كود:
  long
وسمينا هذا المتغير بأسم ( tlong ) ...
وعندنا 4 شاشات 7 سيجمنت ..

السؤال هنا كيف استطيع عرض هذا الرقم على الأربع شاشات ..لكى تصبح الشاشة الأولى من ناحية الشمال معروض عليها رقم (2 ) وهى خانة الألاف ..
والشاشه الثانيه من ناحية الشمال يعرض عليها رقم ( 4 ) وهى خانة المئات ...
والشاشه الثالثة من ناحية الشمال يعرض عليها رقم ( 9 ) وهى خانة العشرات ...

والشاشه الرابعة من ناحية الشمال يعرض عليها رقم (8 ) وهى خانة الأحاد ...

أنا اعلم من خلال هذة الطريقه يتم استخراج الأرقام ومن ثوم عرضها على
كود:
tlong%1000/100
الشاشات من خلال خاصية ال multiplexage .. بمعنى استخراج رقم الألاف و تحويله الى 8 بتات ومن ثم اسنادة للبورت ( B ) لكى يتم تشكيل رقم ( 2 ) على ال7سيجمنت ومن ثم تفعيل أنود الشاشة أو كاسود الشاشه الرابعة لكى يظهر عليها رقم ( 2 ) وأنتظار
كود:
  delay_ms(1);
لكى يعطى أسر على العين .. ومن ثم أطفاء الشاشة الرابعه ..

وبنف الطريقه يتم استخراج رقم الميئات من خلال هذة المعادلة
كود:
 tlong%1000/100
.. وايضااا اسناد القيمه الى بعد تحويلها الى 8 بتات الى البورت ( B ) لكى تعرض على الشاشة الثانيه من خانة الميئات ..

وهكذا مع خانة العشرات .. والأحاد ..

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

وسؤال أخر كيف يتم ارسال الرقم الناتج من خلال هذة المعادلة
كود:
tlong%1000/100
الى المصفوف و يتم تحويلة الى 8 بتات بما يتناسب مع قيمه الرقم .. بمعنى لو كان الرقم المرسل الى المصفوفه هو (0 ) ترد المصفوفه هذا الرقم ب 63 وهو النظام العشرى لكى يتناسب مع ال 8 بتات ويتم عرضة على شاشه ال 7 سيجمنت ..

ما اريد فهمه كيف تمييز المصفوفه الأرقام ومن ثم ترد بالرقم المرادف ولكن بالنظام العشرى ..


وأسف جدااا على الإطالة .. ولك منى وللأخوة الكرام كل الإحترام والتقدير ..

جزاك الله كل الخير ..

تحياتى


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 14-11-2016 الساعة 09:22 AM
اعلانات

الصورة الرمزية ياسين الحانوتي
ياسين الحانوتي
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2013
المشاركات: 164
نشاط [ ياسين الحانوتي ]
قوة السمعة:
قديم 15-11-2016, 01:54 AM المشاركة 10   
افتراضي


وهى تشبه كثيرااا هذة الفكرة مع اختلاف بسيط..



كود:
 unsigned short mask(unsigned short num){
               switch (num){
 case 0 : return 0xC0;
 case 1 : return 0xF9;
 case 2 : return 0xA4;
 case 3 : return 0xB0;
 case 4 : return 0x99;
 case 5 : return 0x92;
 case 6 : return 0x82;
 case 7 : return 0xD8;
 case 8 : return 0x80;
 case 9 : return 0x90;
}
}


تماما .. تقوم بنفس الوظيفة الا ان المصفوفة مختصرة من ناحية المساحة

كيف تتم هذة المعادلة

كود:
tlong%1000/100
هذه تحسب لنا رقم مئات العدد tlong
كيف تستخرج الارقام المكونة للعدد
الفكرة بسيطة .. تتطلب اولا ان تفهم عملية % والتي تقوم بحساب باقي قسمة عددين
مثال:
كود:
mod = 10%2;
هنا mod سيساوي 0 لأن قسمة 10 على 2 هي 5 ولكن ليس هناك باقي اي 0

مثال آخر
كود:
mod = 540%100;
هنا النتيجة هي 40 لأن قسمة 540 على مئة تساوي 5 مع باقي وهو 40

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

-يمكنك ان تلاحظ اننا عندما نحسب باقي قسمة عدد ما على 10 نحصل على الجزء الوحدات هذا العدد
كود:
4587%10 = 7
-ولو قمنا بحساب باقي قسمة عدد على 100 سنجد وحدات وعشرات ذلك العدد
كود:
4587%100=87
-بينما القسمة على 1000 تعطينا وحدات وعشرات ومئات العدد كباقي
كود:
4587%1000=587
لكن نحن نريد مثلا عشرات العدد 1452 فقط (رقم واحد وهو 5)
نقوم اولا باستخراج باقي قسمة العدد 1452 على 10 لنحصل على 52
ولأننا نريد العشرات فقط نقسم النتيجة على 10 لنجد بلا شك عدد جزءه الصحيح هو ما نبحث عنه ( 5,2 ) ولأن المصفوفة في حالة اسناد اليها عدد حقيقي مثل (5.2) تعتبره فقط 5 .. لا داعي للتفكير في التخلص من الفاصلة

مثال آخر نريد مئات 1452 نقوم بحساب باقي قسمة 1452 على 1000
نجد 452 ونقسم النتيجة على 100 لنجد 4.52 .. كذلك تعتبرها المصفوفة ك 4

اتمنى ان تتضح لك فكرة استخراج الارقام الآن نريد عرضها

عندنا رقم غير وليكن ( 2498 ) وتم اسناد هذا الرقم لمتغير طويل من نوع

كود:
 long
وسمينا هذا المتغير بأسم ( tlong ) ...
وعندنا 4 شاشات 7 سيجمنت ..

السؤال هنا كيف استطيع عرض هذا الرقم على الأربع شاشات
انت فاهم طريقة MULTIPLEXAGE وتعرف الحلقة ،،والديلاي ..وتشغيل كاثود كل شاشة على حدة الخ..
الآن نريد عرض 2498 كما قلت
نفترض ان هذا العدد مخزن في متغير اسمه TLONG
اذن نكرر هذه الحلقة:
كود:
PORTB = segment(tlong%10)

// تشغيل شاشة الوحدات + الديلاي
PORTB = segment(tlong%100/10)

// تشغيل شاشة العشرات+ الديلاي

PORTB = segment(tlong%1000/100)

// تشغيل شاشة المئات+ الديلاي

PORTB = segment(tlong/1000)

// تشغيل شاشة الالاف+ الديلاي


كود:
ملاحظة:
tlong%1000%100%10 = tlong%10 !!
tlong%1000%100 = tlong%100
:
:
لاحظ ان الكود الاصلي مختلف قليلا لأنه 
عوض ان يستخرج  مثلا قيمة الوحدات مباشرة ,,
 يحذف بالتتابع الالاف ثم المئات ثم العشرات .. 
ربما لا فائدة من هذا جرب ورد علي ..
العفو .. أخي
.وبالتوفيق...

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 15-11-2016, 03:45 AM المشاركة 11   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


المشاركة الأصلية كتبت بواسطة ياسين الحانوتي
ملاحظة:
tlong%1000%100%10 = tlong%10 !!
tlong%1000%100 = tlong%100
:
:
لاحظ ان الكود الاصلي مختلف قليلا لأنه
عوض ان يستخرج مثلا قيمة الوحدات مباشرة ,,
يحذف بالتتابع الالاف ثم المئات ثم العشرات ..
ربما لا فائدة من هذا جرب ورد علي ..


بارك الله فيك فعلا انت انسان مبدع وشرحك للموضوع جميل جدااا ..

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

لقد اجريت العديد من التطبيقات على الكود والحمد لله كلها ناجحة والنتائج رائعة ..

مشروع عداد تصاعدى تنازلى من خلال 2 مفتاح " بوش بوطن "



ولك الكود والمشروع كامل للتجربة اللتى اجريتها على شرحك للموضوع ..

https://drive.google.com/open?id=0Bx...EdsOVl6cFZDRGM


متشكر جداا أخى على تعبك معى ..

تحياتى لك وتحياتى لباقى الأخوة الكرام ..


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 15-11-2016 الساعة 03:56 AM

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 15-11-2016, 06:32 AM المشاركة 12   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


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

أخى الكريم
ياسين الحانوتي
لو تسمح لى عندى أمر محيرنى جداااا ..

أخى يوجد تطبيق اشتغل علية الأن وانجزت 90 % من المشروع ولكن ينقصنى شئ مهم جدااا ..

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

سؤالى .. كيف استطيع طرح قيمه ما موجود على دخل محول الإشارة ADC ...

وللتوضيح أكثر يوجد مفتاح فى الموازين يسمى بمفتاح " الزيرو " وهو لتجاهل الوزن الموضوع على الميزان ..

مثال أنا عندى " 1 كيلو أرز " أريد وزنه فى وعاء وزن الوعاء 300 جرام ... ما أريدة هو عند وضع الوعاء على الميزان وأضغط على زرار " التصفير " يتجاهل الميزان "" وزن الوعاء .. ويبدأ يحسب وزن " الأرز فقط " ..

ولك الكود للإطلاع علية ..

كود:
 

        //  ENG /  ABDALLA HEYGAZY   //
     //     DATA  / 2016 / 3 / 17     //

#define enable_1        portb.f0
#define enable_2        portb.f1
#define enable_3        portb.f2
#define enable_4        portb.f3
#define enable_5        portb.f4
#define enable_6        portb.f5

#define DP              portc.f7
////////////////////////////////
#define enable_1_dir    trise.f0
#define enable_2_dir    trise.f1
#define enable_3_dir    trise.f2
#define enable_4_dir    trise.f3
#define enable_5_dir    trise.f4
#define enable_6_dir    trise.f5

#define DP_dir          trisc.f7
////////////////////////////////
#define seg_data         portc
#define seg_data_dir     trisc

#define output          0
#define input           1
#define off             0
#define on              1

////////////////////////////////////////////////////////////////////////////////
char segment[]={63,6,91,79,102,109,125,7,127,111};
unsigned int adc_rd,ZERO,x;
long tlong;

///////////////////
void init(){
INTCON = 0;
ADCON1 = 0x02;

seg_data_dir=enable_1_dir=enable_2_dir=enable_3_dir=DP_dir=enable_4_dir=enable_5_dir=enable_6_dir=output;
seg_data_dir=enable_4_dir=enable_5_dir=enable_6_dir=DP_dir=output;

seg_data=0;
enable_1=1;
enable_2=1;
enable_3=1;
enable_4=1;
enable_5=1;
enable_6=1;
TRISB=output;
TRISD=255;
PORTB=off;
TRISE=output;
PORTE=off;
TRISA=3;
PORTE=off;

 }
 
   void show_adc() {
   
   adc_rd = ADC_Read(0);
   tlong = (long)adc_rd * 9999;
   tlong = tlong / 1023;
   

}

void show_number() {
////////////////////////////////////////////////////////////////////////////////
enable_1=0;enable_2=1;
enable_3=1;enable_4=1; DP=1;
seg_data=seg_data&0x80|segment[tlong/1000];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=0;
enable_3=1;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000/100];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=0;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000%100/10];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=1;enable_4=0;
seg_data=seg_data&0x80|segment[tlong%1000%100%10];
delay_ms(1);

seg_data=0;

}

      void main(){
      init();

     while (1)
    {
    
     show_adc();
     show_number();

     if( PORTD.F0==0 ) { tlong++; delay_ms(10);  }
     if( PORTD.F1==0 ) { tlong--; delay_ms(10);  }
     if( tlong > 9999 ) { tlong = 9999;   }
     else
     if( tlong <  0    ) { tlong = 0;      }
     

   }
  }

اولا أنا عامل محكاة للميزان بستخدام مقاومه متغيرة مربوطه على مدخل محول الإشارة " ADC " فى البن رقم ( 0 ) للبورت ( A ) ..


ويوجد متغير أسمه
كود:
 adc_rd
هذا المتغير يسند الية القيمه المقرؤة من محول الإشارة من خلال هذا السطر من الكود
كود:
  adc_rd = ADC_Read(0);
وبعد ذالك بيتم اجراء عملية ضرب وقسمه على قيمة المتغير
كود:
 adc_rd
ووضع الناتج فى متغير أخر اسمه
كود:
 tlong
وبعد ذالك ندخل فى مرحلة عرض الناتج على الأربع شاشات 7سيجمنت .. من خلال هذا الجزء من الكود ..
كود:
 

void show_number() {
////////////////////////////////////////////////////////////////////////////////
enable_1=0;enable_2=1;
enable_3=1;enable_4=1; DP=1;
seg_data=seg_data&0x80|segment[tlong/1000];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=0;
enable_3=1;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000/100];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=0;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000%100/10];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=1;enable_4=0;
seg_data=seg_data&0x80|segment[tlong%1000%100%10];
delay_ms(1);

seg_data=0;

}

السؤال هنا وهو ما اريدة ..

هو الأعلان عن متغير جديد وليكن اسمة ( X ) ويتم اسناد له قيمه المتغير
كود:
  adc_rd
من خلال هذة الطريقة
كود:
  X=adc_rd;
والمتغير
كود:
 adc_rd
هو مخزن عليه قيمة قرأة محول الإشارة طبعاااا

وبعد ذالك ندخل فى حلقة
كود:
   while (1)
    {
    
     show_adc();
     show_number();

     ونضع أمر شرط مخصص لمفتاح معين فى الهارد وير .. وعند الضغط على المفتاح بتحقق الشرط ويتم طرح قيمة المتغير  X   من المتغير  adc_rd  وفائدة هذا الأمر هو تصفير الشاشات أو خلينا نقول تصفير الوزن الغير مرغوب فيه 


   }
حاولت استخدام هذة الطريق
كود:
 adc_rd = adc_rd  -   X  ;
وهى طرح قيمه X من adc_rd ولكن محول الإشارة علية قرأة موجود بستمرار وبالتالى عملية الطرح هذة لا فائدة منها لأن كلما طرحنا قيمة X من adc_rd يعود البرنامج بقرأة محول الإشارة من جديد ويضع القيمه اللتى طرحنها من المتغير adc_rd وتستمر المشكله

فكرت كثيرااا ولكن للأسف لم اتوصل لحل

كل ما اريدة هو طرح قيمه موجودة بالفعل على محول الإشارة ومن ثم حساب او قرأة ما فوق القيمه المطروحه ..

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

فضلا وليس أمر من يجد طريق ما أو حل لهذة النقطه يعرضها علينا .

ولكم كل الشكر والإحترام


ملحوظه ربما يقول احد الأخوة لماذا كل هذا العناء فيوجد موازين موجودة فى الأسواق رخيصه وجيدة..

اقول له ما اريدة من الميزان هذا هو ليس الوزن فقط ولكن يوجد العديد من الأجرائات اللتى سينفذها الميزان
عندما يصل لوزن معين .. خلينا نقول هو يقرب الى خط انتاج للتعبة الألى . يعنى اكثر من مجرد ميزان هو سيستم كامل ..
والله الموفق


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 15-11-2016, 10:38 AM المشاركة 13   
افتراضي


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

الحمد لله الذى بنعمته تتم الصالحات , اخ عبد الله حاولت مساعدتك باذن الله و ارجو ان اكون وفقت بفضله ,
الاكواد التى اضفتها باللون الاحمر سميت قيمة وزن الطبق الفارغ الذى اسميته حضرتك X اسميته طبق فاضى tabaq_fady و هى القيمة المراد خصمها من الوزن للتصفير .
والله ولى التوفيق

كود:

        //  ENG /  ABDALLA HEYGAZY   //
     //     DATA  / 2016 / 3 / 17     //

#define enable_1        portb.f0
#define enable_2        portb.f1
#define enable_3        portb.f2
#define enable_4        portb.f3
#define enable_5        portb.f4
#define enable_6        portb.f5

#define DP              portc.f7
////////////////////////////////
#define enable_1_dir    trise.f0
#define enable_2_dir    trise.f1
#define enable_3_dir    trise.f2
#define enable_4_dir    trise.f3
#define enable_5_dir    trise.f4
#define enable_6_dir    trise.f5

#define DP_dir          trisc.f7
////////////////////////////////
#define seg_data         portc
#define seg_data_dir     trisc

#define output          0
#define input           1
#define off             0
#define on              1

////////////////////////////////////////////////////////////////////////////////
char segment[]={63,6,91,79,102,109,125,7,127,111};
unsigned int adc_rd,ZERO,x;
long tlong , tabaq_fady = 0; //***********

///////////////////
void init(){
INTCON = 0;
ADCON1 = 0x02;

seg_data_dir=enable_1_dir=enable_2_dir=enable_3_dir=DP_dir=enable_4_dir=enable_5_dir=enable_6_dir=output;
seg_data_dir=enable_4_dir=enable_5_dir=enable_6_dir=DP_dir=output;

seg_data=0;
enable_1=1;
enable_2=1;
enable_3=1;
enable_4=1;
enable_5=1;
enable_6=1;
TRISB=output;
TRISD=255;
PORTB=off;
TRISE=output;
PORTE=off;
TRISA=3;
PORTE=off;

 }
//*********************************
void show_adc() {
   adc_rd = ADC_Read(0);
   tlong = (long)adc_rd * 9999;
   tlong = tlong / 1023;
   tlong = tlong - tabaq_fady ; //**********************
}

void show_number() {
////////////////////////////////////////////////////////////////////////////////
enable_1=0;enable_2=1;
enable_3=1;enable_4=1; DP=1;
seg_data=seg_data&0x80|segment[tlong/1000];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=0;
enable_3=1;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000/100];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=0;enable_4=1;
seg_data=seg_data&0x80|segment[tlong%1000%100/10];
delay_ms(1);
seg_data=0;
////////////////////////////////////////////////////////////////////////////////
enable_1=1;enable_2=1;
enable_3=1;enable_4=0;
seg_data=seg_data&0x80|segment[tlong%1000%100%10];
delay_ms(1);
seg_data=0;
}

void main(){
 init();
 while (1)
    {
     show_adc();
     show_number();
     if (/*button_zero*/){delay_ms(50); tabaq_fady = tlong;} //*********
     if( PORTD.F0==0 ) { tlong++; delay_ms(10);  }
     if( PORTD.F1==0 ) { tlong--; delay_ms(10);  }
     if( tlong > 9999 ) { tlong = 9999;   }
     else
     if( tlong <  0    ) { tlong = 0; tabaq_fady = 0;     }   //**********
   }
}
اللهم صبرك و نصرك
و الله المستعان
ولا حول و لا قوة الا بالله



التعديل الأخير تم بواسطة : مشتاق الله بتاريخ 15-11-2016 الساعة 11:02 AM

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 16-11-2016, 02:36 AM المشاركة 14   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


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

الحمد لله الذى بنعمته تتم الصالحات , اخ عبد الله حاولت مساعدتك باذن الله و ارجو ان اكون وفقت بفضله ,
الاكواد التى اضفتها باللون الاحمر سميت قيمة وزن الطبق الفارغ الذى اسميته حضرتك X اسميته طبق فاضى tabaq_fady و هى القيمة المراد خصمها من الوزن للتصفير .
والله ولى التوفيق

كود:

   tlong = tlong - tabaq_fady ; //**********************


     if (/*button_zero*/){delay_ms(50); tabaq_fady = tlong;} //*********
     
     if( tlong <  0    ) { tlong = 0; tabaq_fady = 0;     }   //**********
اللهم صبرك و نصرك
و الله المستعان
ولا حول و لا قوة الا بالله

السلام عليكم ورحمه الله


جزاك الله خيرااا اخى " مشتاق الله "

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


بارك الله فيكم
تحياتى



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