اطلاعیه

Collapse
No announcement yet.

راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

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

    راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

    سلام دوستان ، من میخوام بروژه ای به شرح زیر بسازم :

    با استفاده از lcd تاچ 3.2 اینچ و چیپ ssd1289 متنی *تایپ بشه *و در میکرو *عمل ذخیره سازی *متن انجام بشه

    مراحل کار:

    یه عکس کیبرد نمایش بدم (در قسمت پایین lcd) (اینو بلدم)

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

    در قسمت بالای lcd یه کادر قرار داده بشه و متنی که درحال تایپ شدن هست رو در کادر بالا نشون بده (چه جوری)؟؟؟؟؟؟

    بعد متن مورد نظر در یکی از حافظه های میکرو ذخیره بشه (چه جوری)؟؟؟؟؟؟

    و روی lcd کارکتری نمایش داده بشه (اینم بلدم)؟؟؟؟

    تشکر
    دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

    #2
    پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

    دوستان خواهش میکنم کمک کنید :angry:

    تا الان تونستم فقط lcd رو روشن کنم و یه عکس نمایش بدم. :wow:

    کتابخانه ای که استفاده میکنم یه کمی ناقصه(مثلان تابع وارد کردن کاراکتر نداره)این تابع رو که اضافه میکنم کامپایلر ارور میده.----> Linker error: global RAM variables size: 1554 byte is too large

    یه مشکل دیگه هم دارم که عکس با رزولیشن 240*320 نمیتونم نمایش بدم چون حجمش خعلی میره بالا و میکرو جواب نمیده(از mmc نمیخوام استفاده کنم)

    کار با تاچ رو نمیدونم چطوریه . چطور پایه های مربوط به تاچ رو وصل کنم ؟؟؟

    دوستان کمک کنید ممنون میشم.
    دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

    دیدگاه


      #3
      پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

      سلام
      من مشابه این پروژه رو خیلی وقت پیش انجام دادم و حدود 3 ماه ازم وقت گرفت! ولی چیپ السیدی من فرق داشت
      چیزی که الان به ذهنم میرسه اینه که کیبورد رو میتونین به جای عکس، با کشیدن مربع و نوشتن اعداد وسطش نشون بدین (ما این کارو کردیم برای فرار از نشون دادن عکس)
      برای کار کردن با تاچ اسکرین هم، یه مدار جانبی کوچیک داره که روی بردی که از ECA بخرین، هست و با وصل کردن پایه هاش به A/D میکرو و کالیبره کردنش، میتونین باهاش کار کنین
      نشون دادن متن در حال تایپ، کاری نداره ولی اگه بخوائین مثل smart phone ها باشه (ما شبیه صفحه کلید xperia زدیم) یکم کار میبره که سرعت تایپ رو تنظیم کنین و کلمه ها منقطع نشن
      یه سوالی هم برام پیش اومد! چرا السیدی کاراکتری؟! پورت اضافه دارین روی میکروتون؟ خب همون السیدی رنگی کافی نیست؟

      برای تمام مواردی که گفتم، فروم های مرتبطشون توی ECA هست، اگه پیدا نکردین، بگین بهتون لینک بدم

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

      (عبدالرضا کشاورز)

      دیدگاه


        #4
        پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

        اگر فایلی از پروژه تون دارید بزارید ممنون میشم.

        من نمیخوام فقط عدد بنویسم باید جمله تایپ کنم و ذخیره کنم (حتی به صورت فارسی) پس نیاز به یک کیبرد (شاید با عکس ) نیاز دارم.

        هیچ برد خاصی همراه السیدی نیست. فقط خوبیه السیدی اینه که به صورت ماژول هست و پایه های x و y مربوط به تاچ مشحص هست

        الان یه مشکل دارم هست که تو وصل کردن پایه های تاچ یک پایه باید hz باشه و من نمیدونم چجوری؟



        دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

        دیدگاه


          #5
          پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

          hz ینی به چیزی وصل نباشه. منظورتون رو نفهمیدم
          یه کد برای خوندن اعداد تاچ السیدی برای کدویژن آخر این پست میذارم
          ما یه متنی رو با کیبوردی شبیه xperia تایپ میکردم و با hmtr به یه برد مشابه میفرستادیم
          نیازی نداشتیم ذخیره ش کنیم و کیبورد رو هم با مستطیلهای توخالی که توشون حروف انگلیسی رو نوشته بودیم طراحی کرده بودیم
          کدمون کامنت گذاری نشده و حتی خودم هم احتمالا ازش سر در نمیارم اگه دوباره بخونم، بنابراین دادنش براتون فایده ای نخواهد داشت

          اگه بازم سوال دیگه داشتین، در خدمتم

          .
          کد:
          /*****************************************************
          This program was produced by the
          CodeWizardAVR V2.05.3 Standard
          Automatic Program Generator
          © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
          http://www.hpinfotech.com
          
          Project : 
          Version : 
          Date  : 7/15/2013
          Author : NILOOFAR
          Company : 
          Comments: 
          
          
          Chip type        : ATmega32A
          Program type      : Application
          AVR Core Clock frequency: 8.000000 MHz
          Memory model      : Small
          External RAM size    : 0
          Data Stack size     : 512
          *****************************************************/
          
          #include <mega32a.h>
          #include <stdio.h>
          #include <delay.h>
          #include <alcd.h>
          
          #define ADC_VREF_TYPE 0x20
          
          
          unsigned char read_adc(unsigned char adc_input)
          {
          ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
          delay_us(10);
          ADCSRA|=0x40;
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          return ADCH;
          }
          
          
          void main(void)
          {
            int x,y;
            char strx[16];
            char stry[16];
            
          PORTA=0x00;
          DDRA=0x00;
          
          PORTB=0x00;
          DDRB=0x00;
          
          PORTC=0x00;
          DDRC=0x00;
          
          DDRD=0x00;
          
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;
          
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
          
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;
          
          MCUCR=0x00;
          MCUCSR=0x00;
          
          TIMSK=0x00;
          
          UCSRB=0x00;
          
          ACSR=0x80;
          SFIOR=0x00;
          
          ADMUX=ADC_VREF_TYPE & 0xff;
          ADCSRA=0x83;
          
          SPCR=0x00;
          
          TWCR=0x00;
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          while (1)
             {
             //pina.0-> x+
             //pina.1->x-
             //pina.2->y+
             //pina.3->y-
             
              DDRA= 0xF3;
              PORTA.0= 0;
              PORTA.1=1;
              x = read_adc(2);
              DDRA= 0xFC;
              PORTA.2= 0;
              PORTA.3=1;
              y = read_adc(0);
              sprintf(strx, "%d", x);
              sprintf(stry, "%d", y);
              lcd_gotoxy(0,0);
              lcd_puts(strx);
              lcd_gotoxy(0,1);
              lcd_puts(stry); 
              delay_ms(125);
              lcd_clear();
             }
          }
          قامت انسان با لباس انسانیت شکل می گیرد،
          والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

          (عبدالرضا کشاورز)

          دیدگاه


            #6
            پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

            دوستان برنامه من مشکل داره بخش ADC رو نمیتونم راه بندازم. برای راه اندازی تاچ با ADC نیاز به یک سری دستور العمل هست که من نمیتونم جواب بگیرم دوستان اگر کسی میتونه این کد رو اصلاح کنه

            کد:
            #include <mega32a.h>
            #include <delay.h>
            
            #include "SSD1289.h"
            #define LANDSCAPE
            
            #define ADC_VREF_TYPE 0x00
            
            // Read the AD conversion result
            unsigned int read_adc(unsigned char adc_input)
            {
            ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
            // Delay needed for the stabilization of the ADC input voltage
            delay_us(10);
            // Start the AD conversion
            ADCSRA|=0x40;
            // Wait for the AD conversion to complete
            while ((ADCSRA & 0x10)==0);
            ADCSRA|=0x10;
            return ADCW;
            }
            
            
            
            void main(void)
            {
             int i,j,x; 
            int Temp_adcY,Temp_adcX;
             
             
            // ADC initialization
            // ADC Clock frequency: 1000.000 kHz
            // ADC Voltage Reference: AREF pin
            ADMUX=ADC_VREF_TYPE & 0xff;
            ADCSRA=0x83;
             
            lcd_init(); 
              
              DDRB=0xff;
              DDRC=0xff;
              DDRD=0xff; 
              
              
              lcd_clear();
              
              lcd_gotoxy(100,50);
              lcd_background_color(YELLOW);
              lcd_puts("Wellcome",BLACK,GREEN);
               
                    
              
              while(1)
              {
              DDRA.0=1;
              PORTA.0=1;
              delay_ms(100);
              PORTA.0=0;
              delay_ms(100);
              lcd_clear();
              lcd_background_color(BLUE);
              
              }
              /* 
              while(1) { 
                    // read x ------------------------------------ 
                    
            			DDRA.3=1; // X+ OUTPUT
                   
                  PORTA.3=1; // X+ 5 VOLT
                  PORTA.1=0;  // X- 0 VOLT
                  
                  DDRA.0=0;  // Y- INPUT
                  PORTA.0=0;  // Y- 0 VOLT
                  
                   Temp_adcX=read_adc(2);
                     
                    //read y-------------------------------------
                  DDRA.2=1;  // Y+ OUTPUT
                  
                  PORTA.2=1;  // Y+ 5 VOLT
                  PORTA.0=0;  // Y- 0 VOLT
                  
                  DDRA.1=0;   // X+ INPUT 
                  PORTA.1=0;  // X- 0 VOLT
                  
                  Temp_adcY= read_adc(3);        
                    
                    
                    
                   lcd_clear();
                   lcd_background_color(CYAN);
                   delay_ms(100);
                   lcd_clear(); 
                   lcd_putchar(Temp_adcY,BLACK,BLUE);
                   delay_ms(100);
                   lcd_gotoxy(100,100);
                   lcd_putchar(Temp_adcX,BLACK,BLUE); 
            			 }
            		  */
              
              
            }
            دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

            دیدگاه


              #7
              پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

              اول:
              نکات کدی که نوشتید:
              1. هیچ جایی از کدتون پین 1 از پورت A رو خروجی نکردید و برای اولین بار توی while بهش مقدار دادین (بهتره که هیچ چیزی رو به مقدار پیش فرضش رها نکنید، مخصوصا اینجا که قراره از پورت A هم به عنوان I/O و هم به عنوان A/D استفاده کنین)
              یادآوری: با مقداردهی رجیستر DDR ورودی/خروجی بودن و با مقداردهی رجیسترهای PORT و PIN به ترتیب به بافرهای خروجی و ورودی دسترسی پیدا میکنین
              2. الگوریتم خوندن از صحه لمسی رو اشتباه پیاده سازی کردین

              دوم:
              الگوریتم این شکلیه:
              الف) پایه های +x و -x رو خروجی کرده و به ترتیب روشون مقادیر 0 و 1 رو میریزین
              ب)مقدار بعد x رو از پایه +y میخونید
              ج)پایه های +y و -y رو خروجی کرده و به ترتیب روشون مقادیر 0 و 1 رو میریزین
              د)مقدار بعد y رو از پایه +x میخونید

              بنابراین پیشنهاد میکنم از قسمت while ی که توی پست قبلیم گذاشتم، استفاده کنین

              موفق باشید :job:
              قامت انسان با لباس انسانیت شکل می گیرد،
              والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

              (عبدالرضا کشاورز)

              دیدگاه


                #8
                پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                الان یه مقدار میگیره اما ثابته و هیچ تغییری نمیکنه.

                من فکر میکنم مشکل از پیکربندی ADC باشه تو پیوست مدار ADC رو فرستادم ببینید . اگه ممکنه کد مربوط به ADC رو بهم بدید



                کد:
                #include <mega32a.h>
                #include <delay.h>
                #include <stdlib.h>
                #include "SSD1289.h"
                #define ADC_VREF_TYPE 0x00
                // Read the AD conversion result
                unsigned int read_adc(unsigned char adc_input)
                {
                ADMUX=(adc_input) | (ADC_VREF_TYPE & 0xff);
                // Delay needed for the stabilization of the ADC input voltage
                delay_us(10);
                // Start the AD conversion
                ADCSRA|=0x40;
                // Wait for the AD conversion to complete
                while ((ADCSRA & 0x10)==0);
                ADCSRA|=0x10;
                return ADCW;
                }
                
                
                
                int xx,yy;
                char strx[15];
                char stry[15];
                
                void main(void)
                {  
                
                  char strx[6];
                  char stry[5];
                 int x,y;  
                int Temp_adcY,Temp_adcX;
                
                lcd_init(); 
                  
                  
                 ADMUX=(ADC_VREF_TYPE & 0xff);
                ADCSRA=0x83; 
                  
                    
                  while(1)          
                  {   
                    //pina.0-> x+
                   //pina.1->x-
                   //pina.2->y+
                   //pina.3->y-
                   
                    DDRA= 0xF3;
                    PORTA.0= 0;
                    PORTA.1=1;
                    x = read_adc(2);
                    DDRA= 0xFC;
                    PORTA.2= 0;
                    PORTA.3=1;
                    y = read_adc(0);
                    itoa(x,strx);
                    itoa(y,stry);
                    lcd_gotoxy(0,0);
                    lcd_puts(strx,BLACK,RED);
                    lcd_gotoxy(0,1);
                    lcd_puts(stry,BLACK,RED); 
                    delay_ms(125);
                    lcd_clear();
                    
                    
                  }
                 
                  
                  
                }
                دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                دیدگاه


                  #9
                  پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                  مطمئن شدم مشکل از پیکر بندی رجیستر های adc هست چون ورودی های adc رو هم از مدار جدا کردم مقادیر تغییر نکرد.

                  اگه ممکنه طبق سخت افزار بالا کد adc رو بهم بدید :angry:
                  دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                  دیدگاه


                    #10
                    پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                    مشخصه که باید اشکال ازمدار A/Dتون باشه! تا جایی که میدونم، AVCC تغذیه مدار داخلی ADCه و باید حداقل 3.3 ولت باشه تا این peripheral کارکنه
                    بنابراین نباید زمین شه
                    مدار جانبی AREF هم لزومی نداره... در واقع من تا حالا توی هیچ پروژه ای همچین کاری نکردم و همشون جواب دادن... منظورم اینه که این پین رو هم میتونید مستقیم به تغذیه 3.3 ولت بدید

                    برای کد هم، کل کدی که دادم رو یه بار پروگرم کنید با السیدی کاراکتری 2 در 16 (البته میتونید با تغییرات جزئی برای السیدی رنگیتون درستش کنین) و اگه کار نکرد، خبر بدین... ولی من با همین کد السیدیم رو کالیبره کردم
                    قامت انسان با لباس انسانیت شکل می گیرد،
                    والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

                    (عبدالرضا کشاورز)

                    دیدگاه


                      #11
                      پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                      بله حق با شما بود . avcc و aref رو به 3.3 ولت وصل کردم درست شد. البته الان فقط اعداد تغییر میکنه. عدد ها چرا ثابت نمیشه؟؟؟؟

                      حالا رو هر نقطه ای که دست میزارم مشخصه که یه مقدار میده اما وقتی دستمو بردارم عددا خود به خود تغییر میکنه.

                      برای کالیبره کردن باید چه کار کنم .

                      کمکم یه کیبرد هم باید اضافه کنم ( فک کنم به صورت عکس ). درباره این هم اگه اطلاعاتی دارید توضیحاتی بدید.

                      تشکر بابت راهنمایی ها
                      دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                      دیدگاه


                        #12
                        پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                        دوستان الان همه چی ایده ال ه ! فقط مقدار Y ثابت نمیشه ببینید کد مشکلی نداره::

                        کد:
                         DDRA.0=1;    //-x
                           DDRA.1=0;    //y
                           DDRA.2=1;    //x
                           DDRA.3=0;    //-y
                           PORTA.0=0;
                           PORTA.1=0;
                           PORTA.2=1;
                           PORTA.3=0;
                            
                           y=read_adc(1); 
                           y=y/4.26;  
                           itoa(y,stry); 
                           
                            lcd_gotoxy(0,1);
                           lcd_puts("y= ",RED,BLACK);
                           lcd_puts(stry,RED,BLACK);
                           
                           DDRA.0=0;
                           DDRA.1=1;
                           DDRA.2=0;
                           DDRA.3=1;
                           PORTA.0=0;
                           PORTA.1=1;
                           PORTA.2=0;
                           PORTA.3=0; 
                           x=read_adc(2);
                           x=x/3.19;  
                           itoa(x,strx);  
                          
                           lcd_gotoxy(0,0);   
                           lcd_puts("x= ",RED,BLACK);
                           lcd_puts(strx,RED,BLACK);
                        به ترتیب خواندن مقادیر X و Y دقت کنید... وقتی جای این تا بلوک رو عوض میکنم مینی اول X رو بگیره بعد Y با این برعکس میشه یعنی مقدار X تغییر میکنه و ثابت نمیشه!!!

                        به نظر شما مشکل از چیه ؟؟

                        اشتباه پیکربند کردن ADC ؟؟؟؟

                        دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                        دیدگاه


                          #13
                          پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                          سلام دوستان.
                          کیبرد رو طراحی کردم و طبق مختصات مشخص میتونم حروف رو تایپ کنم. گاهی اوقات حروف به اشتباه تایپ میشن (امکان داره دلیلش نویز یا فرکانس کاری باشه؟؟؟) مختصات به صورت صحیح داده شده.
                          یه مشکل دیگه هم هست و اون اینه که نمیدونم چطور یه حرفی رو که تایپ کردم پاک کنم(back space). ؟؟؟؟؟؟

                          کار بعدی که باید انجام بدم .ذخیره متنی که تایپ میشه است. به نظر خودم باید حروفی که تایپ میشه رو یکی یکی داخل خانه های ارایه ذخیره کنم ودر صورت درخواست واکشی بشن و نمایش داده بشن.

                          دوستان نظری دارید بفرمایید.



                          کد:
                          #include <mega32a.h>
                          #include <delay.h>
                          #include <stdlib.h>
                          #include "SSD1289.h"
                          
                          #define ADC_VREF_TYPE 0x20
                          
                            int x,y,p;
                            char out[20];
                            int i,j=7,k=3;  
                            int xx,yy;
                          char strx[15];
                          char stry[15];
                          char strj[15];
                          char strk[15];
                            
                          unsigned char read_adc(unsigned char adc_input)
                          {
                          ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
                          delay_us(10);
                          ADCSRA|=0x40;
                          while ((ADCSRA & 0x10)==0);
                          ADCSRA|=0x10;
                          return ADCH;
                          }
                          void grid(){
                           //YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
                                 lcd_draw_line(22,238,22,320,BLACK);   
                                 lcd_draw_line(44,238,44,320,BLACK); 
                                 lcd_draw_line(66,238,66,320,BLACK); 
                                 lcd_draw_line(88,238,88,320,BLACK); 
                                 lcd_draw_line(110,238,110,320,BLACK); 
                                 lcd_draw_line(132,238,132,320,BLACK); 
                                 lcd_draw_line(154,238,154,320,BLACK); 
                                 lcd_draw_line(176,238,176,320,BLACK); 
                                 lcd_draw_line(198,238,198,320,BLACK); 
                                 lcd_draw_line(220,238,220,320,BLACK); 
                                 //-------------------------------------
                                 //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                                 lcd_draw_line(0,238,240,238,BLACK);   
                                 lcd_draw_line(0,266,240,266,BLACK); 
                                 lcd_draw_line(0,293,240,293,BLACK);
                                
                                 lcd_gotoxy(1,239);
                                 lcd_putchar('Q',BLACK,WHITE);
                                 lcd_gotoxy(4,239);
                                 lcd_putchar('W',BLACK,WHITE);
                                 lcd_gotoxy(7,239);
                                 lcd_putchar('E',BLACK,WHITE);
                                 lcd_gotoxy(9,239);
                                 lcd_putchar('R',BLACK,WHITE);
                                 lcd_gotoxy(12,239);
                                 lcd_putchar('T',BLACK,WHITE);
                                 lcd_gotoxy(15,239);
                                 lcd_putchar('Y',BLACK,WHITE);
                                 lcd_gotoxy(18,239); 
                                 lcd_putchar('U',BLACK,WHITE);
                                 lcd_gotoxy(20,239);
                                 lcd_putchar('I',BLACK,WHITE);
                                 lcd_gotoxy(23,239);
                                 lcd_putchar('O',BLACK,WHITE);
                                 lcd_gotoxy(25,239);
                                 lcd_putchar('P',BLACK,WHITE);
                                 lcd_gotoxy(28,239);
                                 lcd_putchar('(',BLACK,WHITE);  
                                
                                 lcd_gotoxy(1,241);
                                 lcd_putchar('A',BLACK,WHITE);
                                 lcd_gotoxy(4,241);
                                 lcd_putchar('S',BLACK,WHITE);
                                 lcd_gotoxy(7,241);
                                 lcd_putchar('D',BLACK,WHITE);
                                 lcd_gotoxy(9,241);
                                 lcd_putchar('F',BLACK,WHITE);
                                 lcd_gotoxy(12,241);
                                 lcd_putchar('G',BLACK,WHITE);
                                 lcd_gotoxy(15,241);
                                 lcd_putchar('H',BLACK,WHITE);
                                 lcd_gotoxy(18,241); 
                                 lcd_putchar('J',BLACK,WHITE);
                                 lcd_gotoxy(20,241);
                                 lcd_putchar('K',BLACK,WHITE);
                                 lcd_gotoxy(23,241);
                                 lcd_putchar('L',BLACK,WHITE);
                                 lcd_gotoxy(25,241);
                                 lcd_putchar(';',BLACK,WHITE);
                                 lcd_gotoxy(28,241);
                                 lcd_putchar(')',BLACK,WHITE); 
                                
                                  lcd_gotoxy(1,243);
                                 lcd_putchar('Z',BLACK,WHITE);
                                 lcd_gotoxy(4,243);
                                 lcd_putchar('X',BLACK,WHITE);
                                 lcd_gotoxy(7,243);
                                 lcd_putchar('C',BLACK,WHITE);
                                 lcd_gotoxy(9,243);
                                 lcd_putchar('V',BLACK,WHITE);
                                 lcd_gotoxy(12,243);
                                 lcd_putchar('B',BLACK,WHITE);
                                 lcd_gotoxy(15,243);
                                 lcd_putchar('N',BLACK,WHITE);
                                 lcd_gotoxy(18,243); 
                                 lcd_putchar('M',BLACK,WHITE);
                                 lcd_gotoxy(20,243);
                                 lcd_putchar(',',BLACK,WHITE);
                                 lcd_gotoxy(23,243);
                                 lcd_putchar('.',BLACK,WHITE);
                                 lcd_gotoxy(25,243);
                                 lcd_putchar('?',BLACK,WHITE);
                                 lcd_gotoxy(28,243);
                                 lcd_putchar('!',BLACK,WHITE); 
                                 
                                 lcd_gotoxy(7,1); 
                                 lcd_puts("typed text : ",BLACK,WHITE);
                                 lcd_draw_rectangle(50,40,185,100,BLACK); 
                                 }
                                 
                          void xy(){
                          
                             DDRA.0=0;
                             DDRA.1=1;
                             DDRA.2=0;
                             DDRA.3=1;
                             PORTA.0=0;
                             PORTA.1=1;
                             PORTA.2=0;
                             PORTA.3=0; 
                             x=read_adc(2);
                             x=x/3.19;  
                             itoa(x,strx);  
                             lcd_gotoxy(0,0);    
                                 
                             lcd_puts("Y= ",RED,WHITE);
                             lcd_puts(stry,RED,WHITE);
                             
                              
                             DDRA.0=1;    //-x
                             DDRA.1=0;    //y
                             DDRA.2=1;    //x
                             DDRA.3=0;    //-y
                             PORTA.0=0;
                             PORTA.1=0;
                             PORTA.2=1;
                             PORTA.3=0;
                              
                             y=read_adc(1); 
                             y=y/4.26;  
                             itoa(y,stry); 
                             lcd_gotoxy(0,1); 
                             lcd_puts("X= ",RED,WHITE);
                             lcd_puts(strx,RED,WHITE); 
                             
                              }
                          fa(){
                          lcd_clear();
                          lcd_background_color(BLUE);
                          
                          while(1){
                          xy();
                          if((y>10 && y<20 && x<40 && x>34));
                          
                           }
                          
                           }
                          
                          
                          void en(){
                          
                          
                                lcd_clear();      
                                lcd_background_color(YELLOW); 
                                 
                                grid();
                                 
                                
                                 
                            while (1)
                             {     
                                 
                             xy();  
                             
                             
                          
                              //-----------------------------------------------
                               
                          
                               
                               if(j==22) {
                               j=7;
                               k++;
                               if(k==6)
                               k=3;
                                }   
                                
                                if(y>50 && x> 50)
                                for(p=0;p<(k*j);p++){
                                lcd_gotoxy(3,7);
                                lcd_putchar(' ',BLACK,YELLOW);
                                }
                                
                               lcd_gotoxy(j,k);
                               if(y>38 && y<51 && x<40 && x>34){
                               j++;
                               } 
                           
                               
                               if( y==10 && x<25 && x>19 ){        
                               lcd_putchar('Q',BLACK,WHITE);
                                j++; 
                               }  
                               if( y>11 && y<15 && x<25 && x>19){        
                               lcd_putchar('W',BLACK,WHITE);
                               delay_ms(20);
                               j++;
                               } 
                             
                               if(x<25 && x>19 && y<19 && y>15){        
                               lcd_putchar('E',BLACK,WHITE);
                               j++; 
                               }  
                                if(x<25 && x>19 && y<24 && y>19 ){        
                               lcd_putchar('R',BLACK,WHITE);
                                j++;  
                               } 
                              
                               if(x<25 && x>19 && y>23 && y<27){         
                               lcd_putchar('T',BLACK,WHITE);
                                j++;
                               } 
                             
                               if(x<25 && x>19 && y>28 && y<32){        
                               lcd_putchar('Y',BLACK,WHITE);
                               j++;
                               }
                              
                               if(x<25 && x>19 && y>32 && y<37){        
                               lcd_putchar('U',BLACK,WHITE);
                               j++; 
                               } 
                              
                               if(x<25 && x>19 && y<41 && y>37){        
                               lcd_putchar('I',BLACK,WHITE);
                               j++;
                               } 
                              
                               if(x<25 && x>19 && y<45 && y>41){        
                               lcd_putchar('O',BLACK,WHITE);
                               j++; 
                               }
                               
                               if(x<25 && x>19 && y<49 && y>45 ){        
                               lcd_putchar('P',BLACK,WHITE);
                               j++; 
                               }  
                               
                               if(x<25 && x>19 && y<52&& y>49){        
                               lcd_putchar('(',BLACK,WHITE);
                               j++; 
                               }   
                              //---------------------------------------------- 
                              
                               //-----------------------------------------------
                                
                               
                               if( y==10 && x<18 && x>14 ){        
                               lcd_putchar('A',BLACK,WHITE);
                                j++; 
                               }  
                               
                               if( y>11 && y<15 && x<18 && x>14){        
                               lcd_putchar('S',BLACK,WHITE);
                               j++;
                               } 
                               
                               if(x<18 && x>14 && y<19 && y>15){        
                               lcd_putchar('D',BLACK,WHITE);
                               j++; 
                               }  
                                if(x<18 && x>14 && y<23 && y>19 ){        
                               lcd_putchar('F',BLACK,WHITE);
                                j++;  
                               } 
                               
                               if(x<18 && x>14 && y>23 && y<27){         
                               lcd_putchar('G',BLACK,WHITE);
                                j++;
                               } 
                               
                               if(x<18 && x>14 && y>28 && y<32){        
                               lcd_putchar('H',BLACK,WHITE);
                               j++;
                               }
                              
                               if(x<18 && x>14 && y>32 && y<37){        
                               lcd_putchar('J',BLACK,WHITE);
                               j++; 
                               } 
                               
                               
                               if(x<18 && x>14 && y<41 && y>37){        
                               lcd_putchar('K',BLACK,WHITE);
                               j++;
                               } 
                              
                               if(x<18 && x>14 && y<45 && y>41){        
                               lcd_putchar('L',BLACK,WHITE);
                               j++; 
                               }
                              
                               if(x<18 && x>14 && y<49 && y>45 ){        
                               lcd_putchar(';',BLACK,WHITE);
                               j++; 
                               }  
                               
                               if(x<18 && x>14 && y<52&& y>50){        
                               lcd_putchar(')',BLACK,WHITE);
                               j++; 
                               }   
                              //---------------------------------------------- 
                              //---------------------------------------------- 
                              
                               //-----------------------------------------------
                               
                               
                               if( (y==10 || y==11) &&( x==10 || x==11) ){        
                               lcd_putchar('Z',BLACK,WHITE);
                                j++; 
                               }  
                              
                               if( y>11 && y<15 && x<9 && x>14){        
                               lcd_putchar('X',BLACK,WHITE);
                               j++;
                               } 
                               
                               if(x<9 && x>14 && y<19 && y>15){        
                               lcd_putchar('C',BLACK,WHITE);
                               j++; 
                               }  
                                if(x<18 && x>14 && y<23 && y>19 ){        
                               lcd_putchar('V',BLACK,WHITE);
                                j++;  
                               } 
                              
                               if(x<9 && x>14 && y>23 && y<27){         
                               lcd_putchar('B',BLACK,WHITE);
                                j++;
                               } 
                              
                               if(x<9 && x>14 && y>28 && y<32){        
                               lcd_putchar('N',BLACK,WHITE);
                               j++;
                               }
                              
                               if(x<9 && x>14 && y>32 && y<37){        
                               lcd_putchar('M',BLACK,WHITE);
                               j++; 
                               } 
                               
                               if(x<9 && x>14 && y<41 && y>37){        
                               lcd_putchar(',',BLACK,WHITE);
                               j++;
                               } 
                               if(x<9 && x>14 && y<45 && y>41){        
                               lcd_putchar('.',BLACK,WHITE);
                               j++; 
                               }
                               
                               if(x<9 && x>14 && y<49 && y>45 ){        
                               lcd_putchar('?',BLACK,WHITE);
                               j++; 
                               }  
                              
                               if(x<9 && x>14 && y<52 && y>50){        
                               lcd_putchar('!',BLACK,WHITE);
                               j++; 
                               }  
                               
                                
                              //----------------------------------------------
                             }    
                             }
                          
                           
                           
                           void init(); 
                                 
                           //---------------------main---------------
                          void main(void)
                          {  
                               
                          ADMUX=ADC_VREF_TYPE & 0xff;
                          ADCSRA=0x83;
                           
                           
                           lcd_init();  
                           
                           lcd_clear();
                               
                              lcd_gotoxy(5,10);
                              lcd_puts("wellcom to my project",GREEN,BLACK);
                              delay_ms(50); 
                              lcd_clear();
                              lcd_background_color(RED);
                          while (1)
                             {     
                                xy(); 
                                     
                                lcd_gotoxy(24,10); 
                                 lcd_puts("FA",BLACK,WHITE);
                                 lcd_draw_rectangle(158,155,236,185,BLACK); 
                                 lcd_gotoxy(6,10); 
                                 lcd_puts("EN",BLACK,WHITE);
                                 lcd_draw_rectangle(20,155,100,185,BLACK);    
                                 
                                 if(y>38 && y<51 && x<40 && x>34)
                                 fa();
                          
                                 if(y>10 && y<20 && x<40 && x>34)
                                 en();
                          
                                  }
                                 
                                
                           }   
                           //////////////////////////////////////////////////////////////////////   
                          void init()
                          {
                          
                          PORTA=0x00;
                          DDRA=0x00;
                          PORTB=0x00;
                          DDRB=0x00;
                          PORTC=0x20;
                          DDRC=0xFF;
                          PORTD=0x00;
                          DDRD=0xFF;
                          
                          
                          // Analog Comparator initialization
                          // Analog Comparator: Off
                          // Analog Comparator Input Capture by Timer/Counter 1: Off
                          ACSR=0x80;
                          SFIOR=0x00;
                          // ADC initialization
                          // ADC Clock frequency: 125.000 kHz
                          // ADC Voltage Reference: AREF pin
                          // ADC Auto Trigger Source: None
                          ADMUX=ADC_VREF_TYPE & 0xff;
                          ADCSRA=0x83;
                          }
                          دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                          دیدگاه


                            #14
                            پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                            چه پیشرفت عالی ای :applause:

                            برای backspace ما اینطوری فکر کردیم که به تعدادی که این کلید فشرده شده، برگردیم عقب و کاراکتر space (خالی) چاپ کنیم. البته خیلی راه جالبی نیست، ولی جواب داد
                            ضمن اینکه برای این راه حل، جای pointer ساختگی (با در نظر گرفتن spaceها) رو باید توی یه متغیر ذخیره کنید تا موقع تایپ، از ادامه آخرین حرفِ نمایش داده شده بنویسید (در واقع pointer ساختگی مساوی با تفاضل تعداد backspaceها از pointer اصلیه) :nerd:

                            برای ذخیره هم، ایده تون به نظر عملی میاد، فقط اینکه طول اون آرایه رو باید به اندازه کافی بزرگ بگیرید؛ ضمنا میتونید آرایه رو از نوع flash تعریف کنید تا روی حافظه flash میکروتون ذخیره بشن حروف

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

                            (عبدالرضا کشاورز)

                            دیدگاه


                              #15
                              پاسخ : راهنمایی پروژه تایپ متن با lcd تاچ 3.2 اینچ و چیپ ssd1289

                              سلام

                              مشکل بعدی و ان شاالله اخر من اینه که در زبان فارسی به LCD اضافه کنم

                              برای سایر چیپ ها فونت فارسی موجوده اما برای این LCD من چیزی پیدا نکردم و تلاش کردم که حداقل بتونم اون فونت ها رو تغییر بدم و برای این LCD استفاده کنم اما نتوتستم.



                              این قسمت انگلیسی هست که متن در کادر بالا تایپ میشه و با کلید save در یک ارایه ذخیره میشه و نمایش داده میشه و کلید clear برای پاک کردن متن از داخل ارایه است .
                              (همون طور که میبینید کلید space و backspace هم قرار دادم .فقط کلید packspace یک مشکل داره . که فقط تو هر سطری هستم میتونم اول سطر پاک کنم نمیتونم به سطر قبلی برم.



                              اینم بخش فارسی هست که کاملان ناقصه . حروف فارسی رو که نوشتم به این شکل در اومده. که دارم تلاش میکنم فونت فارسی رو اضافه کنم
                              دانشجو موذن جامعه است، اگر خواب بماند نماز امت قضا میشود.

                              دیدگاه

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