STC89C51两个按键外部中断,按这两个按键都会执行int0

P3.2 P3.3接两个按键 中断INT0控制变量ledmod INT1控制变量tk,为什么按这两个按键都会改变ledmod的值呢?

  1. include <STC12C5A60S2.H>  
  2. #include <intrins.h>  
  3. sbit FN1=P3^2;  
  4. sbit FN2=P3^3;  
  5. unsigned int ledmod=1;  //LED模式标识  
  6. unsigned int tk=5;  //LED时间变量  
  7. unsigned char pwroff=0;  //掉电模式标识  
  8. void Fn1int(void);  
  9. void Fn2int(void);  
  10. void Ledmod1(void);  
  11. void Ledmod2(void);  
  12. void Ledmod3(void);  
  13. void Pwrdown(void);  
  14. void Delay(unsigned int n);  
  15. void Intsystemset(void)  //中断配置  
  16. {  
  17.     IT0=0;  
  18.     EX0=1;  
  19.     IT1=0;    
  20.     EX1=1;  
  21.     EA=1;     
  22. }  
  23. void Delay(unsigned int n)  //延时程序  
  24. {  
  25.     unsigned int  i,j;  
  26.     for(i=0;i<n;i++)  
  27.         for(j=0;j<50;j++);  
  28. }  
  29. void Fn1int() interrupt 0  //INT0中断  
  30. {  
  31.     unsigned int m0=ledmod;  
  32.     EA=0;  
  33.     pwroff=0;     
  34.     Delay(200);  
  35.         if(FN1==0)  
  36.         {  
  37.             while(FN1==0)  
  38.             {  
  39.             }  
  40.             if(m0>=3)  
  41.             {ledmod=1;}  
  42.             if((m0>=1)&&(m0<3))  
  43.             {ledmod=ledmod+1;}            
  44.         }     
  45.     EA=1;  
  46. }  
  47. void Fn2int() interrupt 2  //INT1中断  
  48. {  
  49.     unsigned int e1=tk;  
  50.     EA=0;  
  51.     pwroff=0;  
  52.     Delay(200);  
  53.         if(FN2==0)  
  54.         {  
  55.             while(FN2==0)  
  56.             {  
  57.             }  
  58.             if(e1<=1)  
  59.             {tk=10;}  
  60.             if((e1>1)&&(e1<11))  
  61.             {tk=tk-1;}            
  62.         }  
  63.     EA=1;  
  64. }  
  65. void Pwrdown(void)  //掉电模式函数  
  66. {  
  67.     P4SW=0X70;  
  68.     P0=0X00;  
  69.     P1=0X00;  
  70.     P2=0X00;  
  71.     P4=0X00;  //进入掉电模式  
  72.     PCON=0X02;   
  73.     _nop_();  
  74.     _nop_();  
  75. }  
  76. void main(void)  //主函数  
  77. {  
  78.     unsigned int  mi,mj;      
  79.     P4SW=0X70;  
  80.     P0M1=0X00;  
  81.     P0M0=0X7F;  
  82.     P1M1=0X00;  
  83.     P1M0=0X7F;  
  84.     P2M1=0X00;  
  85.     P2M0=0X7F;  
  86.     P4M1=0X00;  
  87.     P4M0=0X3F;  //端口配置  
  88.     Intsystemset();//配置中断  
  89.     while(1)  
  90.     {  
  91.     if((ledmod=1)&&(pwroff==0))  
  92.         {Ledmod1();}  
  93.     if((ledmod=2)&&(pwroff==0))  
  94.         {Ledmod2();}  
  95.     if((ledmod=3)&&(pwroff==0))  
  96.         {Ledmod3();}  
  97.     if(pwroff==1)  
  98.         {  
  99.             P0=0X00;  
  100.         P1=0X00;  
  101.         P2=0X00;  
  102.         P4=0X00;  
  103.             for(mi=0;(mi<600)&&(pwroff==1);mi++) //掉电模式等待  
  104.             {  
  105.                 for(mj=0;mj<100;mj++)  
  106.                 {  
  107.                 Delay(100);       
  108.                 }                 
  109.             }  
  110.             if(pwroff==1)  
  111.             {Pwrdown();}  //进入掉电模式  
  112.         }  
  113.     }  
  114. }  
永不止步步 发表于09-29 09:32 浏览65535次
分享到:

已有1条评论

  • 畅学电子
    畅学电子 09-29 09:45

    主程序== 写成了=

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号