اطلاعیه

Collapse
No announcement yet.

مدار ساعت با سون سگمنت

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

    #16
    پاسخ : مدار ساعت با سون سگمنت

    من یه مدار دارم ولی منظور شما رو ندونستم بیشتر توضیح بدید اگه مناسب بود بذارم.
    Telegram:
    @reza_br_2489


    Instagram:
    _amp_c

    دیدگاه


      #17
      پاسخ : مدار ساعت با سون سگمنت

      نوشته اصلی توسط noorworkshop
      من یه مدار دارم ولی منظور شما رو ندونستم بیشتر توضیح بدید اگه مناسب بود بذارم.
      ممنون دوست عزیز: توضیح دادم در مورد عملکرد مدار ! حتی نمونه سورس گذاشتم !! ساعت میخوام که با سون سگمنت و ds1307 و زبان سی باشه !!
      مدارتان را لطفا قرار بدهید !! اگر با زبان سی و 7 سگمنت هست!!
      سپاس

      دیدگاه


        #18
        پاسخ : مدار ساعت با سون سگمنت

        نوشته اصلی توسط ircaspianhero
        ممنون دوست عزیز: حداقل یک قسمت اش را توضیح بدهید مثلا انداختن ساعت بر روی سون سگمنت تا من بدونم چی به چی هست!! چون هیچ منبعی وجود نداره!! به زبان سی !!
        مثلا داریم از 3تا سون سگمنت کاتد مشترک استفاده می کنیم که میشه 3 تا سون سگمنت 2 تایی !! روی 2 تا سون سگمنت اولی چطور میشه ساعت را انداخت !!

        مثلا اینجا از دستور sprintf استفاده شده است !! که باعث نمایش اطلاعات روی lcd می شود که باید روی سون سگمنت این قسمت نمایش داده بشه ! که اینها را متوجه نمی شوم!!
        کد:
        /* include the DS1307 functions for bit-banged I2C
          The I2C bus connections and bit rate must be specified in the
          Project|Configure|C Compiler|Libraries|I2C menu */
        #include <ds1307.h>
        
        
        /* include the LCD Functions
          The connections must be specified in the
          Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu */
        #include <alcd.h>
        
        
        /* include the prototype for sprintf */
        #include <stdio.h>
        
        
        /* include the prototypes for the delay functions */
        #include <delay.h>
        
        
        char display_buffer[17]; /* LCD display buffer for 1 line */
        
        
        void main(void)
        {
        unsigned char hour,min,sec,week_day,day,month,year;
        
        
        /* initialize the LCD, 2 rows by 16 columns */
        lcd_init(16);
        
        
        /* initialize the bit-banged I2C functions */
        i2c_init();
        
        
        /* initialize the RTC
          square wave output is disabled
          SQW/OUT has logic state 0 */
        rtc_init(0,0,0);
        
        
        rtc_set_time(12,0,0); /* set time 12:00:00 */
        
        
        rtc_set_date(2,1,2,11); /* set date Tuesday 1/02/2013 */
        
        
        /* display the time and date continuously */
        while (1)
           {
           /* read the time from the RTC */
           rtc_get_time(&hour,&min,&sec);
           
           /* read the date from the RTC */
           rtc_get_date(&week_day,&day,&month,&year);
           
           /* display the time on the LCD */
           sprintf(display_buffer,"Time: %2d:%02d:%02d\n",hour,min,sec);
           lcd_clear();
           lcd_puts(display_buffer);
           
           /* display the date on the LCD */
           sprintf(display_buffer,"Date: %2d/%02d/%d",day,month,
               2000+year);
           lcd_puts(display_buffer);
        
        
           delay_ms(500); /* 0.5 second delay */
           }
        }
        سپاس
        سلام
        ---
        sprint int مربوط به lcd میشه در سون سگمنت نیازی نیست .
        --
        شما برای روشن کردن دو سون سگمنت اول از سمت چپ باید. کاتد مشترکشون رو روشن کنید .
        و بر روی اولی از سمت چپ دهگان عددتون رو قرار بدید و بر روی بعدیش باید یکان عددتون رو نشون بدید .
        برای این کار، متغیر ساعتتون رو به دو قسمت تقسیم می کنید
        مثلا SAT-y (یکان ساعت) SAT-D (ساعت دهگان)
        خوب می نویسید متغیر ساعت sat-y مساوی است با ساعت (ds1307) بعدی وقتی بیش از 9 شد، عدد sat-y رو صفر کن. و یک عدد به sat-d اضافه کن . و ... و بعد وقتی خود sat-d بیشتر از 2 رسید . sat-d را صفر کن. (البته این در صورتی که شما می خواید زمان شما 24 ساعت باشد نه بر اساس 12 ساعت باشد)
        شما برای ثانیه و دقیقه همین کار را می توانید انجام دهید..

        و بعد خروجی رو به همان روشی که در پست های قبلی گفتم نشون میدید..
        [code=c] while(1) //نشان دادن عدد 0 1 2 3 به روی سون سگمنت دات ماتریکس
        {
        PORTB=1; //پایه مشترک اول روشن
        PORTD=~s[0]; //عدد 0 را نشان بده
        delay_ms(2); //دو میلی ثانیه صبر کن
        PORTB=2; //پایه مشترک دوم روشن
        PORTD=~s[1]; //عدد 1 را نشان بده
        delay_ms(2); //دو میلی ثانیه صبر کن
        PORTB=4; //پایه 3 را روشن کن
        PORTD=~s[2]; //عدد 2 را نشان بده
        delay_ms(2); //به مدت 2 میلی ثانیه صبر کن
        PORTB=8; //پایه شماره 4 را روشن کن
        PORTD=~s[3]; //عدد 3 را نشان بده
        delay_ms(2); //به مد 2 میلی ثانیه صبر کن
        } [/code]

        البته می توانید بجایی حلقه while از حلقه محدود دار for استفاده کنید.
        و بجایی اعداد نوشت شده در مقابل PORTD (یعنی جایی که پایه های abcdef dot سون سگمنت وصله) بنویسید دهگان ساعت یا یکان ساعت مثل مثال زیر

        [code=c]PORTB=1; //فقط پایه کاتد مشترک 1 روشن
        PORTD=~s[sat-d]; //نمایش دهگان ساعت
        delay_ms(2); //دو میلی ثانیه صبر کن
        PORTB=2; //فقط پایه کاتد مشترک 2 روشن
        PORTD=~s[sat-y]; //نمایش یکان ساعت
        delay_ms(2); //دو میلی ثانیه صبر کن[/code]
        باتشکر.

        دیدگاه


          #19
          پاسخ : مدار ساعت با سون سگمنت

          به زبان سی است ولی از ایسی ساعت دیگری استفاده شده
          نام ایسی:ds3231
          Telegram:
          @reza_br_2489


          Instagram:
          _amp_c

          دیدگاه


            #20
            پاسخ : مدار ساعت با سون سگمنت

            نوشته اصلی توسط SINASET
            سلام
            ---
            sprint int مربوط به lcd میشه در سون سگمنت نیازی نیست .
            --
            شما برای روشن کردن دو سون سگمنت اول از سمت چپ باید. کاتد مشترکشون رو روشن کنید .
            و بر روی اولی از سمت چپ دهگان عددتون رو قرار بدید و بر روی بعدیش باید یکان عددتون رو نشون بدید .
            برای این کار، متغیر ساعتتون رو به دو قسمت تقسیم می کنید
            مثلا SAT-y (یکان ساعت) SAT-D (ساعت دهگان)
            خوب می نویسید متغیر ساعت sat-y مساوی است با ساعت (ds1307) بعدی وقتی بیش از 9 شد، عدد sat-y رو صفر کن. و یک عدد به sat-d اضافه کن . و ... و بعد وقتی خود sat-d بیشتر از 2 رسید . sat-d را صفر کن. (البته این در صورتی که شما می خواید زمان شما 24 ساعت باشد نه بر اساس 12 ساعت باشد)
            شما برای ثانیه و دقیقه همین کار را می توانید انجام دهید..

            و بعد خروجی رو به همان روشی که در پست های قبلی گفتم نشون میدید..
            [code=c] while(1) //نشان دادن عدد 0 1 2 3 به روی سون سگمنت دات ماتریکس
            {
            PORTB=1; //پایه مشترک اول روشن
            PORTD=~s[0]; //عدد 0 را نشان بده
            delay_ms(2); //دو میلی ثانیه صبر کن
            PORTB=2; //پایه مشترک دوم روشن
            PORTD=~s[1]; //عدد 1 را نشان بده
            delay_ms(2); //دو میلی ثانیه صبر کن
            PORTB=4; //پایه 3 را روشن کن
            PORTD=~s[2]; //عدد 2 را نشان بده
            delay_ms(2); //به مدت 2 میلی ثانیه صبر کن
            PORTB=8; //پایه شماره 4 را روشن کن
            PORTD=~s[3]; //عدد 3 را نشان بده
            delay_ms(2); //به مد 2 میلی ثانیه صبر کن
            } [/code]

            البته می توانید بجایی حلقه while از حلقه محدود دار for استفاده کنید.
            و بجایی اعداد نوشت شده در مقابل PORTD (یعنی جایی که پایه های abcdef dot سون سگمنت وصله) بنویسید دهگان ساعت یا یکان ساعت مثل مثال زیر

            [code=c]PORTB=1; //فقط پایه کاتد مشترک 1 روشن
            PORTD=~s[sat-d]; //نمایش دهگان ساعت
            delay_ms(2); //دو میلی ثانیه صبر کن
            PORTB=2; //فقط پایه کاتد مشترک 2 روشن
            PORTD=~s[sat-y]; //نمایش یکان ساعت
            delay_ms(2); //دو میلی ثانیه صبر کن[/code]
            باتشکر.
            ممنون دوست عزیز: ماجرا پیچیده شده است ! زیاد متوجه نمیشم چی می گویید!! باید برم دنبال اش یکم اطلاعات به دست بیارم! هر وقت مشکل داشتم مطرح می کنم!
            سپاس

            دیدگاه

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