return_12_ 2024-06-25 22:20 采纳率: 0%
浏览 3

51单片机编程内容技术问题

51单片机
先看看程序

img

img

img

img

img

img


为什么这样编程之后不能进入for循环呀?按下按键之后就一直停留在一个状态

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-25 22:20
    关注

    引自免费微信小程序:皆我百晓生

    这个问题涉及到51单片机编程的基本知识和一些特殊功能的操作,比如按键的处理和中断的管理。在您的代码中,存在几个关键点需要注意。

    首先,LED=0x00; 是设置LED为初始状态,即全黑。然后,您尝试通过 ledl=LED&0x01; 来将LED的低位(从右到左依次是LED的第0、1、2、3位)设为1,从而让LED点亮。但是,由于您的代码只设置了LED的最低位,而没有设置其他的位,所以即使按键被按下,LED也不会根据按键的状态进行相应的变换。

    要解决这个问题,您可以按照以下步骤修改代码:

    1. 在初始化代码中,确保将所有LED的位都设置为1,以便在按键按下时,能正确地控制LED的状态。
    2. 修改按键中断函数 IntOInit1()IntOInit2() 中的代码,使其分别控制4个灯同时闪烁和两组灯切换闪烁,而不是仅仅控制一个灯。

    下面是一个示例代码,演示了如何按上述步骤操作:

    #include <reg51.h>
    #include <intrinsics.h>
    
    unsigned char LED = 0x00;
    
    sbit keyl = P3^2;
    sbit key2 = P3 ^3;
    sbit ledl = P2^0;
    sbit led2 = P2^1;
    sbit led3 = P2^2;
    sbit led4 = P2^3;
    
    void delay(unsigned int k)
    {
        while(k--)
    }
    
    void IntOInit1()
    {
        IT0 = 1;
        EX0 = 1;
        EA = 1;
    
        // 设置所有LED位为1
        for (unsigned char i = 0; i < 4; i++)
            LED |= (1 << i);
    }
    
    void IntOInit2()
    {
        IT1 = 1;
        EX1 = 1;
        EA = 1;
    
        // 控制4个灯同时闪烁
        for (unsigned char i = 0; i < 4; i++)
            LED &= ~(1 << i);
    
        // 控制两组灯切换闪烁
        LED &= ~(1 << 0) | (1 << 2);
    }
    
    void main(void)
    {
        LED = 0x00; // 初始化LED为全黑
    
        while (1)
        {
            if (keyl == 0)
                ledl = LED & 0x01;
            else if (key2 == 0)
                ledl = LED & 0x01;
            else
                ledl = LED & 0x01;
    
            led2 = LED >> 1 & 0x01;
            led3 = LED >> 2 & 0x01;
            led4 = LED >> 3 & 0x01;
    
            delay(500);
    
            ledl = LED & 0x01;
            led2 = LED >> 1 & 0x01;
            led3 = LED >> 2 & 0x01;
            led4 = LED >> 3 & 0x01;
        }
    }
    

    这段代码首先将所有的LED位设置为1,然后根据按键的状态,控制LED的状态。当按键按下时,会相应地改变LED的高、低位,从而使LED闪烁。如果您遇到任何其他问题,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月25日