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

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

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 25-10-2013, 01:16 PM المشاركة 1   
ha convert from string to int Twitter FaceBook Google+



السلام عليكم ..
انا كنت بستخدم keypad علشان ادخل ارقام وكنت بخزنها في مصفوفة
char txt [5];
وكنت عاوز احول المصفوفة دة الي عدد int علشان انا هستخدمة في عمليات حسابية ومش عارف اعمل كدة ....

ولو في طريقة من الاول اني ادخل من ال keypad ارقام int يكون اكيد افضل

وشكرا

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 25-10-2013, 04:43 PM المشاركة 2   
افتراضي


السلام عليكم ..
انا كنت بستخدم keypad علشان ادخل ارقام وكنت بخزنها في مصفوفة
char txt [5];
وكنت عاوز احول المصفوفة دة الي عدد int علشان انا هستخدمة في عمليات حسابية ومش عارف اعمل كدة ....

ولو في طريقة من الاول اني ادخل من ال keypad ارقام int يكون اكيد افضل

وشكرا
سلام عليكم
حسب ماأفتهمت انك تريد حصول على رقم كامل مثلا تريد حصول على 1000 من لوحة كيبادة

تستخدم عملية الضرب والجمع
مثلا [x=1000*y[3]+100*y[2]+10*y[1]+y[0
طبعا عليك تعريف متغير x من نوع int او long حسب اقصى رقم لديك

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

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 25-10-2013, 09:30 PM المشاركة 3   
افتراضي


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

دلوقتي انا بحاول اعمل الة حاسبة المشكلة اني لازم احدد حجم المصفوفة قد اية في حين لو انا عاوز اسبها مفتوحة ومثلا يقا اكبر عدد يكون مثلا مكون من 8 خانات اعمل حاجة زي كدة ازاي وازاي افهمة ان بعد (/*+-)دة رقم جديد ويعمل علية العملية الجديدة ؟؟

عموما الف شكر بشمهندس


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 26-10-2013, 09:00 AM المشاركة 4   
افتراضي


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

دلوقتي انا بحاول اعمل الة حاسبة المشكلة اني لازم احدد حجم المصفوفة قد اية في حين لو انا عاوز اسبها مفتوحة ومثلا يقا اكبر عدد يكون مثلا مكون من 8 خانات اعمل حاجة زي كدة ازاي وازاي افهمة ان بعد (/*+-)دة رقم جديد ويعمل علية العملية الجديدة ؟؟

عموما الف شكر بشمهندس
سلام عليكم
أخي كريم
فكرتلك بكود يحل مشكلة من خلال هذا كود يمكنك حصول على أي رقم يبقى انت كيف تستفيد منه المهم في موضوع الفكرة الكود
كود:
if(num>=0 && num <=9)
  {
   if(num==0)k1=0;
   else
      {
       k1=1;
      }
    if(start_operation==0 && k1==1)start_operation=1;
    if( start_operation >=1)
      {
          start_operation ++;
        if( start_operation ==2) number=num;
        else
          {
           number=number *10+num;
          }
      
      }
  
  }
شرح الكود
انت راح تستخدم كيباده في كيباده يوجد ارقام من 0 الى 9 وباقي اخر ليست أرقام
أفترض اني قرات من كيباده
هذا جزء من كود كيبادة
كود:
 while( kp is 0)kp=Keypad_Key_Click();
   if( kp is 1 )        num=7;
    else if( kp is 2  ) num=4;
    else if( kp is 3  ) num=1;
    else if( kp is 5  ) num=8;
    else if( kp is 6  ) num=5;
    else if( kp is 7  ) num=2;
    else if( kp is 8  ) num=0;
    else if( kp is 9  ) num=9;
    else if( kp is 10 ) num=6;
    else if( kp is 11 ) num=3;
هنا يتم خزن الارقام من 0 الى 9 في متغير num
الان عندنا مشكلة عند كتابة الرقم وهو عندما يتم كتابة رقم الاول 0 يجب أهمال هذا الرقم لذا قمت بكتابة هذا الكود
كود:
if(num==0)k1=0;
   else
      {
       k1=1;
      }
فأذا كان num=0 جعلت متغير k1=0 واذا لايساوي 0 جعلته =1
عندها سوف يحقق لي شرط أخر
كود:
 if(start_operation==0 && k1==1)start_operation=1;
start_operation بالبدايه=0 يعني لاتوجد هناك أي عملية لكتابة الرقم
ولكن ماذا أعني بهذا الشرط
اذا كان رقم الاول=0 فأن k1=0 ولن يتحقق وسوف يهمل هذا رقم ام اذا لم يكن =0 عندها أصبح k1=1 وبما أنا start_operation=0 فعندها يصبحstart_operation=1
وعندها يدخل في هذا الشرط وهو بداية العملية كتابة الرقم
كود:
if( start_operation >=1)
      {
          start_operation ++;
        if( start_operation ==2) number=num;
        else
          {
           number=number *10+num;
          }
      
      }
هنا بتاكيد عند دخولنا الى هذا الشرط الرقم اي num لايساوي 0 ولكن هنا عندنا مشكلة بسيطة وهي انا بحاجه الى رقم بداية اي منه ابدأ اكتب رقم بمعنى اخر
يعني رقم أحاد
فقمت بحل هذه مشكله بأن اكتب هذا الكود
كود:
 start_operation ++;
في الاول بداية كتابة رقم start_operation =1 وعندما أجمع علية بواحد يصبحstart_operation =2 عندها يدخل في هذا الشرط
كود:
if( start_operation ==2) number=num;
وهو يدخل الى هذا شرط مره واحدة فقط اي انني حليت مشكلة رقم الاول
والان نحصل على بقية الارقام بسهوله جدا بهذه المعادلة
كود:
 number=number *10+num;

أخي كريم خلي في بالك عندما تضغط على اي مفتاح ليس رقم فأنها تعتبر نهاية العملية واذا كتبت رقم أخر فانه يبدأ من جديد
لذا عليك خزن ماحصلته من رقم في متغير اخر لانك سوف تجعل
start_operation =0 و k1=0 تمهيدا لكتابه رقم أخر


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 26-10-2013 الساعة 09:15 AM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 26-10-2013, 09:30 AM المشاركة 5   
افتراضي


لنفرض اريد كتابه هذا 0123050 واريد حصل على هذا رقم

بالبدايه كتبت رقم 0 سوف يهمل لان k1=0 ولن تتحق باقي شروط
بعدها كتبت رقم 1
ايضا سوف يصبح k1=1 وعندها يصبح start_operation=1 وهنا يعني أنك سوف تكتب رقم الاول
وبعدها يجمع على start_operation بواحد تصبح قيمته 2 عندها نحصل على هذا معادلة number=num وهنا number=1
وعندما أكتب بعد ذلك 2
هنا سوف تصبح لدينا معادلة جديدة وهي number=number *10+num
لان قيمة start_operation =3
عندها number=1*10+2=12
وهكذا وعند كتابة رقم 3 number=12*10+3=123
وعند كتابة رقم 0 number=123*10+0=1230
وعند كتابة رقم 5 number=1230*10+5=12305
وعند كتابة رقم 0 number=12305*10+0=123050

ارجوا اني وصلت اليك الفكرة


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 26-10-2013 الساعة 09:33 AM

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 18-11-2013, 09:17 AM المشاركة 6   
افتراضي


السلام عليكم بشمهندس ....
ايف جدا علي التاخير ..
انا في الحقيقة جربت البرنامج وهوا ممتاز وعدلت علية شوية علشان اشيل المتغير K علشان اقلل شوية المتغيرات والموضوع كان تمام اوي وعملتة ياخد ارقام لحد 4294967295 long int وكان الموضوع تمام وشلت تاثير باقي الزراير بتاعت الكيباد .
.
وكلة كان تحفة .
بس حاولت اني اعمل حاجة كمان بقا اني اعرف اكتب ارقم float فيها 0.01 يعني عملت البرنامج وضبطة وكل حاجة بس بيديني error غيرب اوي اول مرة اشوفة
.
Demo limit هو دة ال Error ومش عارف السبب ..
فلو حضرتك تعرف او اي حد يعرف يكون كويس اوي
الكود اهوا


كود:
//sbit
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;
char keypadport at portd;
//variables
int num,start_operation=0,start_point=0,flag=0;
float number=0;
float point;
char kp;
char number_txt[15];

void key_check(){
kp=0;
while(kp==0){
kp = Keypad_Key_Click();
}
}

void convert() {
switch(kp){
case 1 : num=7; break;
case 2 : num=8; break;
case 3 : num=9; break;
case 4 : num=100; break;
case 5 : num=4; break;
case 6 : num=5; break;
case 7 : num=6; break;
case 8 : num=100; break;
case 9 : num=1; break;
case 10: num=2; break;
case 11: num=3; break;
case 12: num=100; break;
case 13: num=10; break;
case 14: num=0; break;
case 15: num=100; break;
case 16: num=100; break;
}
}

void inte(){
if(num==10){flag=1;}
if(num>=0 && num<=9 && flag==0){
 if(start_operation==0 && !(!num)){start_operation=1;}
 if(start_operation >=1) {
 start_operation++;
 if (start_operation ==2){number=num;}
 else{number=(number*10)+num;}
 }//if
 }//if
 if(flag=1){
  start_point++;
  point= point+ ((num)/(10^start_point));
 }
 number=number+point;
}//void

void desplay(){
floattostr(number,number_txt);
lcd_out(1,1,number_txt);
}

void main(){
Lcd_Init();
Keypad_Init();
Lcd_Cmd(_LCD_CLEAR);
lcd_cmd(_lcd_cursor_off);
while(1){
key_check();
convert();
inte();
desplay();
}//while
}//void


التعديل الأخير تم بواسطة : abdo1992 بتاريخ 18-11-2013 الساعة 09:26 AM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 18-11-2013, 04:25 PM المشاركة 7   
افتراضي


السلام عليكم بشمهندس ....
ايف جدا علي التاخير ..
انا في الحقيقة جربت البرنامج وهوا ممتاز وعدلت علية شوية علشان اشيل المتغير K علشان اقلل شوية المتغيرات والموضوع كان تمام اوي وعملتة ياخد ارقام لحد 4294967295 long int وكان الموضوع تمام وشلت تاثير باقي الزراير بتاعت الكيباد .
.
وكلة كان تحفة .
بس حاولت اني اعمل حاجة كمان بقا اني اعرف اكتب ارقم float فيها 0.01 يعني عملت البرنامج وضبطة وكل حاجة بس بيديني error غيرب اوي اول مرة اشوفة
.
Demo limit هو دة ال Error ومش عارف السبب ..
فلو حضرتك تعرف او اي حد يعرف يكون كويس اوي
الكود اهوا


كود:
//sbit
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;
char keypadport at portd;
//variables
int num,start_operation=0,start_point=0,flag=0;
float number=0;
float point;
char kp;
char number_txt[15];

void key_check(){
kp=0;
while(kp==0){
kp = Keypad_Key_Click();
}
}

void convert() {
switch(kp){
case 1 : num=7; break;
case 2 : num=8; break;
case 3 : num=9; break;
case 4 : num=100; break;
case 5 : num=4; break;
case 6 : num=5; break;
case 7 : num=6; break;
case 8 : num=100; break;
case 9 : num=1; break;
case 10: num=2; break;
case 11: num=3; break;
case 12: num=100; break;
case 13: num=10; break;
case 14: num=0; break;
case 15: num=100; break;
case 16: num=100; break;
}
}

void inte(){
if(num==10){flag=1;}
if(num>=0 && num<=9 && flag==0){
 if(start_operation==0 && !(!num)){start_operation=1;}
 if(start_operation >=1) {
 start_operation++;
 if (start_operation ==2){number=num;}
 else{number=(number*10)+num;}
 }//if
 }//if
 if(flag=1){
  start_point++;
  point= point+ ((num)/(10^start_point));
 }
 number=number+point;
}//void

void desplay(){
floattostr(number,number_txt);
lcd_out(1,1,number_txt);
}

void main(){
Lcd_Init();
Keypad_Init();
Lcd_Cmd(_LCD_CLEAR);
lcd_cmd(_lcd_cursor_off);
while(1){
key_check();
convert();
inte();
desplay();
}//while
}//void
سلام عليكم بالنسبه لمشكله Demo limit هو برنامج مايكروسي عندك يسمحلك أن تكتب لغايه 2 كيلوبايت لذا أنصحك بتحميل هذا البرنامج المتكامل
http://www.mediafire.com/download/zc...uild.6.0.0.rar

إضافة رد

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

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

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


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

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