按键按下无反应帮忙看下,代码如下:
tiny6410板子
#define GPKCON (*(volatile unsigned long *)0x7F008800)
#define GPKDAT (*(volatile unsigned long *)0x7F008808)
#define GPNCON (*(volatile unsigned long *)0x7F008830)
#define GPNDAT (*(volatile unsigned long *)0x7F008834)
/*
* LED1,LED2,LED4对应GPK4、GPK5、GPK6、GPK7
*/
#define GPk4_out (1<<(4*4))
#define GPk5_out (1<<(5*4))
#define GPk6_out (1<<(6*4))
#define GPk7_out (1<<(7*4))
#define GPk4_msk (3<<(4*4))
#define GPk5_msk (3<<(5*4))
#define GPk6_msk (3<<(6*4))
#define GPk7_msk (3<<(7*4))
/*
* K1,K2,K3,K4对应GPG0,GPG3,GPG5,GPG6
*/
#define GPG0_in (0<<(0*2))
#define GPG1_in (0<<(1*2))
#define GPG2_in (0<<(2*2))
#define GPG3_in (0<<(3*2))
#define GPG0_msk (3<<(0*2))
#define GPG1_msk (3<<(1*2))
#define GPG2_msk (3<<(2*2))
#define GPG3_msk (3<<(3*2))
int main()
{
unsigned long dwDat;
// LED1,LED2,LED3,LED4对应的4根引脚设为输出
GPKCON &= ~(GPk4_msk|GPk5_msk| GPk6_msk| GPk7_msk);
GPKCON |= GPk4_out | GPk5_out | GPk6_out | GPk7_out;
// K1,K2,K3,K4对应的4根引脚设为输入
GPNCON &= ~(GPG0_msk | GPG1_msk | GPG2_msk | GPG3_msk);
GPNCON |= GPG0_in | GPG1_in | GPG2_in | GPG3_in;
GPKDAT = 0XF0;
while(1){
//若Kn为0(表示按下),则令LEDn为0(表示点亮)
dwDat = GPNDAT; // 读取GPF管脚电平状态
if (dwDat & (1<<0)) // K1没有按下
GPKDAT |= (1<<4); // LED1熄灭
else
GPKDAT &= ~(1<<4); // LED1点亮
if (dwDat & (1<<1)) // K2没有按下
GPKDAT |= (1<<5); // LED2熄灭
else
GPKDAT &= ~(1<<5); // LED2点亮
if (dwDat & (1<<2)) // K3没有按下
GPKDAT |= (1<<6); // LED3熄灭
else
GPKDAT &= ~(1<<6); // LED3点亮
if (dwDat & (1<<3)) // K4没有按下
GPKDAT |= (1<<7); // LED4熄灭
else
GPKDAT &= ~(1<<7); // LED4点亮
}
return 0;
}