[求助] 小白求助单片机流水灯问题

Illxy   2016-7-29 08:35 楼主
本人51单片机小白,刚刚开始学习单片机。
最近看到简单的流水灯的设计,在文件中输入
#include
Void main()
{
P1=0xaa;
}
对单片机P1口的8I/O口同时进行输入,0x表示后面的数据以十六进制表示,十六进制的aa在二进制中为10101010,那么对应发光二极管的1.3.5.7亮,2.4.6.8灭,也可以将0xaa转化为十进制的170,如“P1=170;”
以上是郭天祥主编的51单片机教程中的一段,我拿着单片机进行尝试,流水灯也确实亮了。
但是,当我尝试对P1口的赋值做出改变时,结果却出了问题。
我输入P1=0xab,十六进制的ab转化成二进制应该是10101011,对应的应该是发光二极管1.3.5.7.8亮,然而实际上亮的灯却是3.5.7
P1=0xac,转化为二进制10101100对应发光二极管1.3.5.6亮,但实际上亮的是1.2.5.7
P1=0xad,转化为二进制10101101对应发光二极管1.3.5.6.8亮,但实际上亮的是2.5.7
求大神指教,这是怎么回事。






回复评论 (12)

自顶,求大神解救
点赞  2016-7-29 08:36
引用: 我输入P1=0xab,十六进制的ab转化成二进制应该是10101011,对应的应该是发光二极管1.3.5.7.8亮,然而实际上亮的灯却是3.5.7
P1=0xac,转化为二进制10101100对应发光二极管1.3.5.6亮,但实际上亮的是1.2.5.7。
P1=0xad,转化为二进制10101101对应发光二极管1.3.5.6.8亮,但实际上亮的是2.5.7。

看得出来,应该是你没有把原理图吃透,也就是硬件问题:可能是教程里的对位写1灯亮,而你的硬件刚好相反,对位写0灯亮,而且牵涉高低位问题
点赞  2016-7-29 08:42
引用: wgsxsm 发表于 2016-7-29 08:42
看得出来,应该是你没有把原理图吃透,也就是硬件问题:可能是教程里的对位写1灯亮,而你的硬件刚好相反 ...

大神,那我这个得怎么处理啊,怎么控制流水的灯?
点赞  2016-7-29 08:48
既然硬件错了,那么你就对应的该软件不就完了吗?
点赞  2016-7-29 08:58
引用: 雨后的梧桐 发表于 2016-7-29 08:58
既然硬件错了,那么你就对应的该软件不就完了吗?

好的,我试试,谢谢大神了
点赞  2016-7-29 09:01
引用: Illxy 发表于 2016-7-29 09:01
好的,我试试,谢谢大神了

客气,小事
点赞  2016-7-29 09:06
仔细一看就会发现规律,是低电平有效的,也就是说写0的时候灯才亮,
而且bit0应该对应1号灯,而不是8号灯,这里也是反过来了
点赞  2016-7-29 09:11
写之前还是确认下原理图上的灯是给高电平亮还是低电平亮,你列出的几种情况也可以看出来是电平反了
疏雨客晚归,荒烟乱,几许江南无晴!又落花,残香织梦,莫  莫  莫,白首衷肠……
点赞  2016-7-29 09:26
一般应该是写零表示LED灯,你可以看一下你的硬件原理图,所以没有错!
点赞  2016-7-29 10:09
不要看我,我只是来回忆一下51单片机入门的时候

几度风雨,几度春秋

哎,感慨起来了
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2016-7-29 12:31
那就取反操作吧,
点赞  2016-7-29 12:49
引用: sint27 发表于 2016-7-29 09:11
仔细一看就会发现规律,是低电平有效的,也就是说写0的时候灯才亮,
而且bit0应该对应1号灯,而不是8号灯 ...

明白了,谢谢啦
点赞  2016-7-29 15:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复