标题: 灯定住了?求分析单片机程序 [打印本页]

作者: 电信小海    时间: 2019-7-20 00:14
标题: 灯定住了?求分析单片机程序
第一颗灯在先延迟的时候,能正常移动;
但是在先移动后延迟的时候,第一颗灯竟然不发生移动了,我就改了一下延迟的顺序,但不知道这是为什么,能解释一下那?

1563552516203-1761855176.jpg (666.66 KB, 下载次数: 54)

1563552516203-1761855176.jpg

1563552574725-1009625705.jpg (665.07 KB, 下载次数: 37)

1563552574725-1009625705.jpg

作者: xianfajushi    时间: 2019-7-20 07:32
        unsigned int a;         while(1){P1=P1<<1;a=55555;while(a--);if(!P1)P1=255;}
作者: xianfajushi    时间: 2019-7-20 11:36

void main()

{

        unsigned int a;

        unsigned char b=P1;

        bit k;

        while(1){P1=(k?P1>>1:P1<<1);a=55555;while(a--);if(!P1){k=~k;P1=(k?255:(b=(b?b<<1:255)));}}

}

作者: Flywithliye    时间: 2019-7-20 12:31
首先明确:

P0 = P0<<1;
P0 = P0|0x01;

这部分内容其实是实现 伪“循环左移”,第一行代码左移之后,最低位补0,而下一行代码,又马上把刚才最低位补进来的0“或成1”。
相当于:先点亮第二盏灯,然后又马上熄灭第一盏灯。所以有一个瞬间,第二盏和第一盏同时点亮。

上述就是正常情况。

而当你把延时Delay(50000);这句话放在上述两行之间时,意味着,点亮第二盏灯后,等“50000”的延时之后,才熄灭第一盏。

不是很懂得话!去网络上查一下移位和循环移位的资料!很快会懂的!





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1