سلام و درود بر دوستان گلم
من تو برنامه ام از هدر کی پد استفاده کردم ولی باز هم جواب نگرفتم چون تو دیباگ و کامپایل به دستور زیر که قرمز رنگش کردم اشکال میگیره
اینم برنامه اش :
#ifndef kbd_INCLUDED_
#define kbd_INCLUDED_
#include "delay.h"
#include "lib_AT91SAM7X256.h "
void kbd_pin(int port,int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4);
unsigned int row1,row2,row3,row4,getkbd,port_add;
unsigned int clm1,clm2,clm3,clm4;
//************************************************** *************
void kbd_pin(int port,int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4){
row1=a1,row2=a2,row3=a3,row4=a4;
clm1=b1,clm2=b2,clm3=b3,clm4=b4;
switch (port)
{
case 1: port_add =0xFFFFF400; // (PIOA) Base Address
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
break;
case 2: port_add =0xFFFFF600; // (PIOB) Base Address
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
break;
default : port_add =0xFFFFF600;
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
break;
}
AT91F_PIO_CfgOutput (((AT91PS_PIO) port_add),(1<<row1));
AT91F_PIO_CfgOutput (((AT91PS_PIO) port_add),(1<<row2));
AT91F_PIO_CfgOutput (((AT91PS_PIO) port_add),(1<<row3));
AT91F_PIO_CfgOutput (((AT91PS_PIO) port_add),(1<<row4));
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
AT91F_PIO_CfgInput(((AT91PS_PIO) port_add),(1<<clm1));
AT91F_PIO_CfgInput(((AT91PS_PIO) port_add),(1<<clm2));
AT91F_PIO_CfgInput(((AT91PS_PIO) port_add),(1<<clm3));
AT91F_PIO_CfgInput(((AT91PS_PIO) port_add),(1<<clm4));
AT91F_PIO_CfgPullup(((AT91PS_PIO) port_add),(1<<clm1));
AT91F_PIO_CfgPullup(((AT91PS_PIO) port_add),(1<<clm2));
AT91F_PIO_CfgPullup(((AT91PS_PIO) port_add),(1<<clm3));
AT91F_PIO_CfgPullup(((AT91PS_PIO) port_add),(1<<clm4));
}
unsigned int get_kbd(char deb)
{
delay_ms(deb);
//************************************************** *********************************
AT91F_PIO_ClearOutput (((AT91PS_PIO)port_add),(1<<row1));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 2));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 3));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 4));
if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm1)) == 0)
getkbd=1;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm2)) == 0)
getkbd=2;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm3)) == 0)
getkbd=3;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm4)) == 0)
getkbd=4;
//************************************************** ***********************************
//************************************************** *********************************
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 1));
AT91F_PIO_ClearOutput (((AT91PS_PIO)port_add),(1<<row2));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 3));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 4));
if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm1)) == 0)
getkbd=5;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm2)) == 0)
getkbd=6;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm3)) == 0)
getkbd=7;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm4)) == 0)
getkbd=8;
//************************************************** ***********************************
//************************************************** *********************************
AT91F_PIO_SetOutput (((AT91PS_PIO)port_add),(1<<row1));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 2));
AT91F_PIO_ClearOutput(((AT91PS_PIO )port_add),(1<<row3));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 4));
if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm1)) == 0)
getkbd=9;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm2)) == 0)
getkbd=10;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm3)) == 0)
getkbd=11;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm4)) == 0)
getkbd=12;
//************************************************** ***********************************
//************************************************** *********************************
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 1));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 2));
AT91F_PIO_SetOutput(((AT91PS_PIO)port_add),(1<<row 3));
AT91F_PIO_ClearOutput(((AT91PS_PIO) port_add),(1<<row4));
if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm1)) == 0)
getkbd=13;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm2)) == 0)
getkbd=14;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm3)) == 0)
getkbd=15;
else if ((AT91F_PIO_GetInput((AT91PS_PIO)port_add) & (1<<clm4)) == 0)
getkbd=16;
return(getkbd);
}
//************************************************** *******************
//************************************************** *******************
#endif
کسی از دوستان میتونه مشکل من را حل کنه ؟؟؟
ممنون میشم از لطفتون