记录一下学习mini2440用一个按键控制一个灯,按一次灯亮,再按一次灯灭,在2440中,按键一直处于高电平,所以按下的时候是低电平,如下电路图。
具体代码如下:
#define GPBCON *(unsigned int *)0x56000010 //灯的功能地址
#define GPBDAT *(unsigned int *)0x56000014 //灯的数据地址
#define GPGCON *(unsigned int *)0x56000060 //按键的功能地址
#define GPGDAT *(unsigned int *)0x56000064 //按键的数据地址
/*按键的初始化*/
void key_init(){
GPGCON &=~3; //使0 1位清零
}
/*********
延迟
***********/
void delay(int num){
while(num--);
}
/*************
灯的初始化
*************/
void led_init(){
GPBCON &=~(3<<10); //清零第10 11位
GPBCON |= 1<<10; //使10位为1 11为0 定义输出功能
}
/*************
灯亮
*************/
void led_on(){
GPBDAT &= ~(1<<5); //将第五位值为0 灯亮
}
/************
灯灭
*************/
void led_off(){
GPBDAT |=1<<5; //将第五位为1 灯灭
}
/*按键控制灯的亮灭,当按一次按键时亮,再按一次时灭*/
void key_contr_led(){
led_off(); //灯灭
while(1){
if(!(GPGDAT & (1<<0))){ //判断灯是否按下
delay(10); //延时去抖
if(!(GPGDAT & (1<<0))){ //再次判断灯是否按下
GPBDAT ^=(1<<5); //取反灯
}
while(!(GPGDAT & (1<<0)));//检测松手
}
}
}
void main(){
led_init();
key_init();
key_contr_led();
}