本帖最后由 缥缈九哥 于 2012-9-14 12:18 编辑
在论坛高手的教程下,自己试写了一下中断。
/*按下KEY2键流水灯开始,蜂鸣器叫*/
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
void delay_ms(uint32_t x) //延时
{
uint32_t i,j;
for(i=800;i>0;i--)
for(j=x;j>0;j--);
}
//外部中断0回调函数
void EINT0CALLBACK( void )
{
DrvGPIO_SetBit( E_GPB, 10);
}
int main( void )
{
UNLOCKREG(x); //芯片注册解锁
SYSCLK->;PWRCON.XTL12M_EN =1; //设定12M外部晶振
LOCKREG(x); //芯片上锁
delay_ms(1000); //等待时钟就绪
DrvGPIO_EnableInt( E_GPB, 14, E_IO_FALLING, E_MODE_EDGE); //设置端口GPB14为外部中断模式
DrvGPIO_EnableDebounce(E_GPB, 14);
DrvGPIO_InitFunction( E_FUNC_EXTINT0); //指定外部中断0引脚功能
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); //设定端口GPB10为输出模式
DrvGPIO_ClrBit(E_GPB, 10); //关闭蜂鸣器
DrvGPIO_EnableEINT0( E_IO_FALLING, E_MODE_EDGE, EINT0CALLBACK);
while(1)
{
if(DrvGPIO_GetBit( E_GPB, 14) == 0)
{
DrvGPIO_ClrBit(E_GPA, 2); // LED1亮
delay_ms(800) ;
DrvGPIO_ClrBit(E_GPA, 3); // LED2亮
DrvGPIO_SetBit(E_GPA,2) ; // LED1灭
delay_ms(800) ;
DrvGPIO_ClrBit(E_GPA, 4); // LED3亮
DrvGPIO_SetBit(E_GPA,3) ; // LED2灭
delay_ms(800) ;
DrvGPIO_ClrBit(E_GPA, 5); // LED4亮
DrvGPIO_SetBit(E_GPA,4) ; // LED3灭
delay_ms(2000) ;
DrvGPIO_SetBit(E_GPA,5) ; // LED4灭
DrvGPIO_SetPortBits(E_GPA,0XFFC3); // 全 亮
delay_ms(2000) ;
DrvGPIO_SetPortBits(E_GPA,0XFFFF) ; // 全 灭
delay_ms(2000) ;
DrvGPIO_SetBit(E_GPB,10) ;
delay_ms(3000);
DrvGPIO_ClrBit(E_GPB, 10);
delay_ms(3000) ;
}
}
} |