2301_76567329 2023-09-26 17:09 采纳率: 100%
浏览 11
已结题

51单片机的外部中断,按下按键后不能切换到另一个模式

想做的是通过按键,在单片机上切换流水灯和呼吸灯两种模式。按键切换的部分是ctrl c+v,两种模式分别做过,用函数复制粘贴过来了。代码没有报错,但是单片机按一下k3后,第一个模式能成功运行,再按就没有反应了。

img

#include <reg51.h>
#include "intrins.h"
#define led P2
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
sbit key = P3^2;

 
void Delay(unsigned int t)
{
    while(t--);
}


void mode1(){
    while(1){
    P2=0xFE;
        Delay(500);
        P2=0xFD;
        Delay(500);
        P2=0xFB;
        Delay(500);
        P2=0xF7;
        Delay(500);
        P2=0xEF;
        Delay(500);
        P2=0xDF;
        Delay(500);
        P2=0xBF;
        Delay(500);
        P2=0x7F;
        Delay(500);
}
    
}

void mode2(){
    unsigned char Time,i;
    
    
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED1=0;
              Delay(Time);
              LED1=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED1=0;
              Delay(Time);
              LED1=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED2=0;
              Delay(Time);
              LED2=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED2=0;
              Delay(Time);
              LED2=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);
        
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED3=0;
              Delay(Time);
              LED3=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED3=0;
              Delay(Time);
              LED3=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED4=0;
              Delay(Time);
              LED4=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED4=0;
              Delay(Time);
              LED4=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);

        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED5=0;
              Delay(Time);
              LED5=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED5=0;
              Delay(Time);
              LED5=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED6=0;
              Delay(Time);
              LED6=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED6=0;
              Delay(Time);
              LED6=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);

        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED7=0;
              Delay(Time);
              LED7=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED7=0;
              Delay(Time);
              LED7=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);
        for(Time=0;Time<100;Time++)
        {
            for(i=0;i<20;i++)
            {
                LED8=0;
              Delay(Time);
              LED8=1;
              Delay(100-Time);
            
            }
        }
        
        for(Time=100;Time>0;Time--)
        {
            for(i=0;i<20;i++)
            {
                LED8=0;
              Delay(Time);
              LED8=1;
              Delay(100-Time);
            
            }
        }
        Delay(500);


    
}
 



void timer0() interrupt 1
{
    static int i = 0;
    TH0 = 0xFC;
    TL0 = 0x18;
    i++;
    if (i == 500)
    {
        i = 0;
        if(flag == 1){
            mode1();
        }
        if(flag == 2){ 
            mode2();
        }
        
    }
}
 
void int0() interrupt 0
{
    if (key == 0)
    {
        flag += 1;
        c = 0;
    }
    if(flag == 1)
        led = ~0x00;
    if(flag == 2)
        led = ~0x01;
    if(flag == 3)
        flag = 1;
}
 
void main()
{
    TMOD = 0x01;
    TH0 = 0xFC;
    TL0 = 0x18;
    EA = 1;
    ET0 = 1;
    EX0 = 1; 
    IT0 = 1;
    TR0 = 1;
    while (1);
}

  • 写回答

6条回答 默认 最新

  • 忧伤的玩不起 2023-09-26 17:27
    关注

    贴上全部代码看看,这个代码不全

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 修改了问题 9月26日
  • 修改了问题 9月26日
  • 展开全部