اطلاعیه

Collapse
No announcement yet.

سوال: نوشتن برروی سون سگمنت و LCD

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

    سوال: نوشتن برروی سون سگمنت و LCD

    سلام

    من 2 تا برنامه دارم که از هر کدام چند تا سوال دارم .

    برنامه اول

    #include <mega32.h>
    #include <delay.h>

    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTA=0x00;
    DDRA=0xFF;

    // 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=Out Func2=Out Func1=Out Func0=Out
    // State7=P State6=P State5=P State4=P State3=0 State2=0 State1=0 State0=0
    PORTC=0xF0;
    DDRC=0x0F;

    // 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=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=FFFFh
    // 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=FFh
    // 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;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    while (1)
    {
    PORTC=0xfe;
    delay_ms(1);
    if (PINC==0xDE)
    {
    delay_ms(250);
    PORTA=0x06;
    }
    else if(PINC==0xbe)
    {
    delay_ms(250);
    PORTA=0x5b;
    }
    else if (PINC==0x7e)
    {
    delay_ms(250);
    PORTA=0x79;
    }

    PORTC=0xfd;
    delay_ms(1);
    if (PINC==0XDD)
    {
    delay_ms(250);
    PORTA=0x66;
    }
    else if (PINC==0xbd)
    {
    delay_ms(250);
    PORTA=0x6d;
    }
    else if (PINC==0x7d)
    {
    delay_ms(250);
    PORTA=0x7d;
    }

    PORTC=0xfb;
    delay_ms(1);
    if (PINC==0xdb)
    {
    delay_ms(250);
    PORTA=0x07;
    }
    else if (PINC==0xbb)
    {
    delay_ms(250);
    PORTA=0X7F;
    }
    else if (PINC==0X7B)
    {
    delay_ms(250);
    PORTA=0x67;
    }

    PORTC=0xF7;
    delay_ms(1);
    if (PINC==0xD7)
    {
    delay_ms(250);
    PORTA=0x3f;
    }
    else if (PINC==0xB7)
    {
    delay_ms(250);
    PORTA=0x00;
    }
    else if(PINC==0x77)
    {
    delay_ms(250);
    PORTA=0xff;
    }


    };
    }
    برنامه بالا مربوط به نمایش دریافت عدد ورودی از کیبورد 4*4 و نمایش آن عدد برروی سون سگمنت هست....من چند جای این برنامه مشکل دارم :
    1- چرا برای دریافت اطلاعات از کیبورد، 4 پین اول را به صورت خروجی و 4 پین بعدی را به صورت ورودی با مقاومت pull up تنظیم می کنیم؟
    2- این دو خط در حلقه while چه جوری نوشته شده؟
    3- درباره تعداد مساوی ها در بالا هم توضیح بدید.



    برنامه دوم

    #include <mega32.h>
    #include <delay.h>
    #include <sleep.h>
    #include <stdio.h>

    #asm
    .equ_lcd_port=0x18
    #endasm
    #include <lcd.h>

    unsigned char digit,str[3];
    unsigned char scan();


    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    digit=scan();
    delay_ms(400);
    sprintf (str,"%u",digit);
    lcd_puts(str);
    }

    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
    // State7=0 State6=0 State5=0 State4=0 State3=P State2=P State1=P State0=P
    PORTA=0x0F;
    DDRA=0xF0;

    // 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=0x0F;
    DDRC=0xF0;

    // 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=P State2=T State1=T State0=T
    PORTD=0x08;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=FFFFh
    // 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=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: On
    // INT1 Mode: Any change
    // INT2: Off
    GICR|=0x80;
    MCUCR=0x00;
    MCUCSR=0x00;
    GIFR=0x80;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    lcd_init(16);

    // Global enable interrupts
    #asm("sei&quot
    sleep_enable();
    while (1)
    {
    PORTC=0xF0;
    powerdown();

    };
    }
    unsigned char scan(void)
    {
    PORTC=0xFE;
    delay_ms(1);
    if (PINC==0xDE)
    return 1;
    else if(PINC==0xBE)
    return 2;
    else if(PINC==0x7E)
    return 3;
    PORTC=0xFD;
    delay_ms(1);
    if (PINC==0xDD)
    return 4;
    else if(PINC==0xBD)
    return 5;
    else if(PINC==0x7D)
    return 6;
    PORTC=0xFB;
    delay_ms(1);
    if (PINC==0xDB)
    return 7;
    else if(PINC==0xBB)
    return 8;
    else if(PINC==0x7B)
    return 9;
    PORTC=0xF7;
    delay_ms(1);
    if (PINC==0xD7)
    return 10;
    else if(PINC==0xB7)
    return 11;
    else if(PINC==0x77)
    return 12;
    }
    این برنامه مربوط به اسکن کیبورد 4*4 توسط اینتراپت خارجی و نمایش عدد قرائت شده بر روی LCD هست.
    1- چرا PD3 را بصورت pull up تنظیم می کنیم؟
    2- برای ال سی دی از پورت B استفاده کردیم برای همین به صورت اسمبلی تعریف کردیم:
    #asm
    .equ_lcd_port=0x18
    #endasm
    حالا سوال این هست که چرا شده 0x018 ؟ برای بقیه پورت ها چند هست و چه جوری باید بنویسم؟
    3- داخل حلقه ی while را برای من توضیح بدید.
    4- حلقه ی unsigned char scan(void) را نیز توضیح دهید.

    با تشکر
    @};-

    #2
    پاسخ : سوال: نوشتن برروی سون سگمنت و LCD

    برنامه اول:
    برای سوال اولتون میتونم بگم که برای اسکن کردن یک صفحه کلید ماتریسی باید 4 تا ورودی و 4 تا خروجی داشته باشیم تا با یکی اون 4 تا پایه ی خروجی یه 0 بدیم و چک کنیم که کدامیک از اون 4 تا ورودی ، 0 میشن و نتیجه بگیریم که کدام عدد فشرده شده ....و مقاومت پول اپ برای اینکه که وقتی کلید ها فشار داده نشدن ، پایه های ورودی همشون 1 نشون بدن تا برنامه اشتباه نکنه .... اگه پول اپ نکنیم همه ورودی ها 0 نشون میدن و خب اولین ورودی 0 تو برنامه صدق می کنه و یه عدد رو نشون میده در حالی که هیچ عددی فشار داده نشده ...

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

    برای سوال سومتون باید بگم که اگه از یه علامت مساوی استفاده شده باشه برای قرار دادن یه متغییر در متغییر دیگه هستش اما اگه از دو علامت مساوی استفاده شده باشه برای پک کردن مساوی بودن دو عبارت هستش ...

    برنامه دوم:
    سوال اول
    pd3 پایه اینتراپتی هست که تو این برنامه ازش استفاده شده... البته من مدار این برنامه رو ندیدم اما حدس میزنم که خروجی های این مدار(همون ورودی های میکرو) با یه دیود یه اینتراپت 1 وصل میشه و چون در حالت عادی خروجی ها 0 هستن ، پول اپش کرده که درحالت فشرده نشدن کلید ها برنامه عددی رو نخونه ...

    سوال دوم:
    اون عدد برای هر پورت یه عدد خاصی هستش که میتونید تو کدویزارد پورت lcd رو تغییر بدین و عددش رو مشاهده کنید ... البته چون کدویزارد رو دارین نیازی به دونستن این عدد ندارین ...

    سوال اخر :
    این سوالتون یخورده سخته ... خیلی وقت میبره ... البته برنامه ای که نوشته شده اسون هستش ... اگه خواستین بازم من در خدمتم ...
    Share OR Die

    دیدگاه


      #3
      پاسخ : سوال: نوشتن برروی سون سگمنت و LCD

      سلام
      ممنون @};-
      برنامه اول
      منظورم از دو خط یکی :
      PORTC=0xfe
      و اون یکی خط:
      if (PINC==0xDE)
      نحوه عددگذاری رو متوجه نمیشم اگه میشه بهم توضیح بدید.

      برنامه دوم
      - بله 4 پایه دوم پورت C که به صورت ورودی با پول پ تعریف شده به یک مقاومت و دیود وصل و از آونجا به PD3 وصل می نماییم.

      - می دونید مهمترین قسمت همون سوال 3 و 4 هست مثلا بهم بگید داخل حلقه ی while داشتیم:

      PORTC=0xF0;
      powerdown();
      اخط اول یعنی وقتی همه سطرهای کیبورد یک اما ستون ها صفر باشه؛ یعنی هیچ کلیدی فشرده نشده، میکرو به حالت sleep برود؟

      - این قسمت رو هم یه توضیح کلی در باره عددهاش بهم بدید:
      PORTC=0xFE;
      delay_ms(1);
      if (PINC==0xDE)
      return 1;
      else if(PINC==0xBE)
      return 2;
      else if(PINC==0x7E)
      return 3;

      با تشکر
      @};-

      دیدگاه


        #4
        پاسخ : سوال: نوشتن برروی سون سگمنت و LCD

        با مبنای 2 یا 16 که آشنا هستید ؟
        وقتی عددی رو بصورت 0xfe نشون میدن این عدد در مبنای 16 هستش که با نماد 0x نشون داده شده ...
        اگه بخواین همون عدد رو در مبنای 2 نشون بدین باید 0b11111110 بنویسین ....
        وقتی این عدد رو روی پورتی قرار میدین همه پایه های اون پورت 1 میشه غیر از pin0 ....

        PORTC=0xF0;
        powerdown();

        در مورد این قسمت باید بگم که هیچ شرطی وجود نداره و برنامه چیزی رو چک نمی کنه ، فقط چهار تا پایه رو pull up میکنه و چهار تا خروجی رو 1 میکنه .... و بعد به sleep میره تا وقتی که میکرو با اینتراپت از خواب بیدار شه ...
        Share OR Die

        دیدگاه


          #5
          پاسخ : سوال: نوشتن برروی سون سگمنت و LCD

          نوشته اصلی توسط nazanin66
          سلام

          من 2 تا برنامه دارم که از هر کدام چند تا سوال دارم .

          برنامه اول

          #include <mega32.h>
          #include <delay.h>

          // Declare your global variables here

          void main(void)
          {
          // Declare your local variables here

          // Input/Output Ports initialization
          // Port A initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
          PORTA=0x00;
          DDRA=0xFF;

          // 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=Out Func2=Out Func1=Out Func0=Out
          // State7=P State6=P State5=P State4=P State3=0 State2=0 State1=0 State0=0
          PORTC=0xF0;
          DDRC=0x0F;

          // 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=FFh
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=FFFFh
          // 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=FFh
          // 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;

          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;

          while (1)
          {
          PORTC=0xfe;
          delay_ms(1);
          if (PINC==0xDE)
          {
          delay_ms(250);
          PORTA=0x06;
          }
          else if(PINC==0xbe)
          {
          delay_ms(250);
          PORTA=0x5b;
          }
          else if (PINC==0x7e)
          {
          delay_ms(250);
          PORTA=0x79;
          }

          PORTC=0xfd;
          delay_ms(1);
          if (PINC==0XDD)
          {
          delay_ms(250);
          PORTA=0x66;
          }
          else if (PINC==0xbd)
          {
          delay_ms(250);
          PORTA=0x6d;
          }
          else if (PINC==0x7d)
          {
          delay_ms(250);
          PORTA=0x7d;
          }

          PORTC=0xfb;
          delay_ms(1);
          if (PINC==0xdb)
          {
          delay_ms(250);
          PORTA=0x07;
          }
          else if (PINC==0xbb)
          {
          delay_ms(250);
          PORTA=0X7F;
          }
          else if (PINC==0X7B)
          {
          delay_ms(250);
          PORTA=0x67;
          }

          PORTC=0xF7;
          delay_ms(1);
          if (PINC==0xD7)
          {
          delay_ms(250);
          PORTA=0x3f;
          }
          else if (PINC==0xB7)
          {
          delay_ms(250);
          PORTA=0x00;
          }
          else if(PINC==0x77)
          {
          delay_ms(250);
          PORTA=0xff;
          }


          };
          }
          برنامه بالا مربوط به نمایش دریافت عدد ورودی از کیبورد 4*4 و نمایش آن عدد برروی سون سگمنت هست....من چند جای این برنامه مشکل دارم :
          1- چرا برای دریافت اطلاعات از کیبورد، 4 پین اول را به صورت خروجی و 4 پین بعدی را به صورت ورودی با مقاومت pull up تنظیم می کنیم؟
          2- این دو خط در حلقه while چه جوری نوشته شده؟
          3- درباره تعداد مساوی ها در بالا هم توضیح بدید.



          برنامه دوم

          #include <mega32.h>
          #include <delay.h>
          #include <sleep.h>
          #include <stdio.h>

          #asm
          .equ_lcd_port=0x18
          #endasm
          #include <lcd.h>

          unsigned char digit,str[3];
          unsigned char scan();


          // External Interrupt 1 service routine
          interrupt [EXT_INT1] void ext_int1_isr(void)
          {
          digit=scan();
          delay_ms(400);
          sprintf (str,"%u",digit);
          lcd_puts(str);
          }

          // Declare your global variables here

          void main(void)
          {
          // Declare your local variables here

          // Input/Output Ports initialization
          // Port A initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
          // State7=0 State6=0 State5=0 State4=0 State3=P State2=P State1=P State0=P
          PORTA=0x0F;
          DDRA=0xF0;

          // 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=0x0F;
          DDRC=0xF0;

          // 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=P State2=T State1=T State0=T
          PORTD=0x08;
          DDRD=0x00;

          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=FFh
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=FFFFh
          // 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=FFh
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;

          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: On
          // INT1 Mode: Any change
          // INT2: Off
          GICR|=0x80;
          MCUCR=0x00;
          MCUCSR=0x00;
          GIFR=0x80;

          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;

          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;

          lcd_init(16);

          // Global enable interrupts
          #asm("sei&quot
          sleep_enable();
          while (1)
          {
          PORTC=0xF0;
          powerdown();

          };
          }
          unsigned char scan(void)
          {
          PORTC=0xFE;
          delay_ms(1);
          if (PINC==0xDE)
          return 1;
          else if(PINC==0xBE)
          return 2;
          else if(PINC==0x7E)
          return 3;
          PORTC=0xFD;
          delay_ms(1);
          if (PINC==0xDD)
          return 4;
          else if(PINC==0xBD)
          return 5;
          else if(PINC==0x7D)
          return 6;
          PORTC=0xFB;
          delay_ms(1);
          if (PINC==0xDB)
          return 7;
          else if(PINC==0xBB)
          return 8;
          else if(PINC==0x7B)
          return 9;
          PORTC=0xF7;
          delay_ms(1);
          if (PINC==0xD7)
          return 10;
          else if(PINC==0xB7)
          return 11;
          else if(PINC==0x77)
          return 12;
          }
          این برنامه مربوط به اسکن کیبورد 4*4 توسط اینتراپت خارجی و نمایش عدد قرائت شده بر روی LCD هست.
          1- چرا PD3 را بصورت pull up تنظیم می کنیم؟
          2- برای ال سی دی از پورت B استفاده کردیم برای همین به صورت اسمبلی تعریف کردیم:
          #asm
          .equ_lcd_port=0x18
          #endasm
          حالا سوال این هست که چرا شده 0x018 ؟ برای بقیه پورت ها چند هست و چه جوری باید بنویسم؟
          3- داخل حلقه ی while را برای من توضیح بدید.
          4- حلقه ی unsigned char scan(void) را نیز توضیح دهید.

          با تشکر
          @};-
          salam:
          vaghti register MCUCR meghdar dehi nashodeh!che shekliyeh ke mode hayeh sleep kar mikonand??????

          دیدگاه

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