免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 826 | 回复: 0
打印 上一主题 下一主题

用外部中断4-7(4个按键),控制四个LED的亮灭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览

//======================================================================

//  工程名称:  KEY_EINT

//  功能描述:  用外部中断4-7(4个按键),控制四个LED的亮灭

//              采用下降沿触发

//  IDE环境:   ADS v1.2

//  涉及的库: 

//  组成文件:  main.c

//  硬件连接:

//  维护记录:  2009-9-22  V1.0  

//======================================================================

 

#include "2440addr.h"

#include "2440lib.h"

 

 

#define LED1ON    0xFE

#define LED2ON    0xFD

#define LED3ON    0xFB

#define LED4ON    0xF7

#define LEDOFF    0xFF

 

/*

 *  工程名称: 

 *  功能描述:  用外部中断4-7(4个按键),控制四个LED的亮灭

 *              采用下降沿触发

 *  IDE环境:   TX2440A   ADS v1.2

 *  维护记录:  Lzy 2009-9-22  V1.0 

 */

 

void __irq EintHandler(void);           //中断入口函数声明

 

/*

 * 函数名称: void init_port(void)

 * 功能描述: 初始化引脚

 * 硬件连接: KEY1 -- GPF4

              KEY2 -- GPF5

              KEY3 -- GPF6

              KEY4 -- GPF7

 */

 

void init_port(void)

{

    rGPFCON |= 0xaa55;       //GPF0--GPF3设置为output,GPF4-7设置为EINT4-7

    rGPFDAT |= 0xf;           //初始化引脚数据

}

 

 

/*

 * 函数名称: void init_irq(void)

 * 功能描述: 初始化中断 

 */

 

void init_irq(void)

{

    rEXTINT0  |= ((2<<16) | (2 << 20) | (2 << 24) | (2 << 28));    //设置外部中断4_7下降沿触发

    rEINTPEND |= 0xf0;               //清除外部中断

    rEINTMASK &= ~(0xf0);            //使能外部中断 

   

    pISR_EINT4_7=(unsigned)EintHandler;    //外部中断4_7中断服务子程序入口地址

    EnableIrq(BIT_EINT4_7);                  //开启中断

}

 

 

int Main(void)

{

   

    memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);

   

    /*初始化引脚*/

    init_port();

 

    /*初始化中断 */

    init_irq();  

   

    while(1);

       

}

 

/*

 *  延时

 */

delay()

{

    unsigned int i, j;

    for(i = 0xfff; i>0; i--)

        for(j = 0xff; j > 0; j--)

        ;

}

 

 

//====================================================

// 语法格式: void __irq Eint0Handler(void)

// 功能描述: 点亮或者熄灭LED5-8  中断函数

// 入口参数:

// 出口参数:

//====================================================

 

void __irq EintHandler(void)

{

    if(rINTPND==BIT_EINT4_7)

    {

       ClearPending(BIT_EINT4_7);  //清除中断 

      

       if(rEINTPEND&(1<<4))

       {

           rGPFDAT = LED1ON;

            delay();

            rGPFDAT = LEDOFF;

            rEINTPEND |= 1<< 4;      //这个也要清,

       }  

      

       if(rEINTPEND&(1<<5))

        {          

            rGPFDAT = LED2ON;

            delay();

            rGPFDAT = LEDOFF;

            rEINTPEND |= 1<< 5;

        }

        if(rEINTPEND&(1<<6))

        {          

            rGPFDAT = LED3ON;

            delay();

            rGPFDAT = LEDOFF;

            rEINTPEND |= 1<< 6;

        }

        if(rEINTPEND&(1<<7))

        {          

            rGPFDAT = LED4ON;

            delay();

            rGPFDAT = LEDOFF;

            rEINTPEND |= 1<< 7;

        }

    }

}

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP