利用ARM外部中断控制流水灯的闪烁速度(基于LPC2134)
2016-05-03 来源:eefocus
- #include 'config.h'
- void __irq Eint0_IRQ(void); //INT0中断函数声明
- void delay(int dly); //delay延时函数声明
- //流水灯数值表
- int Led_Table[]={
- 0x00fe0000,0x00fd0000,0x00fb0000,0x00f70000,0x00ef0000,
- 0x00df0000,0x00bf0000,0x007f0000};
- int Delaytime=70;
- //主函数
- int main(void)
- {
- int i=0;
- PINSEL0=0X000CC0CC; //使能p0.1 p0.3 p0.7 p0.8分别为外部中断0.1.2.3
- PINSEL1=0X00000000; //使能p1.16~23为IO功能
- IO1DIR=0XFF<<16; //这个写法很清楚,推荐
- IRQEnable();
- VICIntSelect=0x00000000; //设置所有的终端都为IRQ中断
- VICVectCntl0=0x20|14; //设置INT0为IRQ中断,使用slot0
- VICVectAddr0=(uint32)Eint0_IRQ; //设置终端服务程序地址
- VICIntEnable=0x00004000; //使能INT0
- EXTMODE=0x00; //INT0电平触发
- EXTPOLAR=0x00; //触发电平为低电平
- EXTINT=0x0f; //清除所有中断标志
- while(1)
- {
- IO1SET=Led_Table[i];//设置高电平引脚
- IO1CLR=~Led_Table[i]; //设置低电平引脚
- delay(Delaytime);
- i+=1;
- if(i==8)
- {
- i=0;
- }
- }
- return 0;
- }
- /****************************************************************************
- # * 名称:delay
- # * 功能:延时函数
- # * 入口参数:延时时间
- # * 出口参数:无
- # ****************************************************************************/
- void delay(int dly)
- {
- int i,j;
- for(i=0; i
- for(j=0; j<25000; j++);
- }
- /****************************************************************************
- # * 名称:Eint0_IRQ()
- # * 功能:外部中断1中断处理程序。
- # * 入口参数:无
- # * 出口参数:无
- # ****************************************************************************/
- void __irq Eint0_IRQ(void)
- {
- if(Delaytime>20)
- {
- Delaytime-=20; //加快流水灯的闪烁速度
- }
- while((EXTINT&0x01)!=0) //不断被清除标志位,直到外部恢复高电平,此时EXTINT的最低位位0
- {
- EXTINT=0x01;
- }
- VICVectAddr=0; //必须操作
- }
相关文章