اطلاعیه

Collapse
No announcement yet.

ارتباط سریال با FT232RL

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

    ارتباط سریال با FT232RL

    سلام دوستان
    من یه پروژه با آی سی FT232RL و میکرو انجام دادم که اینجا میذارم تا سایر دوستان استفاده کنن و در ادامه یه سوال دارم خواهشم اینه دوستانی که کار کردن کمک کنن
    این پروژه ابتدا یک دیتا به PC ارسال میکنه سپس میتونید هر کاراکتر کی بردو رو LCD که به میکرو متصل است ببیند و با Enter به خط بعد رفته و با ESC صفحه را پاک میکند.
    سوال: چه طور میشه جوییستک (فلش های بالا و پایین و چپ وراست روی کی برد) و Backspace رو فعال کرد؟ به نحوی که با فلش ها به سطرو ستون دلخواه در LCD رفته و کاراکتر مربوطه را پاک کرد؟؟؟؟
    کد:
    #include <mega16.h>
    #include <delay.h>
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>
    
    // Standard Input/Output functions
    #include <stdio.h>
    char c;
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A 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 
    PORTA=0x00;
    DDRA=0x00;
    
    // 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=0x00;
    DDRC=0x00;
    
    // 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: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 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: Timer 2 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;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 1200
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // LCD module initialization
    lcd_init(16);
    
       #asm("sei")
        lcd_gotoxy(3,0); 
        lcd_putsf("scaning");
         delay_ms (500);
         lcd_putsf(".");
         delay_ms (600);
         lcd_putsf(".");
         delay_ms (700);
         lcd_putsf(".\n");      
       
        printf("This Program Was Produced By Anchornic.ir (S.P.Hosseini) \n "); 
        printf("Waiting...\n"); 
        putchar(0x33);
        printf("\n");
        delay_ms(1100);
        
        putchar(0x32);
        printf("\n");
        delay_ms(1100);
        
        putchar(0x31);
        printf("\n");
        delay_ms(1100); 
        printf("\n"); 
         
       lcd_gotoxy(0,1);
      _lcd_ready();
      _lcd_write_data(0x0d);
    
    while (1)
       {
       c=getchar();
    
        if (c==27) 
        {
          lcd_clear();
          lcd_gotoxy(0,0);
          _lcd_ready();
          _lcd_write_data(0x0d);
          goto s1;
        }
          if (c==13) 
            {
             lcd_gotoxy(0,1);
             goto s1;
             }
             
       lcd_putchar(c);
       s1:
    
       }; 
    }

    #2
    پاسخ : ارتباط سریال با FT232RL

    باید با کدهای اسکی مربوط به اون کلید ها کار کنی
    گفت که دیوانه نهی لایق این خانه نهی

    دیدگاه


      #3
      پاسخ : ارتباط سریال با FT232RL

      کد اسکی Backspace 8 و فلش ها هم 37،38،39،40 هستش اما با این که چه جوری تعریفش کنم و تو LCD آدرس مربوطه رو بدم تا به کاراکتر مربوطه بره و اون قسمت رو که میخوام پاک کنه مشکل دارم !!!!

      دیدگاه


        #4
        پاسخ : ارتباط سریال با FT232RL

        ببین یه رشته تعریف کن و همه مقادیرش رو صفر کن. حالا زمانی که یک کاراکتر دریافت میکنی چک کن اگه عدد یا حرف بود تو اولین خانه ای که صفر بود ، بریز.
        حالا اگه 8 بود آخرین کاراکتر غیر صفر رو صفر کن و روی السیدی نمایش بده
        گفت که دیوانه نهی لایق این خانه نهی

        دیدگاه


          #5
          پاسخ : ارتباط سریال با FT232RL

          دوست عزیز اینی که میگی فارسیش قابل فهمه اما یه زحمت بکش با برنامه نویسی یه مثال بزن تا متوجه شم
          مرسی

          دیدگاه


            #6
            پاسخ : ارتباط سریال با FT232RL

            آقا بین این 55 بازدید یعنی کسی نیست مارو کمک کنه ؟؟؟؟!!!!!!!

            دیدگاه


              #7
              پاسخ : ارتباط سریال با FT232RL

              حالا حتما کد آمادش رو باید بنویسه بنده خدا؟ :biggrin:
              یه ماتریس یا همونطوری که دوستمون گفت یه رشته تعریف کن و با توجه به کد اسکی دریافتی ایندکس فعلی ماتریس رو کم کن. مثلا اینجوری:
              کلید راست: col+1
              کلید چپ: col-1
              کلید پایین: row+1
              و الی آخر....
              یه کم تلاش کنی کدش رو مینویسی، مشکلی بود هستیم! :smile: :nerd:
              زندگی یعنی لذت یاد گرفتن و یاد دادن

              دیدگاه


                #8
                پاسخ : ارتباط سریال با FT232RL

                کلی تلاش کردم که اینو نوشتم دیگه :cry:
                کد برنامه رو نمیخوام مثال میخوام :smile:

                دیدگاه


                  #9
                  پاسخ : ارتباط سریال با FT232RL

                  مثال که چیکار کنه؟
                  زندگی یعنی لذت یاد گرفتن و یاد دادن

                  دیدگاه


                    #10
                    پاسخ : ارتباط سریال با FT232RL

                    که همون جور که شما و دوستان گفتید توش یه رشته تعریف بشه و اینکه چه جوری تو حلقه از این رشته استفاده کنم تا بشه مثلا با Backspace کاراکتر قبلی رو پاک کرد :sad:

                    دیدگاه

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