一个c语言程序关于10个led流水灯的
#include <reg52.h>
#include <intrins.h>
void Delay10ms(unsigned int c);
main()
{
unsigned char LED1;
unsigned char LED2;
LED1 = 0xff; //0xfe = 1111 1110
LED2=0x02; //P2
while (1)
{
P2 = LED2;
Delay10ms(50);
LED2 = LED2 << 1;
if (P2 == 0x00)
{
P0=LED1;
Delay10ms(50);
LED1=LED1<<1;
if(P0==0x00)
{
LED1=0xfe;
LED2=0x02;
}
}
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
} 展开
这是正确程序 ,望采纳。最好采用低电平触发 ,否则,单片机在上电的瞬间所有的LED灯会闪一下。
#include <reg52.h>
#include <intrins.h>
void Delay10ms(unsigned int c);
main()
{
unsigned char i;
while (1)
{ P0=0x00;
P2=0x00;
while(1)
{ P2 = 0x02;
Delay10ms(50);
P2 = P2 >>1;
Delay10ms(50);
if (P2 == 0x01)
{ P2 = 0x00;
P0=0x80;
Delay10ms(50);
for(i=0;i<7;i++)
{
P0=P0>>1;
Delay10ms(50);
}
if(P0==0x01)
P0=0x00;
}
}
}
}
void Delay10ms(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
谢谢建议,不过按照你的方法给了一下,结果还是原来的那样只有票p2口的两个闪烁,其他没反应。
不会的 ,我亲测的 。 这是 程序和仿真图 。http://pan.baidu.com/s/1qWnvABM
为什么是0才亮,不是1吗?
情况:
仿真的时候P0口都不亮,放在实验板上只有P0口的在流水,P1长亮
感觉是跑不到if里面,你把0x00改成0x80看下?
你用unchar来移位会出问题,因为你定义的是一个8位的数,你可以sbit P2直接用他来移,反正你的问题肯定是出在这里
谢谢,程序改过了,现在还是只有P2口的亮,其他的没有反应
你要把电阻改成排阻的,你仔细看一下,我上面写的。我把仿真和程序给你传上来了,我就画了一个LED,你把其它LED加上就行了。