اطلاعیه

Collapse
No announcement yet.

لطفا کسی این برنامه (قسمت 17 فیلم AVR ) رو توضیح بدهد!!

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

    لطفا کسی این برنامه (قسمت 17 فیلم AVR ) رو توضیح بدهد!!

    با سلام.این برنامه قسمت 17 اموزش avr جناب کی نزاد هست که جا داره همین جا ازشون کمال تشکر رو به جا بیارم.لطفا کسی این برنامه رو توضیح بدهید. :read:


    Written by Ozhan KD - www.KnowledgePlus.ir Pressing a key displays the keyboard defined character on 7segments from left to right

    -|--|--|--|-- PB0
    -|--|--|--|-- PB1
    -|--|--|--|-- PB2
    PB3 PB5
    PB4 PB6

    PC0 --- a
    PC1 --- b
    PC2 --- c
    PC3 --- d
    PC4 --- e
    PC5 --- f
    PC6 --- g
    PC7 --- dp

    PA0 --- LEDs_select
    PA1 --- DIGIT0_select
    PA2 --- DIGIT1_select
    PA3 --- DIGIT2_select
    PA4 --- DIGIT3_select
    PA5 --- DIGIT4_select
    PA6 --- DIGIT5_select

    */

    #include <mega32.h>
    #include <delay.h>
    خط زیر رو برای چی فرا خواندیم؟

    #define nokey_code 12

    // 7 segment codes
    flash unsigned char display_codes[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f,0x00,0x40};

    //keyboard codes
    flash unsigned char keyboard_codes[]={0x76,0x6E,0x5E,0x3E,0x75,0x6D,0x5D,0x3D,0x73,0x6 B,0x5B,0x3B};

    همینطور خط زیر 11 هارو برای چی گذاشتیم؟
    volatile unsigned char data[]={11,11,11,11,11,11},leds=0; // initial values for display ( ------ )
    volatile unsigned char key_code=nokey_code;

    void main()
    {
    unsigned char i=5;
    unsigned char temp_key_code,old_key_code=nokey_code;
    DDRC=(1<<DDC7)|(1<<DDC6)|(1<<DDC 5)|(1<<DDC4)|(1<<DDC3)|(1<<DDC2) |(1<<DDC1)|(1<<DDC0);
    PORTA=(1<<PORTA6)|(1<<PORTA5)|(1<&l t;PORTA4)|(1<<PORTA3)|(1<<PORTA2)|(1&l t;<PORTA1)|(1<<PORTA0);
    DDRA=(1<<DDA6)|(1<<DDA5)|(1<<DDA 4)|(1<<DDA3)|(1<<DDA2)|(1<<DDA1) |(1<<DDA0);

    //initialize timer
    OCR0=124;
    TCCR0=(1<<WGM01)|(1<< CS01);
    TIMSK=(1<<OCIE0);
    #asm("sei"

    while(1)
    {
    // Update key code.
    // This is necessary because of possible change of key code during loop
    temp_key_code=key_code;
    if (temp_key_code!=nokey_code)leds=1; // Turn on LED if any key pressed
    else leds=0;
    if (temp_key_code!= old_key_code)
    {
    old_key_code=temp_key_code;
    if (temp_key_code!=nokey_code)
    {
    data[i]=temp_key_code;
    چرا i رو 5 تعریف کردهایم؟
    if (--i==0xff) i=5;
    }
    }
    }
    }

    //------------------------------------------------------------------------------------------------------------------
    از اینجا به بعدشم خوب نمی فهمم.

    interrupt [TIM0_COMP] void timer0_compare_isr(void)
    {
    static unsigned char select=0;
    static unsigned char x20=0;
    unsigned char temp , i;
    // Turn off all 7segments and LEDs
    PORTA|=(1<<PORTA6)|(1<<PORTA5)|(1<& lt;PORTA4)|(1<<PORTA3)|(1<<PORTA2)|(1& lt;<PORTA1)|(1<<PORTA0);
    if (select)PORTC =display_codes[data[select-1]];
    else PORTC=leds;
    PORTA &=~(1<<select);
    if(++select==7)select=0;
    if (++x20==20)
    {
    x20=0;
    DDRB=(1<<DDB2)|(1<<DDB1)|(1<<DDB 0);
    PORTB=(1<<PORTB6)|(1<<PORTB5)|(1<&l t;PORTB4)|(1<<PORTB3);
    delay_us(5); // delay for signal stablization
    temp=(PINB & 0X78);
    DDRB=(1<<DDB6)|(1<<DDB5)|(1<<DDB 4)|(1<<DDB3);
    PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<&l t;PORTB0);
    delay_us(5); // delay for signal stablization
    temp |=(PINB & 0X07);
    for(i=0;i<12;i++)
    {
    if(temp==keyboard_codes[i])
    {
    key_code=i;
    break;
    }
    else key_code=nokey_code;
    }
    }
    }

    اضافه شده در تاریخ :
    :question:
    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
    وبسایت ختم صلوات
    http://www.salavaty.com/

    #2
    پاسخ : لطفا کسی این برنامه (قسمت 17 فیلم AVR ) رو توضیح بدهد!!

    عملکرد برنامه در بخش هجدهم آموزش توضیح داده شده است. اما بصورت خلاصه در مورد سوال های شما:

    1- به دلیل وجود 12 کلید که کدهای 0 تا 11 به آنها اختصاص داده شده، برای وضعیت عدم فشار دادن کلید کد 12 در نظر گرفته شده که می توانست مقادیر دیگر هم (به غیر از 0 تا 11) باشد.

    2- مقدار دهی اولیه به آرایه ِdata به این دلیل است که بعد از ریست شدن میکروکنترلر و قبل از فشار دادن هر کلیدی، وضعیت پیش فرضی روی 7segment ها نمایش داده شود.

    3- به دلیل وجود 6 عدد 7segment، محدوده تغیرات i از 0 تا 5 است.

    4- در مورد روتین نمایش و صفحه کلید هم در بخش هجدهم توضیح داده شده است.

    (برای نمایش صحیح کدها از چپ به راست، بجای تگ left تگ ltr را قرار دهید)
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : لطفا کسی این برنامه (قسمت 17 فیلم AVR ) رو توضیح بدهد!!

      نوشته اصلی توسط طراح
      عملکرد برنامه در بخش هجدهم آموزش توضیح داده شده است. اما بصورت خلاصه در مورد سوال های شما:

      1- به دلیل وجود 12 کلید که کدهای 0 تا 11 به آنها اختصاص داده شده، برای وضعیت عدم فشار دادن کلید کد 12 در نظر گرفته شده که می توانست مقادیر دیگر هم (به غیر از 0 تا 11) باشد.

      2- مقدار دهی اولیه به آرایه ِdata به این دلیل است که بعد از ریست شدن میکروکنترلر و قبل از فشار دادن هر کلیدی، وضعیت پیش فرضی روی 7segment ها نمایش داده شود.

      3- به دلیل وجود 6 عدد 7segment، محدوده تغیرات i از 0 تا 5 است.


      4- در مورد روتین نمایش و صفحه کلید هم در بخش هجدهم توضیح داده شده است.

      (برای نمایش صحیح کدها از چپ به راست، بجای تگ left تگ ltr را قرار دهید)
      ممنونم.از اموزش های خوبتان بسیار متشکرم.بله من عجله کردم توضیحات قسمت 18 کامل و خیلی خوب بود.
      [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
      وبسایت ختم صلوات
      http://www.salavaty.com/

      دیدگاه

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