Aatrox643 2023-09-21 19:04 采纳率: 0%
浏览 9

预想是让独立按键(P3_1)控制LED(P2)亮灯移位,可按键A(P3_1)有反应,按键B(P3_0)无反应。

#include <REGX52.H>
#include <INTRINS.H>

void Delay(int xms)    //@11.0592MHz
{
    unsigned char data i, j;
    
    while(xms)
    {
        _nop_();
        i = 2;
        j = 199;
        do
        {
            while (--j);
        }     while (--i);
        xms--;
    }
}

void main()
{
    char LED=0; //³õʼ»¯LED
    P2=~0x01; //³õʼ»¯P2¿Ú
    
    while(1)
    {
        if(P3_1==0) //A°´¼ü±»°´ÏÂ
        {
            Delay(20); //µÚÒ»ÑÓ³Ù
            while(P3_1==0) //Ïû¶¶
            {
                
            }
            Delay(20); //µÚ¶þÑÓ³Ù
            
            LED++; //LEDÓÒÒÆ£¨¶þ½øÖÆ£©
            if(LED>=8) //ÂúÒç³õʼ»¯
            {
                LED=0;
            }
            P2=~(0x01<<LED); //LEDÓÒÒÆ
            
        if(P3_0==0)
        {
            Delay(20); //µÚÒ»ÑÓ³Ù
            while(P3_0==0) //Ïû¶¶
            {
                
            }
            Delay(20); //µÚ¶þÑÓ³Ù
            
            if(LED==0) //ÂúÒç³õʼ»¯
            {
                LED=7;
            }
            else
            {
                LED--; //LED×óÒÆ£¨¶þ½øÖÆ£©
            }
            P2=~(0x01<<LED); //LED×óÒÆ
            
        }
        }
    }
}

预想是让独立按键(P3_1与P3_0)控制LED(P2)亮灯移位,可按键A(P3_1)有反应,按键B(P3_0)无反应。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 20:14
    关注

    【以下回答由 GPT 生成】

    问题出在代码逻辑上,当按下独立按键后,虽然检测到P3_1变为低电平,但是代码中没有明确的移位操作,导致LED一直处于亮的状态。以下是修正后的代码:

    #include <REGX52.H>
    #include <INTRINS.H>
    
    void Delay(int xms)    // @11.0592MHz
    {
        unsigned char data i, j;
    
        while(xms)
        {
            _nop_();
            i = 2;
            j = 199;
            do
            {
                while (--j);
            } while (--i);
            xms--;
        }
    }
    
    void main()
    {
        char LED=0x01;
        P2=~LED;
    
        while(1)
        {
            if(P3_1==0)
            {
                Delay(20);
                while(P3_1==0) // 这里将判断条件改为P3_1 == 0
                {
    
                }
                Delay(20);
    
                if(P3_1==1) // 这里将判断条件改为P3_1 == 1
                {
                    LED<<=1;
                    P2=~LED;
                }
    
            }
        }
    }
    

    修正后的代码逻辑是: 1. 初始化LED为0x01,将其取反后赋值给P2,使第一个LED灯亮起。 2. 进入循环,检测P3_1是否为低电平。

    a. 如果是低电平,说明独立按键被按下。延时20毫秒,然后再次检测P3_1的电平,等待独立按键释放。

    b. 如果是高电平,说明独立按键已释放。此时将LED左移一位(相当于灭掉第一个LED,点亮下一个LED),并将LED取反后赋值给P2,更新LED灯的状态。

    1. 重复执行上述步骤。

    请重新下载修正后的代码到单片机上,测试是否能够正确响应独立按键并控制LED灯移位。如果问题仍然存在,请提供更多硬件和环境信息或者其他相关代码,以便我能更具体地帮助你解决问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 9月21日
  • 修改了问题 9月21日
  • 修改了问题 9月21日
  • 修改了问题 9月21日
  • 展开全部