2301_76713303 2023-09-10 20:57 采纳率: 0%
浏览 7

proteus流水灯实验,这个是错在哪里啊?都是按照模板写的,但是还是一直有错误

proteus流水灯实验,这个是错在哪里啊?都是按照模板写的,但是还是一直有错误

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-10 22:17
    关注

    【以下回答由 GPT 生成】

    根据你提供的代码和描述,可能有两个问题导致流水灯实验无法正常工作。

    第一个问题是关于代码中的延迟函数的实现。在你的代码中,延迟函数通过嵌套循环来实现延迟,但是这种方法并不准确,它对处理器的速度和其他因素都很敏感。为了准确地实现延迟,建议使用定时器来代替嵌套循环。

    第二个问题可能是你在Proteus中没有正确设置引脚的初始状态或者引脚的连接。请确保你正确设置了P1引脚的初始状态,并将其连接到适当的LED灯。

    以下是修改后的代码和一些解决方案:

    #include <reg51.h>
    
    void delay();
    
    void main()
    {
        unsigned char i;
        P1 = 0x00;  // 将P1引脚的初始状态设置为低电平
        while(1)
        {
            for(i=0;i<8;i++)
            {
                P1 = 1<<i;
                delay();
            }
        }
    }
    
    void delay()
    {
        // 设置定时器
        TMOD |= 0x01;  // 设置定时器0为模式1
        TH0 = 0xFC;   // 设置定时器0高字节,根据晶振频率设定
        TL0 = 0x67;   // 设置定时器0低字节,根据晶振频率设定
        TR0 = 1;      // 启动定时器0
    
        // 等待定时器溢出
        while(!TF0);
    
        // 重置定时器
        TF0 = 0;
    }
    

    在修改后的代码中,我们使用定时器0来提供精确的延迟。在delay函数中,我们先设置了定时器0的参数,然后等待定时器溢出,最后重置定时器。通过使用定时器,我们可以获得准确的延迟而不受处理器速度等因素的影响。

    如果以上修改后的代码仍然无法正常工作,请检查Proteus中引脚的连接和初始化设置是否正确。



    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 9月10日