为了理想生活而奋斗 2023-10-03 00:08 采纳率: 91.4%
浏览 15
已结题

那又是怎么实现我按下独立按键LED灯逐个变亮#include <regx52.h>(相关搜索:单片机|数据类型|二进制)

这是我在STC89C52RC普中单片机上烧录的程序,对于代码中对数据类型为unsigned char的LEDNum进行自增自减运算不是很理解,据说是unsigned char这个数据类型是八位二进制数据?那又是怎么实现我按下独立按键LED灯逐个变亮


#include <REGX52.H>

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

unsigned char LEDNum;

void main()
{
    P2 =~ 0x01;
    while(1)
    {
        if(P3_1 == 0)
        {
            Delay(20);
            while(P3_1 == 0);
            Delay(20);
            
            LEDNum++;
            if(LEDNum >= 8)
            {
                LEDNum = 0;
            }
            P2 = ~(0x01 << LEDNum);
        }
        if(P3_0 == 0)
        {
            Delay(20);
            while(P3_0 == 0);
            Delay(20);
            
            if(LEDNum == 0)
            {
                LEDNum = 7;
            }
            else
            {
                LEDNum--;
            }

            P2 = ~(0x01 << LEDNum);
        }
    }
}
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-03 09:11
    关注

    引自强大而免费的微信小程序:皆我百晓生。


    这段代码用于控制单片机上的LED灯逐个变亮。下面我解释一下代码中的关键部分:

    1. unsigned char 是一个8位二进制无符号整数数据类型,范围是0到255。在这个代码中,它被用来表示LED灯的编号。

    2. LEDNum++ 表示将LEDNum的值自增1,即LED编号加1。

    3. LEDNum-- 表示将LEDNum的值自减1,即LED编号减1。

    4. P2 = ~(0x01 << LEDNum) 用于设置P2端口的输出状态以控制LED灯的亮灭。0x01 << LEDNum 是将二进制数0x01左移LEDNum位,然后再取反(~)得到要设置的值。

    代码中的逻辑是:当按下P3_1口的独立按键时,先延时一段时间(20ms),然后检测按键是否松开,再延时一段时间(20ms)。接着,LEDNum加1并检查是否超过了8,如果超过了则将LEDNum重置为0。最后,根据得到的LEDNum值设置P2端口的输出状态。

    当按下P3_0口的独立按键时,执行类似的操作,只是 LEDNum 的值在一定范围内进行减操作。

    这样,按下不同的按键时,LED灯的编号会随之改变,实现LED灯逐个变亮的效果。

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

报告相同问题?

问题事件

  • 系统已结题 10月12日
  • 已采纳回答 10月4日
  • 创建了问题 10月3日