找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

灯定住了?求分析单片机程序

查看数: 1486 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-7-20 00:14

正文摘要:

第一颗灯在先延迟的时候,能正常移动; 但是在先移动后延迟的时候,第一颗灯竟然不发生移动了,我就改了一下延迟的顺序,但不知道这是为什么,能解释一下那?

回复

ID:220005 发表于 2019-7-20 12:31
首先明确:

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

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

上述就是正常情况。

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

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

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

ID:332444 发表于 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)));}}

}
ID:332444 发表于 2019-7-20 07:32
        unsigned int a;         while(1){P1=P1<<1;a=55555;while(a--);if(!P1)P1=255;}

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表