2301_77523248 2025-05-08 22:04 采纳率: 80%
浏览 15
已结题

请问八个led灯循坏闪烁太慢了,我这个程序应该怎么改

img

img


请问八个led灯循坏闪烁太慢了,我这个程序应该怎么改。请问哪里有问题

  • 写回答

2条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-08 22:47
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    根据您提供的代码和问题描述,LED循环闪烁太慢的主要原因是延时时间过长。以下是修改建议和优化后的代码:

    1. 问题分析

    当前代码中每次LED亮灭的延时为:

    • LED亮时延时:time50ms(10) → 500ms
    • LED灭时延时:time50ms(20) → 1000ms
      这样每个LED的完整周期需要1.5秒,8个LED循环一次需要12秒,确实太慢。

    2. 优化方案

    建议修改延时参数,并优化代码结构:

    #include <REGX51.H>
    #include <INTRINS.h>
    
    void delay_ms(unsigned int ms) {
        unsigned int i, j;
        for(i=0; i<ms; i++)
            for(j=0; j<120; j++);
    }
    
    void main() {
        unsigned char i;
        unsigned char led = 0xFE;
        
        P1 = 0xFF;  // 初始关闭所有LED
        
        while(1) {
            for(i=0; i<8; i++) {
                P1 = led;        // 点亮当前LED
                delay_ms(200);   // 亮200ms
                P1 = 0xFF;       // 关闭所有LED
                delay_ms(100);   // 灭100ms
                led = _crol_(led, 1); // 循环左移
            }
        }
    }
    

    3. 主要修改点

    1. 简化了延时函数,使用更精确的毫秒级延时
    2. 将每个LED的亮灭时间调整为:
      • 亮:200ms
      • 灭:100ms
    3. 移除了不必要的嵌套循环
    4. 使用更直观的变量名

    4. 进一步优化建议

    如果需要更流畅的效果,可以尝试:

    // 更快的循环效果
    void main() {
        unsigned char i;
        unsigned char led = 0xFE;
        
        P1 = 0xFF;
        
        while(1) {
            for(i=0; i<8; i++) {
                P1 = led;
                delay_ms(100);  // 亮100ms
                P1 = 0xFF;
                delay_ms(50);   // 灭50ms
                led = _crol_(led, 1);
            }
        }
    }
    

    您可以根据实际需要调整delay_ms()中的参数值来获得理想的闪烁速度。如果需要精确计时,建议使用定时器中断方式。

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

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 5月8日