tuantuan_2022 2023-01-11 17:06 采纳率: 50%
浏览 163
已结题

51单片机 按键控制LED状态

51单片机,单个按键按下弹起后,控制LED状态
ledmod==0 长灭
ledmod==1常亮
ledmod==2 呼吸灯
代码,如下,当到mod2的时候,呼吸灯亮了,但再按下键的时候,无法切换模式,
各位学霸帮说一说具体问题,修改下代码能正常执行

#include <REGX52.H>
#include "Timer0.h"
void breath();
void Br_dy(unsigned int t)
{
    while(t--);
}

unsigned char Time,Speed;
void Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}

unsigned char ledmod=0,ledcount;
void main()
{
    Timer0Init();
    while(1)
    {
            if(P3_1==0)
            {
                Delay(50);
                while(P3_1==0);
                Delay(50);
                ledmod++;
            }
if(ledmod>=3)
                {
                    ledmod=0;
                }
            }
        
}

void Timer0_Routine() interrupt 1
{
    static unsigned int T0Count;
    TL0 = 0x18;        
    TH0 = 0xFC;        
    T0Count++;        
    if(ledmod==0)    
    {
        P2_0=1;    
    }        
            
    if(ledmod==1)
    {
        P2_0=0;
    }
    if(ledmod==2)
    {
        //ºôÎüµÆģʽ
        unsigned char Time,Speed;
    
        for(Time=0;Time<100;Time++)
        {
            for(Speed=0;Speed<20;Speed++)
            {
                P2_0=0;
                Br_dy(Time);
                P2_0=1;
                Br_dy(100-Time);
            }

        }
        
        for(Time=100;Time>0;Time--)
        {
            for(Speed=0;Speed<20;Speed++)
            {
                P2_0=0;
                Br_dy(Time);
                P2_0=1;
                Br_dy(100-Time);
            }

        }
    }

    
}
  • 写回答

8条回答 默认 最新

  • 波波007 2023-01-11 17:17
    关注

    问题如下:
    1、在 main 函数中缺少一个对ledmod的判断,导致ledmod会超过3后不会回到0
    2、在main函数中缺少 while(1) 死循环,所以程序会在 main 函数执行完后结束
    3、Timer0Init() 函数没有定义,需要补充这个函数的实现
    4、在 Timer0_Routine 函数中缺少中断标志的清除
    5、Br_dy(unsigned int t) 函数的实现不够优秀
    修改后的代码如下:

    
    #include <REGX52.H>
    
    unsigned char ledmod=0,ledcount;
    
    void Timer0Init() 
    {
        TMOD |= 0x01;
        TH0 = 0xFC;
        TL0 = 0x18;
        TR0 = 1;
        ET0 = 1;
    }
    
    void Delay(unsigned int xms)
    {
        unsigned int i, j;
        for(i = xms; i > 0; i--)
        {
            for(j = 110; j > 0; j--);
        }
    }
    
    void main()
    {
        Timer0Init();
        while(1)
        {
            if(P3_1==0)
            {
                Delay(50);
                while(P3_1==0);
                Delay(50);
                ledmod++;
            }
            if(ledmod>=3)
            {
                ledmod=0;
            }
        }
    }
    
    void Timer0_Routine() interrupt 1
    {
        TH0 = 0xFC;
        TL0 = 0x18;
        if(ledmod==0)    
        {
            P2_0=1;    
        }        
        if(ledmod==1)
        {
            P2_0=0;
        }
        if(ledmod==2)
        {
            //ºôÎüµÆģʽ
            unsigned char Time,Speed;
            for(Time=0;Time<100;Time++)
            {
                for(Speed=0;Speed<20;Speed++)
                {
                    P2_0=0;
                    Delay(Time);
                    P2_0=1;
                    Delay(100-Time);
                }
     
            }
            
            for(Time=100;Time>0;Time--)
            {
                for(Speed=0;Speed<20;Speed++)
                {
                    P2_0=0;
                    Delay(Time);
                    P2_0=1;
                    Delay(100-Time);
                }
     
            }
        }
        TF0 = 0;
    }
    
    

    修改后就能正常运行了,你试一试。欢迎点赞

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月18日
  • 创建了问题 1月11日

悬赏问题

  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错