找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1090|回复: 3
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:587175 发表于 2019-7-20 00:14 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
第一颗灯在先延迟的时候,能正常移动;
但是在先移动后延迟的时候,第一颗灯竟然不发生移动了,我就改了一下延迟的顺序,但不知道这是为什么,能解释一下那?

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

1563552516203-1761855176.jpg

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

1563552574725-1009625705.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2019-7-20 07:32 | 只看该作者
        unsigned int a;         while(1){P1=P1<<1;a=55555;while(a--);if(!P1)P1=255;}
回复

使用道具 举报

板凳
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:220005 发表于 2019-7-20 12:31 | 只看该作者
首先明确:

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

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

上述就是正常情况。

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

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

评分

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

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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