嵌入式linux控制led单个灯亮,嵌入式学习之ARM开发板上利用按键产生的终端控制led灯的亮和灭...

实践:

按动K1按键,LED1亮,

按动K1按键,LED1亮,

按动K1按键,LED1亮,

按动K1按键,LED1亮,

按动K1按键,LED1亮,

#include

#include

#include "def.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "def.h"

#include "Option.h"

void delay(unsigned long dly)

{

for(; dly > 0; dly--);

}

void __irq IRQ_KEY()

{

if(rINTPND==BIT_EINT8_23)

{

ClearPending(BIT_EINT8_23);//清除中断标志

if(rEINTPEND&(1<<8))

{

rGPBDAT = ~(1<<5);//点亮led1,其他灯灭

}

else

if(rEINTPEND&(1<<11))

{

rGPBDAT = ~(1<<6);//点亮led2

}

else

if(rEINTPEND&(1<<13))

{

rGPBDAT = ~(1<<7);//点亮led3

}

else

if(rEINTPEND&(1<<14))

{

rGPBDAT = ~(1<<8);//点亮led4

}

else

if(rEINTPEND&(1<<15))

{

rGPBDAT =

~(0xf<<5);//设置GPB5.GPB6.GPB7.GPB8引脚输出设置成0,则CPU输出电压为3.3V,GPB5.GPB6.GPB7.GPB8引脚对应的LED灯亮

}

else

if(rEINTPEND&(1<<19))

{

rGPBDAT =

~(0xf<<5)|(0xf<<5);//设置GPB5.GPB6.GPB7.GPB8引脚输出设置成1,则CPU输出电压为3.3V,GPB5.GPB6.GPB7.GPB8引脚对应的LED灯灭

}

}

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));

rEINTPEND

|=((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19));//外部中断悬挂寄存器,清0无请求,1时有中断请求

rSRCPND |= (1<<5);//EINT8_23

指示中断源状态,0无中断源请求,1时有中断源请求

rINTPND |=(1<<5);//EINT8_23

指示中断状态,0无中断请求,1时有中断请求

}

void EINT_Init()

{

//设置GPGCON中GPG0为10,为外部中断EINT[8],对应K1按键

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));

rEXTINT0=0x2;//设置为下降沿触发

pISR_EINT8_23=(unsigned int)IRQ_KEY;

rINTMOD=0;//所用中断都是IRQ

rINTMSK=0xffffffdf;//开EINT0中断,响应中断

rEINTMASK

&=(~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19)));//使能各个所需要的具体中断

}

void Main(void)

{

MMU_Init(); //mmu.c中函数

rGPBCON =0x55555554; 将LED1-4对应的GPB5/6/7/8四个引脚设为输出

rGPBUP|=0x1e0;//将GPB5-8的上拉电阻设为使用,000111100000,其对应bit位设为1

delay(40000000);

EINT_Init();

while(1)

{

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值