اطلاعیه

Collapse
No announcement yet.

می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

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

    می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

    دوستان می شه کسی این برنامه رو به من توضیح بدهد.لطفا
    #include <mega8.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <delay.h>
    #include <lcd.h>
    #asm
    .equ __lcd_port=0x18 ;PORTB
    #endasm


    unsigned char buff[14],counter=0,showlcd[20],flag=0,cardnumber=0,rightflag=0,c=0,counterled=0, usartcounter=0,mainflag=0,i=0;
    eeprom unsigned char card1[14],card2[14],card3[14],card4[14],card5[14],card6[14],card7[14],card8[14],card9[14],card10[14];

    // External Interrupt 0 service routine

    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    buff[usartcounter]=UDR;
    if(usartcounter==13)
    {
    mainflag=1;
    usartcounter=0;
    }
    else if(usartcounter!=13) usartcounter++;
    }


    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    delay_ms(200);
    cardnumber++;
    itoa(cardnumber,showlcd);
    if(cardnumber<11)
    {
    lcd_clear();
    lcd_putsf(" Set to save \n in Slot"
    delay_ms(500);
    lcd_clear();
    lcd_putsf(" # #"
    lcd_gotoxy(7,0);
    lcd_puts(showlcd);
    delay_ms(500);

    }
    else if(cardnumber>=11)
    {
    c=cardnumber-10;
    itoa(c,showlcd);
    lcd_clear();
    lcd_putsf(" Set to clear \n Slot"
    delay_ms(500);
    lcd_clear();
    lcd_putsf(" # #"
    lcd_gotoxy(7,0);
    lcd_puts(showlcd);
    delay_ms(500);

    }
    if(cardnumber>20)cardnumber=0;
    }

    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    delay_ms(200);
    lcd_clear();
    lcd_putsf("Waiting For Card"
    for(counter=0;counter<14;counter++)
    {
    buff[counter]=getchar();
    }
    lcd_clear();
    lcd_putsf("OK"
    delay_ms(200);
    switch(cardnumber)
    {
    case 1:
    for(counter=0;counter<14;counter++)
    {
    card1[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 1"
    delay_ms(200);

    }
    break;
    case 2:
    for(counter=0;counter<14;counter++)
    {
    card2[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 2"
    delay_ms(200);
    }
    break;
    case 3:
    for(counter=0;counter<14;counter++)
    {
    card3[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 3"
    delay_ms(200);
    }
    break;
    case 4:
    for(counter=0;counter<14;counter++)
    {
    card4[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 4"
    delay_ms(200);
    }
    break;
    case 5:
    for(counter=0;counter<14;counter++)
    {
    card5[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 5"
    delay_ms(200);
    }
    break;
    case 6:
    for(counter=0;counter<14;counter++)
    {
    card6[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 6"
    delay_ms(200);
    }
    break;
    case 7:
    for(counter=0;counter<14;counter++)
    {
    card7[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 7"
    delay_ms(200);
    }
    break;
    case 8:
    for(counter=0;counter<14;counter++)
    {
    card8[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 8"
    delay_ms(200);
    }
    break;
    case 9:
    for(counter=0;counter<14;counter++)
    {
    card9[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 9"
    delay_ms(200);
    }
    break;
    case 10:
    for(counter=0;counter<14;counter++)
    {
    card10[counter]=buff[counter];
    lcd_clear();
    lcd_putsf("Saved in slot 10"
    delay_ms(200);
    }
    break;
    case 11:
    for(counter=0;counter<14;counter++)
    {
    card1[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 1"
    delay_ms(200);

    }
    break;
    case 12:
    for(counter=0;counter<14;counter++)
    {
    card2[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 2"
    delay_ms(200);

    }
    break;
    case 13:
    for(counter=0;counter<14;counter++)
    {
    card3[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 3"
    delay_ms(200);

    }
    break;
    case 14:
    for(counter=0;counter<14;counter++)
    {
    card4[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 4"
    delay_ms(200);

    }
    break;
    case 15:
    for(counter=0;counter<14;counter++)
    {
    card5[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 5"
    delay_ms(200);

    }
    break;
    case 16:
    for(counter=0;counter<14;counter++)
    {
    card6[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 6"
    delay_ms(200);

    }
    break;
    case 17:
    for(counter=0;counter<14;counter++)
    {
    card7[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 7"
    delay_ms(200);

    }
    break;
    case 18:
    for(counter=0;counter<14;counter++)
    {
    card8[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 8"
    delay_ms(200);

    }
    break;
    case 19:
    for(counter=0;counter<14;counter++)
    {
    card9[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 9"
    delay_ms(200);

    }
    break;
    case 20:
    for(counter=0;counter<14;counter++)
    {
    card10[counter]=0;
    lcd_clear();
    lcd_putsf("cleared slot 20"
    delay_ms(200);

    }
    break;
    }

    }

    void main(void)
    {



    PORTB=0x00;
    DDRB=0x00;

    PORTC=0x00;
    DDRC=0xff;


    PORTD=0xff;
    DDRD=0x00;

    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Low level
    // INT1: On
    // INT1 Mode: Low level
    GICR|=0xC0;
    MCUCR=0x00;
    GIFR=0xC0;

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


    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: Off
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x90;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;



    // LCD module initialization
    lcd_init(16);

    // Global enable interrupts

    #asm("sei&quot

    while (1)
    {
    lcd_clear();
    lcd_putsf("ASMZ Group"
    delay_ms(200);
    lcd_clear();
    lcd_putsf("ASMZ Group."
    delay_ms(200);
    lcd_clear();
    lcd_putsf("ASMZ Group.."
    delay_ms(200);
    lcd_clear();
    lcd_putsf("ASMZ Group..."
    delay_ms(200);
    lcd_clear();
    for(counter=0;counter<14;counter++)
    {
    buff[counter]=0;
    }


    while(mainflag==0)
    {


    lcd_putsf("Pass Your Card\n>"
    delay_ms(50);
    lcd_clear();
    lcd_putsf("Pass Your Card\n>>"
    delay_ms(50);
    lcd_clear();
    lcd_putsf("Pass Your Card\n>>>"
    delay_ms(50);
    lcd_clear();
    for(i=0;i<16;i++)
    {
    lcd_putsf("Pass Your Card"
    lcd_gotoxy(i,1);
    lcd_putsf(">>>>"
    delay_ms(50);
    lcd_clear();

    }
    lcd_putsf("Pass Your Card\n <"
    delay_ms(50);

    for(i=16;i>0;i--)
    {
    lcd_putsf("Pass Your Card"
    lcd_gotoxy(i,1);
    lcd_putsf("<<<<"
    delay_ms(50);
    lcd_clear();

    }
    lcd_putsf("Pass Your Card\n<<<"
    delay_ms(50);
    lcd_clear();
    lcd_putsf("Pass Your Card\n<<"
    delay_ms(50);
    lcd_clear();
    lcd_putsf("Pass Your Card\n<"
    delay_ms(50);
    lcd_clear();

    }

    mainflag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card1[counter]) flag++;
    }
    if(flag==14)

    {
    lcd_clear();
    lcd_putsf("card1"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card2[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card2"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card3[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card3"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card4[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card4"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card5[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card5"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card6[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card6"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card7[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card7"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card8[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card8"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card9[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card9"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;
    for(counter=0;counter<14;counter++)
    {
    if(buff[counter]==card8[counter])flag++;
    }
    if(flag==14)
    {
    lcd_clear();
    lcd_putsf("card10"
    PORTC.2=1;
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.5=~PORTC.5;
    delay_ms(400);
    }
    PORTC.2=0;
    PORTC.5=0;
    rightflag=1;
    }
    flag=0;


    if(rightflag==0)
    {
    lcd_clear();
    lcd_putsf(" Do not Match"
    for(counterled=0;counterled<10;counterled++)
    {
    PORTC.4=~PORTC.4;
    delay_ms(100);
    }
    lcd_clear();
    lcd_putsf(" But The Card\n id is >>"
    for(counterled=0;counterled<5;counterled++)
    {
    PORTC.4=~PORTC.4;
    delay_ms(100);
    }
    lcd_clear();
    lcd_puts(buff);
    delay_ms(1000);
    PORTC.4=0;
    }


    rightflag=0;
    };
    }
    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
    وبسایت ختم صلوات
    http://www.salavaty.com/

    #2
    پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

    سلام
    دوست عزیز برنامه شما خیلی زیاد است من پیشنهاد می کنم که برنامه را به قسمت های کوچکتر تقسیم کنید و بعد از جواب گرفتن از هر قسمت به قسمت بعد بروید
    مثلا شما lcd , اینتراپت خارجی دارید ابتدا به صورت جدا هر قسمت را انجام دهید
    فکر نکنم کسی حوصله کنه یک جا همه قسمت ها را نگاه کنه :eek:
    در ضمن توضیحی در مورد این که برنامه مروبط به چیست و از کجا گرفتید نیز بگذارید تا بچه ها راحت تر راهنمایی کنند
    موفق باشید :nice:
    معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
    اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
    آموزش Modelsim

    دیدگاه


      #3
      پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

      نوشته اصلی توسط skiboy
      سلام
      دوست عزیز برنامه شما خیلی زیاد است من پیشنهاد می کنم که برنامه را به قسمت های کوچکتر تقسیم کنید و بعد از جواب گرفتن از هر قسمت به قسمت بعد بروید
      مثلا شما lcd , اینتراپت خارجی دارید ابتدا به صورت جدا هر قسمت را انجام دهید
      فکر نکنم کسی حوصله کنه یک جا همه قسمت ها را نگاه کنه :eek:
      در ضمن توضیحی در مورد این که برنامه مروبط به چیست و از کجا گرفتید نیز بگذارید تا بچه ها راحت تر راهنمایی کنند
      موفق باشید :nice:
      بله.فکر نکنم کسی حوصله کنه همه برنامه رو بخونه. :sad: اما یکی حوصله داشته این برنامه رو نوشته!!!!!!
      این برنامه کارتخوان با ماژول rfid قائم الکترونیکه.تو اینترنت پیداش کردم.
      [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
      وبسایت ختم صلوات
      http://www.salavaty.com/

      دیدگاه


        #4
        پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

        خوب یکی لطف کنه فعلا کلیت برنامه رو توضیح بده ممنون می شم. :read: امیدوارم راضی طراحاش راضی باشن ولی منم تو اینترنت پیدا کردم دیگه :redface:
        اینم شماتیکش:: http://uplod.ir/wkwp04eja2kk/last_www.picpars.com.PDF.htm
        اینم توضیحات همرا برنامه بود: http://uplod.ir/1748ojtpca5m/hatman_bekhanid.pdf.htm
        [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
        وبسایت ختم صلوات
        http://www.salavaty.com/

        دیدگاه


          #5
          پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

          دوست عزیز فکر کنم قسمت به قسمت بریم جلو بهتر باشد و همچنین اینکه اول خودتان بروید دنبالش و سوال بپرسید بچه ها جواب بدهند
          این که یکدفعه من یا بقیه بیایم از بالا همه چی را بگوییم زیاد جنبه اموزشی نداره :agree:
          معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
          اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
          آموزش Modelsim

          دیدگاه


            #6
            پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

            unsigned char buff[14],counter=0,showlcd[20],flag=0,cardnumber=0,rightflag=0,c=0,counterled=0, usartcounter=0,mainflag=0,i=0;
            eeprom unsigned char card1[14],card2[14],card3[14],card4[14],card5[14],card6[14],card7[14],card8[14],card9[14],card10[14];
            اگر یک مقاله اموزشی می شناسید یا یک کتاب خوب لطفا معرفی کنید. :read:
            خوب در همین ابتدای برنامه buff,usartcounterوcounterledچیست؟ چرا برای تعریف کارتها از eeprom استفاده کرده ایم؟
            [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]
            وبسایت ختم صلوات
            http://www.salavaty.com/

            دیدگاه


              #7
              پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

              نوشته اصلی توسط sky_star
              unsigned char buff[14],counter=0,showlcd[20],flag=0,cardnumber=0,rightflag=0,c=0,counterled=0, usartcounter=0,mainflag=0,i=0;
              eeprom unsigned char card1[14],card2[14],card3[14],card4[14],card5[14],card6[14],card7[14],card8[14],card9[14],card10[14];
              اگر یک مقاله اموزشی می شناسید یا یک کتاب خوب لطفا معرفی کنید. :read:
              خوب در همین ابتدای برنامه buff,usartcounterوcounterledچیست؟ چرا برای تعریف کارتها از eeprom استفاده کرده ایم؟
              برای ارتباط سریال اومده یک ارایه درست کرده (buff) که مقادیر ورودی سریال از طریق رجیستر UDR داخل ان قرار می گیرد و برای اینکه بفهمد که تمام شده است چک می کند که عدد 13 امده است یا نه اگه سیزده می فهمه اخرشه پس usartcounter=0 قرار می دهد
              شما برای فهمیدن این قسمت دنبال ارتباط سریال و دستورهای ان باشید
              معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
              اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
              آموزش Modelsim

              دیدگاه


                #8
                پاسخ : می شه کسی این برنامه رو توضیح بدهد؟لطفااااااا

                نوشته اصلی توسط sky_star
                unsigned char buff[14],counter=0,showlcd[20],flag=0,cardnumber=0,rightflag=0,c=0,counterled=0, usartcounter=0,mainflag=0,i=0;
                eeprom unsigned char card1[14],card2[14],card3[14],card4[14],card5[14],card6[14],card7[14],card8[14],card9[14],card10[14];
                اگر یک مقاله اموزشی می شناسید یا یک کتاب خوب لطفا معرفی کنید. :read:
                خوب در همین ابتدای برنامه buff,usartcounterوcounterledچیست؟ چرا برای تعریف کارتها از eeprom استفاده کرده ایم؟
                چرا برای تعریف کارتها از eeprom استفاده کرده ایم؟ برای ذخیره ی اطلاعات در حین اجرای برنامه یا باید از Stack استفاده کنیم که محدودیت FILO داریم . از
                eeprom استفاده کردیم تا اطلاعات را ذخیره کنیم. راه دیگر تعریف تعداد زیادی متغیر در flash است که حافظه ی فلش را بی دلیل از بین می برد و همچنین مهمتریییییین دلیل....... ( وقتی میکرو خاموش شد اطلاعات از بین نروند. اطلاعات کارت ها همیشه باید ذخیره شده باشند و با ریست میکرو از بین نروند) :read:

                دیدگاه

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