اطلاعیه

Collapse
No announcement yet.

اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

    کد:
    flash unsigned char shmtable[6][12]={
    	{11,10,10,9,9,9,8,9,9,10,11,9},
    	{20,20,21,21,22,22,22,22,21,21,20,19},
    	{11,10,10,9,9,9,8,9,9,10,11,10},
    	{20,20,21,21,22,22,22,22,21,21,20,19},
    	{12,11,11,10,10,10,9,10,10,11,12,10},
    	{19,19,20,20,21,21,21,21,20,20,19,18}};
       
    flash unsigned char miltable[6][12]={
        {20,19,19,19,20,20,21,21,21,21,20,20},
        {10,11,10,12,11,11,10,10,10,9,10,10},
        {19,18,20,20,21,21,22,22,22,22,21,21},
        {11,12,10,11,10,10,9,9,9,8,9,9},
        {20,19,20,20,21,21,22,22,22,22,21,21},
        {10,11,9,11,10,10,9,9,9,8,9,9}};
    
     struct date{
     unsigned char day;
     unsigned char month;
     unsigned char year;
    }; 
     struct date shmdate,mildate ;  
    /*************************************************************************/
    void miltoshmcv(unsigned char ym,unsigned char mm,unsigned char dm)
    {
      unsigned char k,t1,t2; 
      k=ym%4;
      if(k==3)
        k=2;
      k*=2;
      t1=miltable[k][mm-1];
      t2=miltable[k+1][mm-1];
      if(mm<3 || (mm==3 && dm<=miltable[k][mm-1]))
        shmdate.year = ym + 78;
      else
        shmdate.year = ym + 79;
        
      if(dm<=t1)
      { 
        shmdate.day=dm+t2;
        shmdate.month=(mm+8)%12+1;
      }
      else 
      { 
        shmdate.day=dm-t1;
        shmdate.month=(mm+9)%12+1;
      }
    } 
    /**********************************************************************/
    void shmtomilcv(unsigned char ys ,unsigned char ms,unsigned char ds)
    {
      unsigned char k,t1,t2;
      k = yss%4;
      if( k == 0)
        k = 2;
      else 
        k = k + k;
      t1 =shmtable[k - 2][ms-1];
      t2 = shmtable[k-1][ms-1];
      if(ms<10 || (ms==10 && ds <= shmtable[k-2][ms-1]))
        mildate.year = ys - 79;
      else 
        mildate.year = ys - 78;
    
      if(ds <= t1)
      {
        mildate.day = ds + t2;
        mildate.month = (ms + 1)%12 + 1;
      }
      else
      {
        mildate.day= ds - t1;
        mildate.month= (ms + 2)%12 + 1;
      }
    }
    copyright:امیر رهآ‌افروز

    #2
    پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

    سلام

    به رسم تشکر در انجمن یک امتیاز (+) هدیه شد .

    موفق باشید :smile:
    [left][move][b][color=green][size=11pt]ما می توانیم .
    ، همین ... *. * * *. * * * [color=re

    دیدگاه


      #3
      پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

      این تاپیک رو از اون ته مه ها پیدا کردم :mrgreen:
      یکی درباره این برنامه توضیح می ده؟که دیتا رو ما تو اینجا مثلا میزاریم (11,10.05) miltoshmcv
      یعنی روز 5 ماه 10 سال 2011 حالا تبدیل شده شمسی اینو باید از کجا بخونیم؟
      تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

      دیدگاه


        #4
        پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

        یکی راهنمایی کنه این تبدیل تاریخ از میلادی به شمسی وقتی تبدیل شد چه جوری بخونمش :angry:
        تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

        دیدگاه


          #5
          پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler


          کد:
          miltoshmcv(11,10,7);a
          printf("%d/%d/%d" , shmdate.year , shmdate.month , shmdate.day);a
          you will see see : 90/7/15
          
          
          
          example 2 :
          shmtomilcv(90,7,15);a
          printf("%d/%d/%d" , mildate.year , mildate.month , mildate.day);a
          you will see 11/10/7
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #6
            پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

            دوست عزیز بابت برنامتون واقعا ممنونم
            فقط یک چیزی که هست این کد تا تاریخ 1420 رو درست حساب میکنه و از اون تاریخ به یعد یک روز خطا میکنه
            امکانش هست این رو بر طرف کنید ؟!!!

            دیدگاه


              #7
              پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

              تشکر بابت کدها

              دیدگاه


                #8
                پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

                با اجازتون من یه کمی کدتوم رو مریتب کردم برای استفاده تو برنامه خودم اینجا میزارم بقیه هم استفاده کنن.


                int tt = 0 ;
                int sYear = 0 ;
                int sD = 0 ;
                int sMonth = 0 ;
                int sDay = 0 ;


                int dWM[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334} ;
                int dWKM[12] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} ;
                int IM[12] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29} ;
                int IKM[12] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 30} ;
                String mah ;


                void setup() {


                Serial.begin(9600) ;
                }


                void loop()
                {


                miladiToShamsi(2016, 3, 20) ;
                delay(5000) ;
                miladiToShamsi(2017, 3, 21) ;
                delay(5000) ;
                miladiToShamsi(2015, 9, 22) ;
                delay(5000) ;
                miladiToShamsi(2016, 9, 21) ;
                delay(5000) ;
                miladiToShamsi(2020, 12, 22) ;
                delay(5000) ;
                miladiToShamsi(2019, 8, 4) ;
                Serial.println(miladiToShamsi(2020, 12, 30)) ;
                delay (50000) ;
                }


                String miladiToShamsi(int iYear, int iMonth, int iDay)
                {


                Serial.print("year= ") ;
                Serial.print(iYear) ;


                Serial.print(" Month= ") ;
                Serial.print( iMonth) ;


                Serial.print(" Day= ") ;
                Serial.println(iDay) ;


                if (iYear == ((iYear / 4) * 4) )
                {
                if ((iMonth > 2 & iDay > 19) || iMonth > 3)
                {
                sYear = iYear - 621 ;
                tt = dWKM[iMonth - 1] + iDay - 80 ;
                }
                else
                {
                sYear = iYear - 622 ;
                tt = dWKM[iMonth - 1] + iDay + 285 ;
                }
                }
                else
                {
                if ((iMonth > 2 & iDay > 20) || iMonth > 3)
                {
                sYear = iYear - 621 ;
                tt = dWM[iMonth - 1] + iDay - 80 ;
                }
                else
                {
                sYear = iYear - 622 ;
                tt = dWM[iMonth - 1] + iDay + 285 ;
                }
                }


                // Serial.print("tt=") ;
                // Serial.println(tt) ;


                sD = tt ;
                if ( sD > 185)
                {
                sMonth = 7 + ((sD - 186) / 30) ;
                sDay = sD - (185 + (((sD - 186) / 30) * 30)) ;


                if ((iYear - 1) == (((iYear - 1) / 4) * 4) & iMonth < 4)
                {
                sD = sD ;
                sMonth = 7 + ((sD - 186) / 30) ;
                sDay = 1 + sD - (185 + (((sD - 186) / 30) * 30)) ;
                }
                }


                if ( sD < 186)
                {
                sMonth = ((sD) / 31) + 1 ;
                sDay = (1 + sD - ((sMonth - 1) * 31)) ;
                }


                switch (sMonth)
                {
                case 1:
                mah = "Farvardin" ;
                break;
                case 2:
                mah = "Ordibehesht" ;
                break;
                case 3:
                mah = "Khordad" ;
                break;
                case 4:
                mah = "Tir" ;
                break;
                case 5:
                mah = "Mordad" ;
                break;
                case 6:
                mah = "Shahrivar" ;
                break;
                case 7:
                mah = "Mehr" ;
                break;
                case 8:
                mah = "Aban" ;
                break;
                case 9:
                mah = "Azar" ;
                break;
                case 10:
                mah = "Day" ;
                break;
                case 11:
                mah = "Bahman" ;
                break;
                case 12:
                mah = "Esfand" ;
                break;
                default:
                mah = "" ;
                }


                String shamsiDate = String(sYear) + "/" + String(sMonth) + "(" + String(mah) + ")" + "/" + String(sDay) ;


                Serial.print("Shamsi Date = ") ;
                Serial.println(shamsiDate) ;
                return shamsiDate ;
                delay (200) ;
                }

                دیدگاه


                  #9
                  پاسخ : اینم تبدیل تاریخ میلادی به شمسی در ds1307 با CodeVisionAVR C Compiler

                  ممنون بابت کدهایی که قرار دادید.
                  وزن ورق گالوانیزه
                  وزن مخصوص استیل
                  وزن مخصوص آلومینیوم
                  اخبار لحظه ای اهن

                  دیدگاه

                  لطفا صبر کنید...
                  X