关于#c语言#的问题:#include <regx52.h>(相关搜索:51单片机)

我现在这个代码只能实现按一下亮,再按一下灭,有没有可能实现按k1一下,led1闪烁,按k2,led1灭led2闪烁?

```#include<regx52.h>
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;

sbit D1=P2^0;
sbit D2=P2^1;
sbit D3=P2^2;
sbit D4=P2^3;

void delay(unsigned int xms)
{
unsigned char i,j;
while(xms)
{
i=2;
j=239;
do
{
while(--j);
}while(--i);
xms--;
}
}
void main()
{
while(1)
{
delay(20);
if(k1==0)
{
D1=D1;
}
while(k1==0);
if(k2==0)
{
D2=
D2;
}
while(k2==0);
if(k3==0)
{
D3=D3;
}
while(k3==0);
if(k4==0)
{
D4=
D4;
}
while(k4==0);
}

}```

【以下回答由 GPT 生成】

你可以通过添加状态变量和计时器来实现按下K1时LED1闪烁,按下K2时LED1灭,LED2闪烁的功能。

首先,定义两个状态变量led1_onled2_on来表示LED1和LED2的状态。初始状态为关闭。

bool led1_on = false;
bool led2_on = false;

然后,在循环中,检测到按键按下时,根据按键的不同设置对应的状态变量。

while(1)
{
    delay(20);

    if(k1 == 0)
    {
        led1_on = !led1_on;  // 切换LED1的状态
        led2_on = false;    // 关闭LED2
        D2 = 0;             // 确保LED2灭掉
        while(k1 == 0);     // 等待按键释放
    }

    if(k2 == 0)
    {
        led1_on = false;    // 关闭LED1
        led2_on = !led2_on;  // 切换LED2的状态
        while(k2 == 0);     // 等待按键释放
    }

    if(k3 == 0)
    {
        // 暂时不需要处理
        while(k3 == 0);     // 等待按键释放
    }

    if(k4 == 0)
    {
        // 暂时不需要处理
        while(k4 == 0);     // 等待按键释放
    }
}

最后,在循环中使用计时器来控制LED1和LED2的闪烁。

unsigned int led1_timer = 0;
unsigned int led2_timer = 0;

while(1)
{
    // ...

    // LED1控制
    if(led1_on)
    {
        led1_timer++;  // 计时器加1
        if(led1_timer >= 500)  // 如果计时器超过500,LED1反向
        {
            D1 = !D1;
            led1_timer = 0;
        }
    }
    else
    {
        D1 = 0;  // 关闭LED1
        led1_timer = 0;  // 重置计时器
    }

    // LED2控制
    if(led2_on)
    {
        led2_timer++;  // 计时器加1
        if(led2_timer >= 500)  // 如果计时器超过500,LED2反向
        {
            D2 = !D2;
            led2_timer = 0;
        }
    }
    else
    {
        D2 = 0;  // 关闭LED2
        led2_timer = 0;  // 重置计时器
    }
}

这样,按下K1时LED1会闪烁,而按下K2时LED1会关闭,LED2会闪烁。



【相关推荐】



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