我如何扭转这一点并使其代码从 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>1;i++)
。它永远不会执行任何事情。
有几件事似乎是错误的。条件:“i>1”和“i>7”。那么“i”就不会被使用。
我敢打赌,您描述的工作代码从 LED0 开始,而不是 LED1。
【参考方案1】:
采用您描述的代码。然而,这不是显示的代码。
通过执行以下两项更改来编辑工作代码。
将 port
初始化为 MSB 0x80(标识“最左边的 LED”)而不是 LSB 0x01(标识“最右边的 LED”)。
将direction
初始化为~0
,即0
以外的另一个;这会导致代码开始向另一个方向移动。
【讨论】:
以上是关于我如何扭转这一点并使其代码从 LED7 开始,也就是最左边的 LED,而不是 LED1,然后从左向右移动?的主要内容,如果未能解决你的问题,请参考以下文章