اطلاعیه

Collapse
No announcement yet.

کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

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

    کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

    سلام به همگی

    در کتاب AVR آقای مظاهریان در مبحث پروژه ها برای اسکن یه کیپد 4*4 که شامل 16 کاراکتر هست گفته شده که باید ماتریس چهار در چهار بدست آمده رو طوری بچینیم که ستونها به VCC وصل باشه و سطر ها رو هم با الگوی 0111>1011>1101>1110 اسکن کنیم...من تو برنامه ام همین کار رو کردم ولی از سایر توضیحات آقای مظاهریان چیزی متوجه نشدم...موندم چطور باید فشرده شدن یک کلید خاص رو تشخصی داد

    برنامه رو به همراه فایل پروتئوس از پروژه ای که دارم روش کار میکنم (( ماشین حساب مهندسی )) برای شما پلود میکنم:

    http://uplod.ir/rcfvuo6ypsra/scientific_calculator_avr.rar.htm


    حجمش 128 کیلو هست ولی اگر حال نداشتید دانلود کنید برنامه هم اینه:

    کد:
    #include <mega32.h>
    #include <delay.h>
    // Graphic LCD functions
    #include <glcd.h>
    
    // Font used for displaying text
    // on the graphic LCD
    #include <font5x7.h>
    /////////////////////////////////////////////////////////////////////////////////////////
    void keypadreader(void);
    void main(void)
    {
    GLCDINIT_t glcd_init_data;
    
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    DDRC=0xf0;
    PORTD=0x00;
    DDRD=0x00;
    
    glcd_init_data.font=font5x7;
    
    glcd_init(&glcd_init_data);
    glcd_outtextxy(0,28,"SCIENTIFIC CALCULATOR"); 
    delay_ms(100);
    glcd_clear();  
    while (1)
    {
    keypadreader();
    }
    }
    //////////////////////////////////////////////////////////////////////
    void keypadreader(void)
    {
    do{
    PORTC = 0b11111110;
    delay_ms(2);
    PORTC = 0b11111101;
    delay_ms(2);
    PORTC = 0b11111011;
    delay_ms(2);
    PORTC = 0b11110111;
    delay_ms(2);
    }
    while(1);
    
    }

    #2
    پاسخ : کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

    به نظر من راحتترین راه برای اسکن صفحه کلید 4*4 استفاده از ic دیکودر mm74c922 میباشد . با فشار دادن هر کلید یک اینتراپت میده با یک کد 4 بیتی

    دیدگاه


      #3
      پاسخ : کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

      سلام دوست عزیز
      این پست را ببین اگه مشکلی داشتی مطرح کن
      http://www.eca.ir/forum2/index.php?topic=88858.msg549287#msg549287

      موفق باشید
      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

        ممنون از همه...

        کلیدها رو به آی سی 74C922 وصل کردم و جواب داد...الان سوالم درباره یک حلقه While و یک متغیر counter هست.

        این برنامه رو ببینید:

        کد:
        #include <mega32.h>
        #include <delay.h>
        // Graphic LCD functions
        #include <glcd.h>
        
        // Font used for displaying text
        // on the graphic LCD
        #include <font5x7.h>
        int counter = 0;
        /////////////////////////////////////////////////////////////////////////////////////////
        void keyreader(void);
        void main (void)
        {
        GLCDINIT_t glcd_init_data;
        
        PORTA=0x00;
        DDRA=0x00;
        PORTB=0x00;
        DDRB=0x00;
        DDRC=0x00;
        PORTC = 0xF0;
        PORTD=0x00;
        DDRD=0x00;
        
        glcd_init_data.font=font5x7;
        
        glcd_init(&glcd_init_data);
        glcd_outtextxy(0,28,"SCIENTIFIC CALCULATOR"); 
        delay_ms(100);
        glcd_clear();  
        
        keyreader();
        
        }
        /////////////////////////////////////////
        ////////////////////////////////////////
        void keyreader(void)
        {
        while (1)
        {
        if(PINC == 0xFF){
        delay_ms(10);
        if(PINC == 0xFF)
        counter ++;
        glcd_outtextxy(counter,0,"1");
        }
        }
        }
        میخوام با هربار زدن کلید 1 یک عدد 1 به جلوی 1 قبلی در lcd اضافه بشه مثلا برای دو بار بشه 11 و برای سه بار بشه 111 ولی تو این برنامه فقط یدونه 1 نمایش میده و شروع میکنه روی LCD حرکت کردن..!!

        مشکل از این تیکه هست که من عقلم نمیرسه چیکار کنم..

        کد:
        void keyreader(void)
        {
        while (1)
        {
        if(PINC == 0xFF){
        delay_ms(10);
        if(PINC == 0xFF)
        counter ++;
        glcd_outtextxy(counter,0,"1");
        }
        }
        }

        دیدگاه


          #5
          پاسخ : کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

          ببینید کلا روش های زیادی واسه اسکن صفحه کلید هست و اینطور نیست که بگیم فقط فلان روش وجود داره..
          روش هایی که یک حلقه دارند (for یا while) زیاد جالب نیستند چون اولا استفاده از این حلقه ها هم حجم کد رو افزایش میده و پردازش بیشتری میخواد...
          به نظرم این الگوریتم رو استفاده کنید نتیجه بهتری میگیرید:

          1-واسه صفحه کلید 4*4 ستون ها رو به نیبل بالا وسطرها رو به نیبل پایین(یا برعکس،فرقی نداره) متصل کنید
          2-ابتدا نیبل بالا رو خروجی کنید و مقدار منطقی 0 رو روی پینهاش قرار بدید ، سپس نیبل پایین رو ورودی کنید و مقاومت پول پشو هم فعال کنید.خب در این مرحله نیبل پایین رجیستر PINx رو بخونید و داخل یک متغیر بریزید
          3-در این مرحله نیبل بالا رو ورودی با مقاومت پول پ و نیبل پایینو خروجی با مقدار 0 بزارید..این دفعه نیبل بالای رجیستر PINx رو بخونید و مقدار اون رو با اون متغیر ، or بیتی کنید.
          4-به همین راحتی کلید فشار داده شده با دو مرحله اسکن بدست میاد در صورتی که روش های دیگه 4بار اسکن و بعضا 16 بار اسکن رو نیاز دارند...

          موفق باشید
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


          ساخت کنترلر دما PID فازي با AVR [آموزشی]

          دیدگاه


            #6
            پاسخ : کمک برای خواندن 16 عدد پوش باتن توسط یک پورت + برنامه + پروتئوس

            با سلام،

            به اینجا هم یه نگاهی بندازید : http://www.eca.ir/forum2/index.php?topic=65087.0

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

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه

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