اطلاعیه

Collapse
No announcement yet.

کتابخانه راه اندازی سون سگمنت مثل آب خوردن

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

    کتابخانه راه اندازی سون سگمنت مثل آب خوردن

    سلام
    همونطور که از عنوان تاپیک معلومه با این کتابخونه میشه سون سگمنت رو خیلی خیلی خیلی راحت راه اندازی کرد . :nerd:
    با این کتابخونه از سون سگمنت تکی گرفته تا سون سگمنت 12 تایی رو میشه راه اندازی کرد.
    کلا 13 تا تابع داره کافیه شما پایه فعال ساز سون سگمنت و پورتی که پایه های a تا g بهش وصل هست رو مشخص کنید(از طریق دیفاین های داخل کتابخونه) و عددی که می خواید نمایش بدید رو تو تابع بنویسید و تمومه
    امیدوارم خوشتون بیاد!!
    لینک دانلود کتابخونه : http://s7.picofile.com/file/8234892500/seg.rar.html
    اینم یه نمونه کد که توش از سون سگمنت 12 تایی استفاده شده
    [code=c]
    /************************************************** ***
    Chip type : ATmega16A
    Program type : Application
    AVR Core Clock frequency: 1.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** ***/
    #include <mega16.h>
    #include <seg.h>
    #include <delay.h>
    #include <seg/seg.h>

    void main(void)
    {
    PORTA=0x00;
    DDRA=0xFF;

    PORTB=0xC0;
    DDRB=0x3F;

    DDRC=0xFF;

    PORTD=0xFF;
    DDRD=0x00;

    ACSR=0x80;
    while (1)
    {
    seg_12(1,1,1,1,1,1,1,1,1,1,1,1);

    }
    }


    [/code]
    به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
    @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

    #2
    پاسخ : کتابخانه راه اندازی سون سگمنت مثل آب خ

    یه سوال که برای خودم پیش اومده اینه که چجور میشه کاری کرد که تابع ها غیر فعال بشن ؟؟؟ چون حجم کتابخونه زیاده می خوام با این کار بشه حجمشو کنترل کرد
    به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
    @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

    دیدگاه


      #3
      پاسخ : پاسخ : کتابخانه راه اندازی سون سگمنت م&#1579

      نوشته اصلی توسط liamplm1382
      یه سوال که برای خودم پیش اومده اینه که چجور میشه کاری کرد که تابع ها غیر فعال بشن ؟؟؟ چون حجم کتابخونه زیاده می خوام با این کار بشه حجمشو کنترل کرد
      کسی جواب نمیده
      به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
      @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

      دیدگاه


        #4
        پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی سون سگ

        نوشته اصلی توسط liamplm1382
        کسی جواب نمیده
        این تاخیر یکم خیلی زیاد نیست؟ ده میکرو ثانیه بسه
        برای کاهش حجم و پردازش نباید int بکار ببریم (۳۲ بیتی) و باید unsigned char بکار ببریم (۸ بیتی)

        و همینطور برای اینکار باید کامپایل شرطی بکنید:

        کد:
        #ifndef _SEG_INCLUDED_
        #define _SEG_INCLUDED_
        #include <delay.h>
        
        typedef unsigned char ubyte;
        
        #define D PORTA //SELECT DATA PORT
        #define EN0 PORTC.0 //SELECT ENABLE PIN
        #define EN1 PORTC.1 //SELECT ENABLE PIN
        #define EN2 PORTC.2 //SELECT ENABLE PIN
        #define EN3 PORTC.3 //SELECT ENABLE PIN
        #define EN4 PORTC.4 //SELECT ENABLE PIN
        #define EN5 PORTC.5 //SELECT ENABLE PIN
        #define EN6 PORTC.6 //SELECT ENABLE PIN
        #define EN7 PORTC.7 //SELECT ENABLE PIN
        #define EN8 PORTB.0 //SELECT ENABLE PIN
        #define EN9 PORTB.1 //SELECT ENABLE PIN
        #define EN10 PORTB.2 //SELECT ENABLE PIN
        #define EN11 PORTB.3 //SELECT ENABLE PIN
        
        ubyte seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        
        #if defined EN0 && defined EN1 && defined EN2
        ubyte seg_3(ubyte part1,ubyte part2,ubyte part3)
        {
        D=seg[part1];
        EN0=0;
        delay_ms(d);
        EN0=1;
        
        D=seg[part2];
        EN1=0;
        delay_ms(d);
        EN1=1;
        
        D=seg[part3];
        EN2=0;
        delay_ms(d);
        EN2=1;
        }
        #endif
        
        #if defined EN0 && defined EN1
        ubyte seg_2(ubyte part1,ubyte part2)
        {
        D=seg[part1];
        EN0=0;
        delay_ms(d);
        EN0=1;
        
        D=seg[part2];
        EN1=0;
        delay_ms(d);
        EN1=1;
        }
        #endif
        
        #endif
        و همینطور تا آخر برای همه ی تابع ها ....
        و نکته ای که اینجا هستش اینه که ENABLE PIN هایی که لازم نیست رو باید غیر فعال کرد (کامنت)
        // EN12
        // EN11
        ...
        If the wind will not serve, take to the oars

        دیدگاه


          #5
          پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی سون سگ

          نوشته اصلی توسط ASHIT AXAR
          این تاخیر یکم خیلی زیاد نیست؟ ده میکرو ثانیه بسه
          برای کاهش حجم و پردازش نباید int بکار ببریم (۳۲ بیتی) و باید unsigned char بکار ببریم (۸ بیتی)

          و همینطور برای اینکار باید کامپایل شرطی بکنید:

          کد:
          #ifndef _SEG_INCLUDED_
          #define _SEG_INCLUDED_
          #include <delay.h>
          
          typedef unsigned char ubyte;
          
          #define D PORTA //SELECT DATA PORT
          #define EN0 PORTC.0 //SELECT ENABLE PIN
          #define EN1 PORTC.1 //SELECT ENABLE PIN
          #define EN2 PORTC.2 //SELECT ENABLE PIN
          #define EN3 PORTC.3 //SELECT ENABLE PIN
          #define EN4 PORTC.4 //SELECT ENABLE PIN
          #define EN5 PORTC.5 //SELECT ENABLE PIN
          #define EN6 PORTC.6 //SELECT ENABLE PIN
          #define EN7 PORTC.7 //SELECT ENABLE PIN
          #define EN8 PORTB.0 //SELECT ENABLE PIN
          #define EN9 PORTB.1 //SELECT ENABLE PIN
          #define EN10 PORTB.2 //SELECT ENABLE PIN
          #define EN11 PORTB.3 //SELECT ENABLE PIN
          
          ubyte seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
          
          #if defined EN0 && defined EN1 && defined EN2
          ubyte seg_3(ubyte part1,ubyte part2,ubyte part3)
          {
          D=seg[part1];
          EN0=0;
          delay_ms(d);
          EN0=1;
          
          D=seg[part2];
          EN1=0;
          delay_ms(d);
          EN1=1;
          
          D=seg[part3];
          EN2=0;
          delay_ms(d);
          EN2=1;
          }
          #endif
          
          #if defined EN0 && defined EN1
          ubyte seg_2(ubyte part1,ubyte part2)
          {
          D=seg[part1];
          EN0=0;
          delay_ms(d);
          EN0=1;
          
          D=seg[part2];
          EN1=0;
          delay_ms(d);
          EN1=1;
          }
          #endif
          
          #endif
          و همینطور تا آخر برای همه ی تابع ها ....
          و نکته ای که اینجا هستش اینه که ENABLE PIN هایی که لازم نیست رو باید غیر فعال کرد (کامنت)
          // EN12
          // EN11
          ...
          یه سوال این متغیر های ubyte چیه ؟
          اون delay هم برا ازمایش بود
          به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
          @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

          دیدگاه


            #6
            پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی سون سگ

            نوشته اصلی توسط liamplm1382
            یه سوال این متغیر های ubyte چیه ؟
            اون delay هم برا ازمایش بود
            چرا ناراحت شدی من فقط خواستم کمک کنم.
            این کاری که کردی واقعا قابل تقدیره. من خیلی از اینکار خوشحال شدم و کد هایی که نوشتی رو با دقت بررسی کردم.

            ubyte یک اسم هستش که برای راحتی استفاده از نوع unsigned char تعریف کردم.
            چون دیدم به int نیازی نیستآ‌ (که دو برابر فضا اشغال میکنه).
            موفق باشی. ادامه بده
            If the wind will not serve, take to the oars

            دیدگاه


              #7
              پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی سون سگ

              نوشته اصلی توسط ASHIT AXAR
              چرا ناراحت شدی من فقط خواستم کمک کنم.
              این کاری که کردی واقعا قابل تقدیره. من خیلی از اینکار خوشحال شدم و کد هایی که نوشتی رو با دقت بررسی کردم.

              ubyte یک اسم هستش که برای راحتی استفاده از نوع unsigned char تعریف کردم.
              چون دیدم به int نیازی نیستآ‌ (که دو برابر فضا اشغال میکنه).
              موفق باشی. ادامه بده
              نارحت نشدم که :eek:
              فقط سوال کردم در اولین فرصت اون تغیراتو اعمال میکنم و لینکو میزارم :nerd:
              به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
              @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

              دیدگاه


                #8
                پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی سون سگ

                نوشته اصلی توسط ASHIT AXAR
                و همینطور برای اینکار باید کامپایل شرطی بکنید:

                کد:
                #ifndef _SEG_INCLUDED_
                #define _SEG_INCLUDED_
                #include <delay.h>
                
                typedef unsigned char ubyte;
                
                #define D PORTA //SELECT DATA PORT
                #define EN0 PORTC.0 //SELECT ENABLE PIN
                #define EN1 PORTC.1 //SELECT ENABLE PIN
                #define EN2 PORTC.2 //SELECT ENABLE PIN
                #define EN3 PORTC.3 //SELECT ENABLE PIN
                #define EN4 PORTC.4 //SELECT ENABLE PIN
                #define EN5 PORTC.5 //SELECT ENABLE PIN
                #define EN6 PORTC.6 //SELECT ENABLE PIN
                #define EN7 PORTC.7 //SELECT ENABLE PIN
                #define EN8 PORTB.0 //SELECT ENABLE PIN
                #define EN9 PORTB.1 //SELECT ENABLE PIN
                #define EN10 PORTB.2 //SELECT ENABLE PIN
                #define EN11 PORTB.3 //SELECT ENABLE PIN
                
                ubyte seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
                
                #if defined EN0 && defined EN1 && defined EN2
                ubyte seg_3(ubyte part1,ubyte part2,ubyte part3)
                {
                D=seg[part1];
                EN0=0;
                delay_ms(d);
                EN0=1;
                
                D=seg[part2];
                EN1=0;
                delay_ms(d);
                EN1=1;
                
                D=seg[part3];
                EN2=0;
                delay_ms(d);
                EN2=1;
                }
                #endif
                
                #if defined EN0 && defined EN1
                ubyte seg_2(ubyte part1,ubyte part2)
                {
                D=seg[part1];
                EN0=0;
                delay_ms(d);
                EN0=1;
                
                D=seg[part2];
                EN1=0;
                delay_ms(d);
                EN1=1;
                }
                #endif
                
                #endif
                و همینطور تا آخر برای همه ی تابع ها ....
                و نکته ای که اینجا هستش اینه که ENABLE PIN هایی که لازم نیست رو باید غیر فعال کرد (کامنت)
                // EN12
                // EN11
                ...
                یه سوال دیگه اینجه شما از دو if استفاده کردید اما سه بار از endif استفاده کردید ؟؟؟ چرا ؟؟؟
                و باز هم یه سوال دیگه چرا از if معمولی استفاده نکردید و if رو اینجوری نوشتید (if#) ؟؟؟ چرا ؟؟؟
                به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
                @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

                دیدگاه


                  #9
                  پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی س&#

                  نوشته اصلی توسط liamplm1382
                  یه سوال دیگه اینجه شما از دو if استفاده کردید اما سه بار از endif استفاده کردید ؟؟؟ چرا ؟؟؟
                  و باز هم یه سوال دیگه چرا از if معمولی استفاده نکردید و if رو اینجوری نوشتید (if#) ؟؟؟ چرا ؟؟؟
                  کجا؟ نه دیگه به تعداد نوشتم (سه تا)
                  کد:
                  #ifndef
                    #if
                  
                    #endif
                    #if
                  
                    #endif
                  #endif
                  این ها دستورات پیش پردازنده هستن. پیش از اینکه به کامپایلر برسن جایگزین میشن (کامپایل شرطی).
                  این باعث میشه به جای اینکه همه تابع ها کامپایل بشن و در فایل نهایی فضا اشغال کنن (مثلا در اینجا ) فقط یکی از اون ۱۲ تا تابع کامپایل خواهد شد و بقیه نادیده گرفته میشن. در حالی که ما فقط به یکی از اون تابع ها نیاز داریم.
                  در این مورد (همین برنامه) باید اون رو برای هر ۱۲ تا تابع مثل الگو تکرار کنی و فقط اون یک تابعی که شرط درباره ش درست باشه کامپایل میشه
                  مثلا من به تابع دو نیاز دارم پس باید EN0 و EN1 رو داشته باشم و بقیه رو کامنت کنم( یا حذف کنم) تا فقط تابع شماره دو کامپایل بشه
                  If the wind will not serve, take to the oars

                  دیدگاه


                    #10
                    پاسخ : پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی س&#

                    نوشته اصلی توسط ASHIT AXAR
                    کجا؟ نه دیگه به تعداد نوشتم (سه تا)
                    کد:
                    #ifndef
                      #if
                    
                      #endif
                      #if
                    
                      #endif
                    #endif
                    این ها دستورات پیش پردازنده هستن. پیش از اینکه به کامپایلر برسن جایگزین میشن (کامپایل شرطی).
                    این باعث میشه به جای اینکه همه تابع ها کامپایل بشن و در فایل نهایی فضا اشغال کنن (مثلا در اینجا ) فقط یکی از اون ۱۲ تا تابع کامپایل خواهد شد و بقیه نادیده گرفته میشن. در حالی که ما فقط به یکی از اون تابع ها نیاز داریم.
                    در این مورد (همین برنامه) باید اون رو برای هر ۱۲ تا تابع مثل الگو تکرار کنی و فقط اون یک تابعی که شرط درباره ش درست باشه کامپایل میشه
                    مثلا من به تابع دو نیاز دارم پس باید EN0 و EN1 رو داشته باشم و بقیه رو کامنت کنم( یا حذف کنم) تا فقط تابع شماره دو کامپایل بشه
                    ببخشید من خیلی سوال می کنم :biggrin: اون ifndef# برای چیه؟؟؟ :nerd:
                    به نظر من همه باید برنامه نویسی را یاد بگیرند زیرا برنامه نویسی طریقه ی فکر کردن را به شما یاد میدهد.
                    @@@@@@@@@@*بیل گیتس*@@@@@@@@@@

                    دیدگاه


                      #11
                      پاسخ : پاسخ : پاسخ : پاسخ : پاسخ : کتابخانه راه اندازی س&#

                      نوشته اصلی توسط liamplm1382
                      ببخشید من خیلی سوال می کنم :biggrin: اون ifndef# برای چیه؟؟؟ :nerd:
                      اون وارون #IF هستش. IF Not Defined

                      اون برای جلوگیری از سربار سیستم گذاشته شده.
                      اگه اونو نزاریم هر بار که یک سرآیند رو Include می کنیم به همون تعداد کپی میکنه
                      ولی اگه اونو بزاریم اول بررسی میکنه که آیا اون کتابخونه (اسمی که درست زیرش دیفاین کردیم) قبلا فراخوانی شده یا نه. اگه نشده بود فراخوانی میکنه وگرنه از همون قبلی استفاده میکنه. (این یه روش تعریف استاندارد هستش)

                      کد:
                      #ifndef _SEG_INCLUDED_
                        #define _SEG_INCLUDED_
                      
                        // user code
                      
                      #endif
                      If the wind will not serve, take to the oars

                      دیدگاه

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