找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2877|回复: 10
收起左侧

求助,proteus仿真的流水灯只有第一个一直在闪

  [复制链接]
ID:848083 发表于 2020-11-23 22:35 | 显示全部楼层 |阅读模式
目前的效果就是只有第一个在闪,找了很久都找不出原因

电路图

电路图

流水灯代码

流水灯代码

评分

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

查看全部评分

回复

使用道具 举报

ID:89515 发表于 2020-11-24 06:54 来自手机 | 显示全部楼层
符号错了,这么明显啊!!!
回复

使用道具 举报

ID:102963 发表于 2020-11-24 08:45 | 显示全部楼层
P1=~(temp>>a);  改成这句试试
回复

使用道具 举报

ID:848083 发表于 2020-11-24 12:41 | 显示全部楼层
songxia8013 发表于 2020-11-24 08:45
P1=~(temp>>a);  改成这句试试

还是不行。。
回复

使用道具 举报

ID:848083 发表于 2020-11-24 12:43 | 显示全部楼层
songxia8013 发表于 2020-11-24 08:45
P1=~(temp>>a);  改成这句试试

改成
  1. P1=~(temp<<a);
复制代码
就可以了,
这是什么原理。。。
回复

使用道具 举报

ID:89515 发表于 2020-11-25 07:56 来自手机 | 显示全部楼层
whisper_1021 发表于 2020-11-24 12:43
改成就可以了,
这是什么原理。。。

P1的初值是什么!!!
回复

使用道具 举报

ID:782419 发表于 2020-11-25 08:33 | 显示全部楼层
>>是右移操作,<<是左移操作
0x01等于二进制的0000 0001
因为led的正极接的是电源正极,负极接的是IO,所以只有当IO为0时LED才会亮
如果右移0位,变成0000 0001,取反就变成了1111 1110,最上边的LED亮
如果右移大于或等于1位,都是0000 0000,取反变成1111 1111,是不会有LED亮的

如果是左移操作的话
左移一位,运算结果就变成了1111 1101,第二位LED 亮,其它LED不亮
左移二位,运算结果就变成了1111 1011,第三位LED 亮,其它LED不亮
依此类推,随着a的不断变化,形成了LED依次点亮的流水灯效果。

你可以在网上看一些视频教程。在原理上有更加详细的说明。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 绝世好帖!

查看全部评分

回复

使用道具 举报

ID:758126 发表于 2020-11-25 12:01 | 显示全部楼层
whisper_1021 发表于 2020-11-24 12:43
改成就可以了,
这是什么原理。。。

“<<”左移符号,让00000001左移00000010再左移00000100,以此类推。
回复

使用道具 举报

ID:804944 发表于 2020-11-25 12:22 | 显示全部楼层

右翼符号戳了P1=~(temp>>a);  改成这样
回复

使用道具 举报

ID:847574 发表于 2020-11-25 12:26 | 显示全部楼层
应该是>>的符号吧
回复

使用道具 举报

ID:658766 发表于 2020-11-25 20:45 | 显示全部楼层
第一,最小系统搭的有点问题;第二,可以temp=0xfe,然后直接左移,没必要加个取反增加理解难度
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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