我如何扭转这一点并使其代码从 LED7 开始,也就是最左边的 LED,而不是 LED1,然后从左向右移动?

Posted

技术标签:

【中文标题】我如何扭转这一点并使其代码从 LED7 开始,也就是最左边的 LED,而不是 LED1,然后从左向右移动?【英文标题】:How do I reverse this and make it so the code starts on LED7, aka farthest left led, and not on LED1, and then shifts left to right? 【发布时间】:2022-01-16 12:08:33 【问题描述】:

我对 c 语言编程和一般使用 Keil uVision 真的很陌生,我收到了一个练习,我必须反转下面的代码并使其从 LED7 开始,最远指向左侧,然后移动一点一点地向右,然后又往回走,以此类推。

当前代码从右边开始循环到左边。当我尝试将某些代码(例如,for(i=1;i>1;i++) 转换为 i=7;i>7;i--)并运行它时,它会闪烁右侧的第一个 LED 0.5 秒,然后停止。

它以随机间隔重新启动。我该怎么办?

void Init_Device(void);

void main(void)

    U8 port=0x01,i;
    bit direction=0;
    Init_Device();
    initSYS();
    LCD_setTextSize(3);
    LCD_setCursor(80, 100);
    printf("P1 = ");

    while(1)
    
        for(i=1;i>1;i++)
        
            LCD_setCursor(160, 100);
            LCD_printNumb(port);
            printf(" = %d  ", (int)port);
            P1=~port;
            delay_ms(500);
            if(!direction)
                port<<=1;
            else
                port>>=1;
        
        direction=~direction;
    

【问题讨论】:

请仔细检查显示的代码。它不能做所描述的行为。我怀疑例如for(i=1;i&gt;1;i++)。它永远不会执行任何事情。 有几件事似乎是错误的。条件:“i>1”和“i>7”。那么“i”就不会被使用。 我敢打赌,您描述的工作代码从 LED0 开始,而不是 LED1。 【参考方案1】:

采用您描述的代码。然而,这不是显示的代码。

通过执行以下两项更改来编辑工作代码。

port 初始化为 MSB 0x80(标识“最左边的 LED”)而不是 LSB 0x01(标识“最右边的 LED”)。 将direction初始化为~0,即0以外的另一个;这会导致代码开始向另一个方向移动。

【讨论】:

以上是关于我如何扭转这一点并使其代码从 LED7 开始,也就是最左边的 LED,而不是 LED1,然后从左向右移动?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 显示/隐藏表格行

如何将列表数组合并到单列中并使其适合现有的数据框?

如何覆盖 Django 的 ModelAdmin 的“媒体”属性并使其动态化?

扭转弹簧有啥优势特点?

定位视频并使其像图像一样在背景中重复

如何使 UIImageView 可点击并使其执行某些操作? (迅速)