اطلاعیه

Collapse
No announcement yet.

مشکل در نمایش مقادیر متوالی در glcd

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

    مشکل در نمایش مقادیر متوالی در glcd

    سلام....خسته نباشید...

    برای پروژه ماشین حساب نیاز دارم تا با هربار زدن یک عدد از طریق کیپد مقدار اون عدد در glcd نمایش داده بشه...مثلا با 5 بار زدن 1 مقدار 11111 نمایش داده بشه...ولی نمیتونم...چندین بار حلقه های برنامه رو جابجا کردم...کانتر گذاشتم...ولی همون یدونه 1 شروع به حرکت میکنه...برنامه هم اینه:

    کد:
    #include <mega32.h>
    #include <delay.h>
    #include <math.h>
    // Graphic LCD functions
    #include <glcd.h>
    
    // Font used for displaying text
    // on the graphic LCD
    #include <font5x7.h>
    int i,j;
    char A[40];
    /////////////////////////////////////////////////////////////////////////////////////////
    void keyreader(void);
    void main (void)
    {
    GLCDINIT_t glcd_init_data;
    
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    DDRC=0x00;
    PORTC = 0xF0;
    PORTD=0x00;
    DDRD=0x00;
    
    glcd_init_data.font=font5x7;
    
    glcd_init(&glcd_init_data);
    glcd_outtextxy(0,28,"SCIENTIFIC CALCULATOR"); 
    delay_ms(100);
    glcd_clear();  
    
    keyreader();
    }
    /////////////////////////////////////////
    ////////////////////////////////////////
    void keyreader(void)
    {
    i=0;
    do{
    PORTC = 0xf0;
    
    if(PINC == 0xff){
    delay_ms(5);
    if(PINC == 0xff)
    A[i]=1;
    }
    glcd_outtextxy(i,0,"1");
    i++;
    }
    while(i<115);
    }

    و اون تیکه کدی که باعث خرابی میشه این هست :

    کد:
    
    void keyreader(void)
    {
    i=0;
    do{
    PORTC = 0xf0;
    
    if(PINC == 0xff){
    delay_ms(5);
    if(PINC == 0xff)
    A[i]=1;
    }
    glcd_outtextxy(i,0,"1");
    i++;
    }
    while(i<115);
    }
    مشکل زیاد شدیدی نیست...نیاز دارم اعداد به ترتیبی که در کیپد زده میشن روی GLCD نمایش داده بشه...اگر نمایش یک عدد مثل همین 1 رو بفهمم بقیه رو خودم انجام میدم...

    یه کمکی بکنید.

    اگه خواستید پروتئوسش رو هم براتون پلود میکنم...

    #2
    پاسخ : مشکل در نمایش مقادیر متوالی در glcd

    سلام
    واقعیتش من خیلی کدتون را نگاه کردم مشکلی نداشت شاید اگر فایل را پلود کنید بهتر باشه
    دکتر چمران در 1311 در تهران متولد شد
    وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
    او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

    دیدگاه


      #3
      پاسخ : مشکل در نمایش مقادیر متوالی در glcd

      ببخشید من انگار متوجه نشدم!
      این برنامه ای که شما نوشتید باید عدد یک را در 127 ستون نمایش بدهد.
      ولی اگر مشکل جای دیگه هست بگید.
      چون برنامه ی شما کیپد را اصلا اسکن نمی کند و فقط یک لحظه ی کوتاه مثلا 127 بار اسکن می کند که خیلی کمه ! اصلا برنامه از لحاض اسکن صفحه کلید دوچار مشکل هست.
      اولش من فکر کردم که شما می گویید عدد یک هیچ حرکتی نمی کند و فقط جای خودش ثابت است
      دکتر چمران در 1311 در تهران متولد شد
      وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
      او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

      دیدگاه


        #4
        پاسخ : مشکل در نمایش مقادیر متوالی در glcd

        نوشته اصلی توسط 011
        ببخشید من انگار متوجه نشدم!
        این برنامه ای که شما نوشتید باید عدد یک را در 127 ستون نمایش بدهد.
        ولی اگر مشکل جای دیگه هست بگید.
        چون برنامه ی شما کیپد را اصلا اسکن نمی کند و فقط یک لحظه ی کوتاه مثلا 127 بار اسکن می کند که خیلی کمه ! اصلا برنامه از لحاض اسکن صفحه کلید دوچار مشکل هست.
        اولش من فکر کردم که شما می گویید عدد یک هیچ حرکتی نمی کند و فقط جای خودش ثابت است
        ممنون...

        خیر باید برای 127 دفعه فشردن کلید 1 رشته ای 127 تائی از عدد 1 را نشان دهد ....همانطور که برای یکبار زدن کلید 1 یکبار و برای 5 بار زدن کلید 1 پنج بار عدد 1 یعنی 11111 را نمایش دهد...پروژه نیز طراحی یک ماشین حساب مهندسی است که هنوز در اول راهش هستم:

        فایل کلی پروژه به همراه پروتئوس را میذارم یه نگاهی بندازید....

        http://upload.tehran98.com/upme/uploads/5874a764c33760041.rar

        دیدگاه


          #5
          پاسخ : مشکل در نمایش مقادیر متوالی در glcd

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

          خیر باید برای 127 دفعه فشردن کلید 1 رشته ای 127 تائی از عدد 1 را نشان دهد ....همانطور که برای یکبار زدن کلید 1 یکبار و برای 5 بار زدن کلید 1 پنج بار عدد 1 یعنی 11111 را نمایش دهد...پروژه نیز طراحی یک ماشین حساب مهندسی است که هنوز در اول راهش هستم:

          فایل کلی پروژه به همراه پروتئوس را میذارم یه نگاهی بندازید....

          http://upload.tehran98.com/upme/uploads/5874a764c33760041.rar
          فایل دانلود نمی شود
          لینک کار نکرد
          دکتر چمران در 1311 در تهران متولد شد
          وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
          او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

          دیدگاه


            #6
            پاسخ : مشکل در نمایش مقادیر متوالی در glcd

            نوشته اصلی توسط 011
            فایل دانلود نمی شود
            لینک کار نکرد
            باشه...لینک رو عوض میکنم:

            http://uplod.ir/mwnzvtnp08ul/scientific_calculator_avr.rar.htm

            http://www.uplooder.net/cgi-bin/dl.cgi?key=c88c251deef3da51094dfc3ba7b3160c

            دیدگاه


              #7
              پاسخ : مشکل در نمایش مقادیر متوالی در glcd

              سلام
              مشکلاتی که گفتید خیلی زیاد هست من یکی از مشکلات را حل کردم
              مقدار ورودی مکان نما به صورت پیکسل هست و فونت ها به صورت 5 در 7 تعریف شده اند.
              یعنی برای جابهجا شدن از یک کاراکتر به کاراکتر بعدی باید گام 5 تایی برداریم نه یکی پس کد را باید به این صورت اصلاح کرد.
              کد:
              void keyreader(void)
              {
              i=0;
              do{
              PORTC = 0xf0;
              
              if(PINC == 0xff){
              delay_ms(5);
              if(PINC == 0xff)
              A[i]=1;
              }
              glcd_outtextxy(i,0,"1");
              i+=5;
              }
              while(i<115);
              }


              واقعیتش بهتره یک تابع اسکن صفحه کلید را بنویسید و بعد مقدار خروجی تابع اسکن را چاپ کنید تا بهتر بشه بهتون کمک کرد.
              دکتر چمران در 1311 در تهران متولد شد
              وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
              او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

              دیدگاه


                #8
                پاسخ : مشکل در نمایش مقادیر متوالی در glcd

                این کد را ببین
                اسکن keypad و نمایش روی GLCD:
                کد:
                #include <mega32.h>
                #include <glcd.h>
                #include <font5x7.h>
                #include <delay.h>
                #include <stdio.h>
                
                unsigned char key(void){
                unsigned char Row,Col,Temp,Result;
                
                 Col = PIND & 0xF0;
                  delay_ms(10);  
                  DDRD = 0xF0;
                  PORTD= 0x0F;
                  delay_ms(10);
                 Row = PIND & 0x0F;
                  Temp = Row | Col; 
                 
                 switch (Temp)
                 {
                  case 0b11101110:
                   Result =7;
                 break;
                  case 0b11011110:
                   Result =8;
                 break;
                  case 0b10111110:
                   Result =9;
                 break;
                  case 0b01111110:
                   Result =0; // Taghsim
                 break;  
                  case 0b11101101:
                   Result =4;
                 break;
                  case 0b11011101:
                   Result =5;
                 break;
                  case 0b10111101:
                   Result =6;
                 break;
                  case 0b01111101:
                   Result =0; // Zarb
                 break;  
                  case 0b11101011:
                   Result =1;
                 break;
                  case 0b11011011:
                   Result =2;
                 break;
                  case 0b10111011:
                   Result =3;
                 break;
                  case 0b01111011:
                   Result =0; // Menha
                 break;  
                  case 0b11100111:
                   Result =0; //on/c
                 break;
                  case 0b11010111:
                   Result =0; 
                 break;
                  case 0b10110111:
                   Result =0; // mosavi
                 break;
                  case 0b01110111:
                   Result =0; // Jamee
                 break;
                 }
                 
                 
                 delay_ms(10);
                 DDRD =0x0F;
                 PORTD=0xF0;  
                  
                 
                 return Result;
                }
                
                
                void main(void)
                {
                GLCDINIT_t glcd_init_data;
                char str;
                unsigned char KeyVal;
                 DDRD =0x0F;
                 PORTD=0xF0; 
                
                
                // Graphic LCD initialization
                // The KS0108 connections are specified in the
                // Project|Configure|C Compiler|Libraries|Graphic LCD menu:
                // DB0 - PORTA Bit 0
                // DB1 - PORTA Bit 1
                // DB2 - PORTA Bit 2
                // DB3 - PORTA Bit 3
                // DB4 - PORTA Bit 4
                // DB5 - PORTA Bit 5
                // DB6 - PORTA Bit 6
                // DB7 - PORTA Bit 7
                // E - PORTB Bit 0
                // RD /WR - PORTB Bit 1
                // RS - PORTB Bit 2
                // /RST - PORTB Bit 3
                // /CS1 - PORTB Bit 4
                // /CS2 - PORTB Bit 5
                
                // Specify the current font for displaying text
                glcd_init_data.font=font5x7;
                // No function is used for reading
                // image data from external memory
                glcd_init_data.readxmem=NULL;
                // No function is used for writing
                // image data to external memory
                glcd_init_data.writexmem=NULL;
                
                glcd_init(&glcd_init_data);
                glcd_clear();
                glcd_outtextf("ABBAS SARAMI\nKeyPad:");
                
                while (1)
                   {
                    if(PIND != 0xF0)
                    {
                    KeyVal =key();
                    sprintf(&str,"%d",KeyVal);
                    glcd_outtext(&str);
                    while(PIND != 0xF0);  
                    }
                
                   }
                }
                و نتیجه کار:


                موفق باشید
                امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                دیدگاه

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