NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3506 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: یک مشکل ساده در برنامه نویسی

  1. #1
    مدیر انجمن sobhan537 آواتار ها
    تاریخ عضویت
    Aug 2012
    نام
    عبدالملکی
    نوشته ها
    1,084
    تشکر
    3,098
    تشکر شده 804 بار در 495 پست

    پیش فرض یک مشکل ساده در برنامه نویسی

    من یک برنامه ساعت دیجیتال ساده روی LCD نوشتم، برای اینکار میام تو زیربرنامه وقفه تایمر سه تا متغیر H, M, S (ساعت، دقیقه، ثانیه) رو پشت سر هم نشون میدم. الان ارقام ساعت بصورت تک رقمی نوشته میشه، مثلا ساعت بصورت 1:5:9 نشون داده میشه. اما نیاز دارم که ارقام ساعت بصورت دو رقمی نشون داده بشن، یعنی بصورت 01:05:09. راه های مختلفی برای اینکار وجود داره، اما من دنبال کوتاه ترین دستور میگردم.

    زبان C یا Basic هم فرقی نمیکنه، هرکی با هر زبانی بلده لطفا بگه...
    ویرایش توسط sobhan537 : 17-09-2014 در ساعت 03:13

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر فعال jonbakhsh آواتار ها
    تاریخ عضویت
    Apr 2008
    نام
    H.J
    نوشته ها
    371
    تشکر
    192
    تشکر شده 225 بار در 101 پست

    پیش فرض

    شما اینجوری مینویسید
    sprintf(str,"%2d:%2d:%2d"
    خوب حالا به جای %2d بنویس %02d

  4. کاربران : 3 تشکر کرده اند از شما jonbakhsh برای ارسال این پست سودمند:


  5. #3
    کاربر علاقه مند ali_rostami_7 آواتار ها
    تاریخ عضویت
    Oct 2011
    نوشته ها
    91
    تشکر
    295
    تشکر شده 54 بار در 36 پست

    پیش فرض

    با سلام .اگه جای %2d بنویسیم %02d چه اتفاقی میفته ؟(ببخشید اگه سوالم ابتداییهاخه من از این دستور تو برنامه هام استفاده نمیکنم .)
    شما (sobhan537) توی سرویس وقفه تون می تونید پس از اینکه H, M, S رو بدست اوردید .خارج قسمت و باقی مانده شان را بر 10 بدست اورید .و هرکدام را به ترتیب نشان دهید.البته باید بگم راه حل دوستمون جالبتره .این راه حل صرفا وقتی بدرد میخوره که از sprintf نخوای استفاده کنی
    ویرایش توسط ali_rostami_7 : 17-09-2014 در ساعت 08:51

  6. تشکرها از این نوشته :


  7. #4
    مدیر انجمن sobhan537 آواتار ها
    تاریخ عضویت
    Aug 2012
    نام
    عبدالملکی
    نوشته ها
    1,084
    تشکر
    3,098
    تشکر شده 804 بار در 495 پست

    پیش فرض

    مهندس jonbakhsh فکر میکنم راه حل شما نادرسته، چون مثلا اگه ساعت 11:40:20 باشه؛ اونموقع اینطوری نشون داده میشه: 011:40:20. برنامه باید طوری باشه که فقط اعداد یک رقمی رو به دورقمی تبدیل کنه و نباید اعداد دورقمی رو به سه رقمی تبدیل کنه!

    مهندس ali_rostami_7 من دنبال کوتاهترین راه حل میگردم، چون اگه در زیربرنامه وقفه دستورات زیادی بنویسم، اونموقع خطای ساعت زیاد میشه و ساعت عقب میمونه. مگر اینکه همه تاخیرات زیر برنامه وقفه رو محاسبه کرد و در مقدار تایمر لحاظ کرد. که اینم کار جالبی نیست.

  8. #5
    کاربر علاقه مند dizgah آواتار ها
    تاریخ عضویت
    Oct 2007
    نام
    محمود حسینی پور
    نوشته ها
    76
    تشکر
    124
    تشکر شده 34 بار در 25 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sobhan537 نمایش پست ها
    مهندس jonbakhsh فکر میکنم راه حل شما نادرسته، چون مثلا اگه ساعت 11:40:20 باشه؛ اونموقع اینطوری نشون داده میشه: 011:40:20. برنامه باید طوری باشه که فقط اعداد یک رقمی رو به دورقمی تبدیل کنه و نباید اعداد دورقمی رو به سه رقمی تبدیل کنه!

    مهندس ali_rostami_7 من دنبال کوتاهترین راه حل میگردم، چون اگه در زیربرنامه وقفه دستورات زیادی بنویسم، اونموقع خطای ساعت زیاد میشه و ساعت عقب میمونه. مگر اینکه همه تاخیرات زیر برنامه وقفه رو محاسبه کرد و در مقدار تایمر لحاظ کرد. که اینم کار جالبی نیست.
    برنامه ایشون درسته
    طبق برنامه هر سه بخش بصورت دو رقمی نمایش داده میشه که d نوع و 2 تعداد ارقام رو بیان میکنه که میشه سه تا عدد دسیمال که هر کدوم بصورت دو رقمی باشن

  9. تشکرها از این نوشته :


  10. #6
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    Icon17

    سلام اقا برنامه بالا به درستی کار می کنه

    کد:
    unsigned char Sec=9;
        unsigned char Min=5;
        unsigned char Hou=10;
        char Sec_str[5];
        char Min_str[5];
        char Hou_str[5];
        
        sprintf(Sec_str,"%02d",Sec);
        printf("%s\n",Sec_str);
    
        sprintf(Min_str,"%02d",Min);
        printf("%s\n",Min_str);
    
        sprintf(Hou_str,"%02d",Hou);
        printf("%s\n",Hou_str);

  11. تشکرها از این نوشته :


موضوعات مشابه

  1. برنامه نویسی میکروکنترلر با ++c
    توسط nader27 در انجمن PLD , SPLD , CPLD
    پاسخ: 3
    آخرين نوشته: 14-01-2014, 14:54
  2. زبان برنامه نویسی آرم
    توسط alamdar در انجمن مباحث کلی ARM
    پاسخ: 13
    آخرين نوشته: 30-08-2013, 13:40
  3. برنامه نویسی بسکام
    توسط ehsan88 در انجمن میکروکنترلرهای 8و16 بیتی
    پاسخ: 2
    آخرين نوشته: 04-07-2013, 16:31
  4. مثال برنامه نویسی از کار کرد تایمر
    توسط zavar در انجمن AT91 series (ATMEL)
    پاسخ: 2
    آخرين نوشته: 05-07-2010, 09:26
  5. کمک در مورد برنامه نویسی pic
    توسط ehsanarn در انجمن PIC
    پاسخ: 2
    آخرين نوشته: 20-05-2010, 23:08

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •