اطلاعیه

Collapse
No announcement yet.

دوتا سوال ساده در مورد خواندن کلید ها

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

    دوتا سوال ساده در مورد خواندن کلید ها

    سلام به همگی
    این برنامه رو ببینید:
    کد:
    #include <mega64.h>
    #include <glcd.h>
    #include <font5x7.h>
    #include <delay.h>
    void main(void)
    {
    // Declare your local variables here
    // Graphic LCD initialization data
    GLCDINIT_t glcd_init_data;
    
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x00;
    PORTD=0x00;
    DDRD=0x00;
    PORTE=0x00;
    DDRE=0x00;
    PORTF=0x00;
    DDRF=0x00; 
    PORTG=0x00;
    DDRG=0x00;
    // 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 - PORTC Bit 0
    // RD /WR - PORTC Bit 1
    // RS - PORTC Bit 2
    // /RST - PORTC Bit 3
    // CS1 - PORTC Bit 4
    // CS2 - PORTC Bit 5
    
    // Specify the current font for displaying text
    glcd_init_data.font=font5x7;
    glcd_init(&glcd_init_data);
       glcd_outtextxy(1,20,"SCIENTIFIC CALCULATOR");
       delay_ms(500);
       glcd_clear();
    
    while (1)
       {
       if(PIND.0==0)
       {
       glcd_outtextxy(0,5,".");
       }
       if(PIND.1==0){
       glcd_outtextxy(0,5,"/");
       }            
       if(PIND.2==0)
       {
       glcd_outtextxy(0,5,"*");
       } 
       if(PIND.3==0)
       {
       glcd_outtextxy(0,5,"-");
       }
       if(PIND.4==0)
       {
       glcd_outtextxy(0,5,"+");
       }
    }
    }
    این برنامه یه ماشین حساب مهندسی هست که الان دارم روش کار میکنم.

    میخوام کلید ها رو با switch case بخونم ولی نمیشه...یعنی تو سوویچ عبارت PIND رو بذارم و مقادیر باینری مثل 0b1101111 رو چک کنم ولی کار نمیکنه و تنها با همین روش ابتدایی کار میکنه...چیکار کنم..؟

    یه سوال دیگه...چجوری میتونم کاری کنم که مثلا * بعدی روی اولی overwrite نشه و بلافاصله بعدش نوشته بشه و سومی هم بعد از آن...؟

    یعنی اگر کلید * رو یکبار بزنیم بشه :*
    دوبار بزنیم بشه : **
    و سه بار بزنیم بشه :***

    سپاس.

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

    نوشته اصلی توسط roberty
    سلام به همگی
    این برنامه رو ببینید:
    کد:
    #include <mega64.h>
    #include <glcd.h>
    #include <font5x7.h>
    #include <delay.h>
    void main(void)
    {
    // Declare your local variables here
    // Graphic LCD initialization data
    GLCDINIT_t glcd_init_data;
    
    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x00;
    PORTD=0x00;
    DDRD=0x00;
    PORTE=0x00;
    DDRE=0x00;
    PORTF=0x00;
    DDRF=0x00; 
    PORTG=0x00;
    DDRG=0x00;
    // 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 - PORTC Bit 0
    // RD /WR - PORTC Bit 1
    // RS - PORTC Bit 2
    // /RST - PORTC Bit 3
    // CS1 - PORTC Bit 4
    // CS2 - PORTC Bit 5
    
    // Specify the current font for displaying text
    glcd_init_data.font=font5x7;
    glcd_init(&glcd_init_data);
       glcd_outtextxy(1,20,"SCIENTIFIC CALCULATOR");
       delay_ms(500);
       glcd_clear();
    
    while (1)
       {
       if(PIND.0==0)
       {
       glcd_outtextxy(0,5,".");
       }
       if(PIND.1==0){
       glcd_outtextxy(0,5,"/");
       }            
       if(PIND.2==0)
       {
       glcd_outtextxy(0,5,"*");
       } 
       if(PIND.3==0)
       {
       glcd_outtextxy(0,5,"-");
       }
       if(PIND.4==0)
       {
       glcd_outtextxy(0,5,"+");
       }
    }
    }
    این برنامه یه ماشین حساب مهندسی هست که الان دارم روش کار میکنم.

    میخوام کلید ها رو با switch case بخونم ولی نمیشه...یعنی تو سوویچ عبارت PIND رو بذارم و مقادیر باینری مثل 0b1101111 رو چک کنم ولی کار نمیکنه و تنها با همین روش ابتدایی کار میکنه...چیکار کنم..؟

    یه سوال دیگه...چجوری میتونم کاری کنم که مثلا * بعدی روی اولی overwrite نشه و بلافاصله بعدش نوشته بشه و سومی هم بعد از آن...؟

    یعنی اگر کلید * رو یکبار بزنیم بشه :*
    دوبار بزنیم بشه : **
    و سه بار بزنیم بشه :***

    سپاس.


    من با زبان C آشنایی ندارم اما تا اونجا که میدونم (البته اگه درست متوجه شده باشم) مقدار pin پایه ای رو مستقیما نمیشه باینری داد باید مقدار باینری رو اول تو متغیری بریزی بعد متغیرو برابر با pin دلخواهت قرار بدی

    اما در رابطه با سوال دومیت ، اگه منظورت نشون دادن تو lcd باشه نیاز به کار خاصی نیست یعنی نمیخواد locate lcd کنی (یا بهتر بگم lcd رو شیفت بدی)
    فقط کافیه حواست به دستور clear lcd باشه که دقیقا کجا استفادش میکنی اگه به این دقت کنی مشکلت حل میشه چون وقتی clear میکنی lcd دوباره از خونه اول شروع میکنه به نمایش دادن اگه دستور clear جلوش نباشه تو خونه بعدی مقدار بعدی رو نشون میده و به همین ترتیب

    موفق باشی یا علی...
    ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

    http://tif00s.persiangig.com/image/MLX90614.jpg

    دیدگاه

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