标题:
单片机LED流水灯 在仿真的时候第一次第一个灯不亮,其余都正常
[打印本页]
作者:
voner
时间:
2018-3-18 10:57
标题:
单片机LED流水灯 在仿真的时候第一次第一个灯不亮,其余都正常
最近给别人讲LED流水灯,发现了一个问题,在仿真的时候第一次第一个灯不亮,其余都正常,第二次也能从第一个开始亮,在思路上不知道哪里有问题,
代码如下:
第一次:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
void delay(uint z)
{
uint x,y;
for(x = z;x > 0;x--)
for(y = 120;y > 0 ;y--);
}
void main()
{
P0=0XFE ;
while(1)
{
P0=_crol_ (P0,1);
delay(500);
}
}
第二次修改 加了temp 将P0赋值给temp 就可以
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp;
void delay(uint z);
void delay(uint z)
{
uint x,y;
for(x = z;x > 0;x--)
for(y = 120;y > 0 ;y--);
}
void main()
{
temp=0XFE ;
while(1)
{
P0=temp;
temp=temp<<1;
temp=temp|0x01;
// temp=_crol_ (temp,1);
delay(500);
}
}
但是有点理解不通 P0不可以直接_crol_(P0,1)么 问题出在那里 望大佬指点
作者:
voner
时间:
2018-3-18 13:07
好像知道了 P0开始最为一个常量 后来又作为变量使用
作者:
QWER01234
时间:
2018-3-18 13:27
第一次的第一盏灯亮了之后没有delay所以看不见,p0赋值之后你就立马左移赋值了,左移之后才进行了delay所以看到了现象就是一开始就亮两盏灯。
作者:
voner
时间:
2018-3-18 13:36
QWER01234 发表于 2018-3-18 13:27
第一次的第一盏灯亮了之后没有delay所以看不见,p0赋值之后你就立马左移赋值了,左移之后才进行了delay所以 ...
没有 第一次是从第二个开始亮的 但是第一次循环过后就是对的了
作者:
李丽丽li
时间:
2018-3-18 14:13
第一次的第一盏灯亮了之后没有delay所以看不见,p0赋值之后你就立马左移赋值了,左移之后进行了delay所以看到了现象就是 一开始就亮两盏灯
作者:
huiyingkj
时间:
2018-3-18 14:48
P口不能成为变量。可以给P口赋一个变量。
作者:
jizi
时间:
2018-3-18 15:02
同学
_crol_ (P0,1)是循环移动是会把溢出位自动填回去的 形成有一个不亮其他全亮的样子
而第二次是全亮吧一个一个亮起来只是时间问题
P0是寄存器 你第一次是直接访问P0和修改它
第二次是用一个变量来赋值给P0
作者:
lwb_010
时间:
2018-3-18 15:39
p0赋值之后你就立马左移赋值了
作者:
999333
时间:
2018-3-18 15:51
第一种方法:一开始把最低位赋值给p0口,他已经移到下一位在while里面进行下一盏灯,如果你试一下在while(1)的上面加一个延时就可以显示第一盏灯,第二种方法:一开始就赋值p0为最高为比如0x7f就可以
作者:
hds1988_xjtu
时间:
2018-3-18 17:05
一般情况下第二种方法常用
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1