اطلاعیه

Collapse
No announcement yet.

تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

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

    تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

    سلام من برای تبدیل تاریخ میلادی به شمسی از یه کد آماده که از همین سایت برداشتم استفاده کردم اما نمیتونه روز هفته رو نشون بده
    میخوام ببینم اصلا اینکار شدنیه؟ اگه آره کسی نمونه برنامه داره . من با بیسیک میخوام ممنونم

    #2
    پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

    من با یکی از دوستان تاریخ شمسی را با همون بسکام نوشتیم.اما تبدیل از میلادی به شمسی را انجام ندادیم.یعنی تقویم مستقل عمل می کنه.روز هفته هم نداشت.اگه خواستید بگید تا به اون دوستمون بگم اگه هنوز برنامشو داره بهتون بده.
    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

    دیدگاه


      #3
      پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

      سلام pooyan-shafiei
      اگه ممکنه برنامه رو بذارید
      ممنون

      دیدگاه


        #4
        پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

        متاسفانه فایلش را نتونستم از اون دوستمون بگیرم.من خودم بیسکام بلد نیستم.اما خیلی ساده توضیح می دم.شما سه تا متغیر تعریف می کنید واسه سال و ماه و روز.
        بعد میگین که اگه ساعت برابر 24 شد ساعت صفر بشه به روز یکی اضافه بشه.بعد اگه ماه بین 1 تا 6 بود و روز شد 32،ماه یکی بره جلو بعد روز 1 بشه.(روز صفر نداریم) و اگه ماه بزرگ تر از 6 بود و روز به 31 رسید،ماه یکی بره جلو و روز 1 بشه.در آخر اگه ماه 13 شد،سال یکی بره جلو و ماه 1 بشه(ماه صفر نداریم).
        اگه خواستید میتونید واسه اسفند هم که 29 روزی میشه شرط جدا بذارید.
        واسه روز هفته هم خیلی ساده میشه یک متغیر تعریف کرد.اسن فایل سی هست که خودم تست کردم کار کرد.البته قسمت ساعتش با ds1307 کار میکنه.
        از همه ی دوستان بابت تاخیر عذر می خوام.
        سوالی هم داشتین در خدمتم.
        کد:
        /*****************************************************
        This program was produced by the
        CodeWizardAVR V2.05.3 Standard
        Automatic Program Generator
        © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com
        
        Project :
        Version :
        Date  : 21/09/2014
        Author : Puyan
        Company :
        Comments:
        
        
        Chip type        : ATmega16A
        Program type      : Application
        AVR Core Clock frequency: 2.000000 MHz
        Memory model      : Small
        External RAM size    : 0
        Data Stack size     : 256
        *****************************************************/
        #include <stdio.h>
        #include <mega16a.h>
        #include <delay.h>
        // I2C Bus functions
        #include <i2c.h>
        
        // DS1307 Real Time Clock functions
        #include <ds1307.h>
        
        // Alphanumeric LCD functions
        #include <alcd.h>
        
        // Declare your global variables here
        
        void main(void)
        {
        char lcd[16];
        char tarikh[16];
        unsigned char hour=0, minute=0, second=0, month=6, day=30;
        unsigned int year=1393;
        // Declare your local variables here
        
        // Input/Output Ports initialization
        // Port A initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTA=0x00;
        DDRA=0x00;
        
        // Port B initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTB=0x00;
        DDRB=0x00;
        
        // Port C initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTC=0x00;
        DDRC=0x00;
        
        // Port D initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTD=0x00;
        DDRD=0x00;
        
        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: Timer 0 Stopped
        // Mode: Normal top=0xFF
        // OC0 output: Disconnected
        TCCR0=0x00;
        TCNT0=0x00;
        OCR0=0x00;
        
        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer1 Stopped
        // Mode: Normal top=0xFFFF
        // OC1A output: Discon.
        // OC1B output: Discon.
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        // Timer1 Overflow Interrupt: Off
        // Input Capture Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        TCCR1A=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;
        
        // Timer/Counter 2 initialization
        // Clock source: System Clock
        // Clock value: Timer2 Stopped
        // Mode: Normal top=0xFF
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;
        
        // External Interrupt(s) initialization
        // INT0: Off
        // INT1: Off
        // INT2: Off
        MCUCR=0x00;
        MCUCSR=0x00;
        
        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;
        
        // USART initialization
        // USART disabled
        UCSRB=0x00;
        
        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        ACSR=0x80;
        SFIOR=0x00;
        
        // ADC initialization
        // ADC disabled
        ADCSRA=0x00;
        
        // SPI initialization
        // SPI disabled
        SPCR=0x00;
        
        // TWI initialization
        // TWI disabled
        TWCR=0x00;
        
        // I2C Bus initialization
        // I2C Port: PORTA
        // I2C SDA bit: 1
        // I2C SCL bit: 0
        // Bit Rate: 100 kHz
        // Note: I2C settings are specified in the
        // Project|Configure|C Compiler|Libraries|I2C menu.
        i2c_init();
        
        // DS1307 Real Time Clock initialization
        // Square wave output on pin SQW/OUT: Off
        // SQW/OUT pin state: 0
        rtc_init(0,0,0);
        
        // Alphanumeric LCD initialization
        // Connections are specified in the
        // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
        // RS - PORTD Bit 0
        // RD - PORTD Bit 1
        // EN - PORTD Bit 2
        // D4 - PORTD Bit 4
        // D5 - PORTD Bit 5
        // D6 - PORTD Bit 6
        // D7 - PORTD Bit 7
        // Characters/line: 16
        lcd_init(16);
        lcd_clear();
        rtc_set_time(12, 0, 0);
        while (1)
           {
           lcd_clear();
           // Place your code here
           rtc_get_time(&hour,&minute,&second);
           sprintf(lcd,"%02u:%02u:%02u",hour,minute,second);
           sprintf(tarikh, "%04u/%02u/%02u", year,month,day);
           lcd_gotoxy(4 ,0);
           lcd_puts(lcd);
        
           lcd_gotoxy(3 , 1);
           lcd_puts(tarikh);
        
           if(hour == 24)
           {
            day++;
            hour = 0;
           }
           if(day == 31 && month >= 7)
           {
            month++;
            day = 1;
           }
           else if(day == 32 && month < 7)
           {
            month++;
            day = 1;
           }
           if(month == 13)
           {
            year++;
            month = 1;
           }
           delay_ms(300);
        }
        }
        آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

        دیدگاه


          #5
          پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روز


          این کد رو 3 سال پیش استفاده کردم جواب داد.فکر کنم از کتاب ره افروز باشه تا اونجایی که یادمه یکم ایراد داشت برطرف کردم. روز هفته رو هم در پست بعدی میگذارم.
          کد:
          //-----------------------------------تعریف متغییر---------------------------------------- 
          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;
          //---------------------------------------------------------------------------------------
          void miltoshmcv(unsigned char ym,unsigned char mm,unsigned char dm);
          // ------------------------------------ تعریف تابع --------------------------------
          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;
          }
           
          }
          //--------------------------------------- While نحوه فراخوانی در حلقه -----------------------------------
          miltoshmcv(day,month,year);
          sprintf(buffer," %02u/%01u/%02u",shmdate.year,shmdate.month,shmdate.day);
          lcd_gotoxy(0,0);
           lcd_puts(buffer);
          //---------------------------------------------------------------------------------------------------------------

          دیدگاه


            #6
            پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روز

            کد:
            روز هفته .اون ایرادی که گفتم ایراد چاپی بود!! امیدوارم جواب بده.
            //---------------------------------تعریف متغییر------------------------------
            struct days{char d[4];} daysofweek[7]={{"We"},{"Th"},{"Fr"},{"Sa"},{"Su"},{"Mo"},{"Tu"}};
            //-------------------------------------------------------------------------------
            char IsLeapYear(int Year);
            char GetDayofWeek(unsigned char CurrentYear,unsigned char Month,unsigned char Day);
            //-----------تابع اول-----------------تعریف توابع-------------------------------
             char IsLeapYear(int Year)
            {
            Year=Year&0x0003;
            if(Year==0)
            return 1;
            else
            return 0;
            }
            char CheckValidInput(unsigned int Input)
            {
            if(Input>=1990 && Input<=2099)
            return OK;
            else
            return !OK;
            }
            //---------------------------------------------------تابع دوم---------------------------------
            char GetDayofWeek(unsigned char CurrentYear,unsigned char Month,unsigned char Day)
            {
            unsigned int TempYear;
            unsigned char AccValue;
            if(CheckValidInput(CurrentYear+2000)!=OK)
            return Error;
            TempYear=1990;
            AccValue=0;
            while(TempYear!=(CurrentYear+2000))
            {
            AccValue++;
            if(IsLeapYear(TempYear))
            AccValue++;
            TempYear++;
            }
            if(Month>2)
            {
            if(IsLeapYear(TempYear)==1)
            AccValue++;
            }
            AccValue+=Table[Month];
            AccValue+=Day;
            AccValue=AccValue%7;
            return(AccValue);
            }
            //----------------------------------------------نحوه فراخوانی-----------------------------------
            sprintf(buffer,"%s",daysofweek[GetDayofWeek(year,month,day)].d,);
               lcd_gotoxy(0,0);
               lcd_puts(buffer);

            دیدگاه


              #7
              پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

              ممنون از لطف همتون. اما من با بیسیک میخواستم اما همین که کمکی برای دیگران شد باز خوبه

              دیدگاه


                #8
                پاسخ : تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته

                اون برنامه ای که من گفتم خیلی سادس.فقط کافیه شرط ها را به بیسکام بنویسید.
                آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                دیدگاه

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