先谢谢了。
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
//================================
#define LED1 (1<<5)
#define LED2 (1<<6)
#define LED3 (1<<7)
#define LED4 (1<<8)
/*
led1--gpb5-k1--eint8--gpg0
led2--gpb6-k2--eint11-gpg3
led3--gpb7-k3--eint13-gpg5
led4--gpb8-k4--eint14-gpg6
*/
void delay(int tt)
{
int i;
for(;tt>0;tt--)
{
for(i=0;i<1000;i++);
}
}
void ledinit()
{
rGPBCON=rGPBCON&(~((3<<0)|(3<<10)|(3<<12)|(3<<14)|(3<<16)))|((0<<0)|(1<<10)|(1<<12)|(1<<14)|(1<<16));
rGPBDAT=rGPBDAT&(~((LED1|LED2|LED3|LED4)))|((LED1|LED2|LED3|LED4));
}
void clearpnd()
{
rSRCPND|=(1<<5);
rINTPND|=(1<<5);
}
unsigned int keyscan()
{
if(!(rGPGDAT&(1<<0)))
{
delay(100);
if(!(rGPGDAT&(1<<0)))
{
while(!(rGPGDAT&(1<<0)));
return 1;
}
}
else if(!(rGPGDAT&(1<<3)))
{
delay(100);
if(!(rGPGDAT&(1<<3)))
{
while(!(rGPGDAT&(1<<3)));
return 2;
}
}
else if(!(rGPGDAT&(1<<5)))
{
delay(100);
if(!(rGPGDAT&(1<<5)))
{
while(!(rGPGDAT&(1<<5)));
return 3;
}
}
else if(!(rGPGDAT&(1<<6)))
{
delay(100);
if(!(rGPGDAT&(1<<6)))
{
while(!(rGPGDAT&(1<<6)));
return 4;
}
}
else if(!(rGPGDAT&(1<<7)))
{
delay(100);
if(!(rGPGDAT&(1<<7)))
{
while(!(rGPGDAT&(1<<7)));
return 5;
}
}
else if(!(rGPGDAT&(1<<11)))
{
delay(100);
if(!(rGPGDAT&(1<<11)))
{
while(!(rGPGDAT&(1<<11)));
return 6;
}
}
else
return 0xff;
}
static void __irq key_irq()
{
unsigned int key;
if(rINTPND==(1<<5)) //BIT_EINT8_23
{
clearpnd();
if(rEINTPEND&(1<<8))
{
rEINTPEND|=(1<<8);
}
if(rEINTPEND&(1<<11))
{
rEINTPEND|=(1<<11);
}
if(rEINTPEND&(1<<13))
{
rEINTPEND|=(1<<13);
}
if(rEINTPEND&(1<<14))
{
rEINTPEND|=(1<<14);
}
if(rEINTPEND&(1<<15))
{
rEINTPEND|=(1<<15);
}
if(rEINTPEND&(1<<19))
{
rEINTPEND|=(1<<19);
}
}
// rGPBDAT=rGPBDAT&(~((LED1|LED2|LED3|LED4)));
key=keyscan();
rGPBDAT&=~(key<<5);
}
void keyinit()
{
rGPGCON=rGPGCON&(~((3<<0)|(3<<6)|(3<<10)|(3<<12)|(3<<14)|(3<<22)))|((2<<0)|(2<<6)|(2<<10)|(2<<12)|(2<<14)|(2<<22));
rEXTINT1=rEXTINT1&(~((7<<0)|(7<<12)|(7<<20)|(7<<24)|(7<<28)))|((2<<0)|(2<<12)|(2<<20)|(2<<24)|(2<<28));
rEXTINT2=rEXTINT2&(~(7<<12))|(2<<12);
rEINTPEND|=(1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19);
rEINTMASK&=~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19));
rSRCPND|=(1<<5);
rINTMSK&=~(1<<5);
rINTMOD=0X0;
rPRIORITY=0X0;
rINTPND|=(1<<5);
pISR_EINT8_23=(unsigned int )key_irq;
}
void Main()
{
ledinit();//
keyinit();
while(1);
}