单片机
返回首页

利用ARM外部中断控制流水灯的闪烁速度(基于LPC2134)

2016-05-03 来源:eefocus

 

  1. #include 'config.h'  
  2.   
  3. void __irq Eint0_IRQ(void);   //INT0中断函数声明  
  4. void delay(int dly);   //delay延时函数声明  
  5.   
  6. //流水灯数值表  
  7. int Led_Table[]={  
  8.     0x00fe0000,0x00fd0000,0x00fb0000,0x00f70000,0x00ef0000,  
  9.     0x00df0000,0x00bf0000,0x007f0000};      
  10. int Delaytime=70;  
  11.   
  12. //主函数  
  13.   
  14. int main(void)  
  15. {  
  16.     int i=0;  
  17.     PINSEL0=0X000CC0CC;  //使能p0.1 p0.3 p0.7 p0.8分别为外部中断0.1.2.3  
  18.     PINSEL1=0X00000000;     //使能p1.16~23为IO功能  
  19.     IO1DIR=0XFF<<16;   //这个写法很清楚,推荐  
  20.     IRQEnable();  
  21.     VICIntSelect=0x00000000; //设置所有的终端都为IRQ中断  
  22.     VICVectCntl0=0x20|14;   //设置INT0为IRQ中断,使用slot0  
  23.     VICVectAddr0=(uint32)Eint0_IRQ; //设置终端服务程序地址  
  24.     VICIntEnable=0x00004000;   //使能INT0  
  25.     EXTMODE=0x00;  //INT0电平触发  
  26.     EXTPOLAR=0x00;    //触发电平为低电平  
  27.     EXTINT=0x0f;  //清除所有中断标志  
  28.     while(1)  
  29.     {  
  30.         IO1SET=Led_Table[i];//设置高电平引脚  
  31.         IO1CLR=~Led_Table[i];    //设置低电平引脚  
  32.         delay(Delaytime);  
  33.         i+=1;  
  34.         if(i==8)  
  35.         {  
  36.             i=0;  
  37.         }  
  38.               
  39.     }  
  40.     return 0;  
  41. }  
  42.   
  43. /****************************************************************************   
  44. # * 名称:delay 
  45. # * 功能:延时函数 
  46. # * 入口参数:延时时间 
  47. # * 出口参数:无   
  48. # ****************************************************************************/  
  49. void delay(int dly)  
  50. {  
  51.     int i,j;  
  52.     for(i=0; i
  53.         for(j=0; j<25000; j++);  
  54.           
  55. }  
  56.   
  57. /****************************************************************************   
  58. # * 名称:Eint0_IRQ()   
  59. # * 功能:外部中断1中断处理程序。   
  60. # * 入口参数:无   
  61. # * 出口参数:无   
  62. # ****************************************************************************/       
  63. void __irq Eint0_IRQ(void)    
  64. {      
  65.       
  66.     if(Delaytime>20)  
  67.     {  
  68.         Delaytime-=20;  //加快流水灯的闪烁速度  
  69.     }  
  70.     while((EXTINT&0x01)!=0)   //不断被清除标志位,直到外部恢复高电平,此时EXTINT的最低位位0  
  71.     {  
  72.         EXTINT=0x01;      
  73.   
  74.    }    
  75.         VICVectAddr=0;  //必须操作  
  76. }  

 

 

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章