اطلاعیه

Collapse
No announcement yet.

key pad4*4

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

    key pad4*4

    سلام من یک برنامه برای خواندن key pad ونمایش برروی ال سی دی نوشته ام اما نمی دانم چرا عمل نمی کند خواهش می کنم یه نگاه به آن بیندازید و اگر ممکن بود
    اشکال من را بگویید.
    #include <mega16.h>
    #include<sleep.h>
    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h>
    #include<delay.h>
    // Declare your global variables here
    char keycode[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
    char keys;
    char findcolumn(char input)
    {

    if(input==1)
    return 0;
    else if((input>>1)==1)
    return 1;
    else if((input>>2)==1)
    return 2;
    else
    return 3;
    }

    //External interrupt0 service routine
    interrupt [EXT_INT0]void ext_int0_isr(void){
    //place your code here
    char row,column;

    column=findcolumn(PINB&0x0f);
    delay_ms(20);
    PORTB=0xef;
    if((PINB&0x0f)!=0x0f)
    row=0;
    else{
    PORTB=0xdf;
    if((PINB&0x0f)!=0x0f)
    row=1;
    else{
    PORTB=0xbf;
    if((PINB&0x0f)!=0x0f)
    row=2;
    else{
    PORTB=0x7f;
    if((PINB&0x0f)!=0x0f)
    row=3;
    }
    }
    }

    keys=keycode[row][column];
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putchar(keys);

    PORTB=0x0f;

    }



    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=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
    // State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
    PORTB=0x0f;
    DDRB=0xF0;




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

    // LCD module initialization
    lcd_init(16);

    //Global enable interrupts
    #asm("sei&quot
    sleep_enable();



    while (1)
    {
    // Place your code here
    powerdown();
    };
    }
    این برنامه را از کتاب میکرو کنترلر ره افروز نوشتم.

    #2
    پاسخ : key pad4*4

    سلام ...................

    برنامه ی شما رو گذرا که نگاه میکردم به یه نکته ای بر خوردم .. شما چرا پایه ی ورودی کیبورد رو در وضعیت T تعریف کردید؟ من خودم همیشه P میکنم .. فکر کنم منطقیش هم این باشه .. شما برنامه ی زیر رو ببینید .. امیدوارم مشکلتون حل بشه .. موفق باشید ..

    http://www.eca.ir/forum2/index.php?topic=22209.0
    دوستان! مدتی کمتر به سایت میام ..

    دیدگاه

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