找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

各位老师,这个单片机左右程序为什么没有逐位左移,求指点!

查看数: 2978 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-11-15 21:02

正文摘要:

各位老师,这个22行的led=(led<<i)运行的效果只有p0.0、p0.1、p0.3、p0.6被陆续点亮。而把哪行改成led=(0x01<<i)则可以实现p0到p7左移。能不能帮忙指点一下 单片机源程序: #include<reg51.h> #def ...

回复

ID:250626 发表于 2017-11-18 08:36
i = 及就移位几位  你希望移位 1 而不是 2,3,4.。。。
ID:248394 发表于 2017-11-18 06:50
HC6800-ES-V2.0 发表于 2017-11-16 10:20
你的程序,就是这样的嘛,没有问题,只是它不是你想的那样罢了。
我们来看看程序的运行就知道了:
先说这 ...

谢谢^ω^
ID:164602 发表于 2017-11-16 10:20
你的程序,就是这样的嘛,没有问题,只是它不是你想的那样罢了。
我们来看看程序的运行就知道了:
先说这个与你想法一致的:led=(0x01<<i)
0x01=00000001
i=0时,led=00000001
i=1时,led=00000010
i=2时,led=00000100......
不用再分析下去了,当然是一个一个向左移动的。


再来看看不能按你想法运行的那个:led=0x01;led=(led<<i);
开始时:led=00000001
i=0时,没移位,led=00000001
i=1时,led=00000010
i=2时,以当前的led值移位2位,led=00001000
i=3时,再以当前led值移位3位,led=01000000......
不用再分析了吧。


综上所述,你想逐位移动,要嘛,用第一种语句;要嘛,第二种情况只能led=(led<<1),即每次只移动一位

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

Powered by 单片机教程网

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