【ARM】2440裸机系列-gpio按键控制
功能
通过GPIO,实现按键1点亮LED1,按键2点亮LED2……
说明
1)因为2440的按键只涉及行,所以在扫描按键时比2410简单了很多
2)在进行移位操作之前,必须进行数据寄存器的初始化,否则会出错(硬件特性)
源码
/***************************************************************************** *****函数名:main() *****功 能:通过GPIO,实现按键1点亮LED1,按键2点亮LED2 *****说 明: *****************************************************************************/ #include "2440addr.h" #define clrbit(var, bit) ((var) &= ~(1 << (bit))) //把某一位清0 int main (void) { rGPGCON &= (~((3<<22)|(3<<14)|(3<<12)|(3<<10)|(3<<6)|(3<<0))); //设置按键为输入 rGPGUP = 0x0; //GPG上拉使能 rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10)|(3<<0))); //LED1~4输出位清零 rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)|(0<<0)); //设置LED1~4为输出 rGPBUP =0x3ff; //11 1111 1111,GPB上拉禁止 rGPBDAT=0x3ff; //在进行移位操作之前必须进行数据寄存器的初始化 while(1) { if(0==(rGPGDAT & (1<<0))) //GPG0 { clrbit(rGPBDAT, 5); //LED1 } else if(0==(rGPGDAT & (1<<3))) //GPG3 { clrbit(rGPBDAT, 6); //LED2 } else if(0==(rGPGDAT & (1<<5))) //GPG5 { clrbit(rGPBDAT, 7); //LED3 } else if(0==(rGPGDAT & (1<<6))) //GPG6 { clrbit(rGPBDAT, 8); //LED4 } } }