linux 亮灯命令,怎样实现一个按钮按一下灯亮再按一下灯灭?

NXP  LPC的例程:

#include "config.h"

#define         BEEP        1 << 7                // P0.7控制BEEP

const uint32 LED1 = (0x55 << 16);

/*

*********************************************************************************************************

** 函数名称 :IRQ_Eint0()

** 函数功能 :外部中断0 EINT0服务程序

** 入口参数 :无。

** 出口参数 :无。

*********************************************************************************************************

*/

void __irq IRQ_Eint0 (void)

{

/*         等待外部中断信号恢复为高电平

若信号保持为低电平,中断标志会一直置位。*/

while ((EXTINT & 0x01) != 0)

{

EXTINT = 0x01;                                        // 清除EINT0中断标志

}

VICVectAddr = 0;                                        // 向量中断结束

}

/*

*********************************************************************************************************

** 函数名称 :main()

** 函数功能 :演示外部中断唤醒掉电的CPU

** 入口参数 :无。

** 出口参数 :无。

*********************************************************************************************************

*/

int main (void)

{

PINSEL0 = 0x00000000;                                // 管脚连接GPIO

PINSEL1 = 0x00000001;                                // P0.16连接EINT0

IO0DIR  = BEEP;                                                // 设置BEEP控制口为输出,其余输入

PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO

IO1DIR  = LED1;                                // 设置LED1控制口为输出

IRQEnable();                                                // 使能IRQ中断

/* 外部中断0初始化 */

VICIntSelect   = 0x00000000;                // 设置所有中断分配为IRQ中断

VICVectCntl0   = 0x20 | 14;                        // 分配外部中断0到向量中断0

VICVectAddr0   = (uint32)IRQ_Eint0;        // 设置中断服务程序地址

VICIntEnable   = 1 << 14;                        // 使能EINT0中断

EXTWAKE        = 0x01;                                // 外部中断0唤醒芯片

EXTINT         = 0x01;                                // 清除EINT0中断标志

IO0SET = BEEP;

IO1SET = LED1;

while (1)

{

PCONP = 0x00;                                        // 关闭定时器、RTC、UART等功能部件

PCON  = 0x02;                                        // 系统进入掉电模式

/* 当系统被唤醒后,取反BEEP控制 */

if ((IO0SET & BEEP) == 0) IO0SET = BEEP;

else IO0CLR = BEEP;

if ((IO1SET & LED1) == 0) IO1SET = LED1;

else IO1CLR = LED1;

}

return (0);

}

/*********************************************************************************************************

**                            End Of File

********************************************************************************************************/

供你参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值