一个c语言程序关于10个led流水灯的

求高手看一下可不可以实现,用proteus仿真怎么不对啊?如图的哇原理图,下面是代码!

#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

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-26
你的图设计的有问题啊,51的IO最好作为低电平输入时点亮LED,所以把每个LED正极上拉1K电阻到5V,LED负极接IO口!
第2个回答  2014-09-26
你把你现在的情况说一下,led灯应该是0才亮的,你这个代码有点问题,但是照你现在应该是有结果的追问

为什么是0才亮,不是1吗?
情况:
仿真的时候P0口都不亮,放在实验板上只有P0口的在流水,P1长亮

追答

感觉是跑不到if里面,你把0x00改成0x80看下?
你用unchar来移位会出问题,因为你定义的是一个8位的数,你可以sbit P2直接用他来移,反正你的问题肯定是出在这里

第3个回答  2014-09-26
P0口的上拉电阻太大,一般1K-10K就够了
第4个回答  2014-09-26

    “幻城之血恋 ”说的对,你的 P0口上拉电阻阻值太大了,在实际电路中要根据 LED 电流,

         用多大的电阻。一般 1K~5K左右吧。

  2. 在proteus仿真用这电阻是不行的,我也不知道怎么回事,可能是软件的 BUG 或是我

      不会用吧。

  3. 如用proteus仿真,你可以用排阻 “RESPACK-8”,接线如下图(图上我只接了一个 LED,

      其它LED接法相同)。

  4. 我看大家都建议你用低电平时,LED 亮。我也是这个建议。

另,程序中 主函数好像少了个 ” }“

追问

谢谢,程序改过了,现在还是只有P2口的亮,其他的没有反应

追答

你要把电阻改成排阻的,你仔细看一下,我上面写的。我把仿真和程序给你传上来了,我就画了一个LED,你把其它LED加上就行了。

本回答被网友采纳

一个c语言程序关于10个led流水灯的
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);} ...

c语言设计的流水灯程序,越简单越好,最好早10行左右!
delayms(250);LED = LED << 1; \/\/循环右移1位,点亮下一个LED "<<"为左移位 if(P2 == 0x00 ) {LED = 0xfe; } \/\/ 0xfe = 1111 1110 } }

关于c语言流水灯程序
实现的功能是 P1 P3口的流水灯 循环闪动 你可以参照这个写..使用位控制 include "reg51.h"void main(){ unsigned int i=10;P1=0xfe;while(1){ while(--i){;} P1=(P1<<1) | 0x01;if(P1==0xff) P3 = 0x7f;while(P1==0xff){ while(--i){;} P3=(P3>>1) | 0x80;if(P...

如何用c语言实现流水灯功能?
可以用for循环试试unsingned char i;for(i=0;i<5;i++)\/\/流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处...

编写出单片机流水灯程序
编写一个基于8051单片机的流水灯程序,假设我们使用P1口连接了8个LED灯,要实现从第一个LED开始依次点亮,形成流水效果。以下是一个简单的C语言程序示例:```c include void delay(unsigned int ms) { unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--); \/...

求流水灯(一个灯从上往下依次点亮)和数码管(0000--9999)的C语言程序
h>#include <intrins.h> void sleep(int ma){ int i;for(;ma>0;ma--){ for(i=0;i<124;i++) {;} } } void main(){ P1=0xfe;for(;;){ sleep(10000);\/\/这里是因为我的软件运行速度较快,你可以改为1000就好了。P1=_crol_(P1,1);\/\/向左滚动一位 } } 这是流水灯的 ...

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:include \/\/51系列单片机定义文件 define uchar unsigned char \/\/定义无符号字符 define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水...

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)_百度...
while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮 delay();P3=0xdf;\/\/第六个灯亮 delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮...

51单片机流水灯执行10次 全部闪烁一次 一直循环十次闪烁一次 c语言怎么...
include<reg51.h>#define uchar unsigned charvoid delay(uchar a){uchar i;whilie(a--)for(i=0;i<110;i++);}main(){uchar i,j;for(i=0;i<10;i++) P0=0xfe; for(j=0;j<8;j++) { P0=_crol_(P0,1); delay(200); } } P0=0x00; delay(200...

C语言用一个按钮控制流水灯的编程求帮助啊??? 程序写下,谢谢
delay(100);} if(flag ==1){ P1 = 0xf7;delay(100);P1 = 0xfb;delay(100);P1 = 0xfd;delay(100);P1 = 0xfe;delay(100);} } } 通过外部中断INT0所连的按键可以控制P1.4-P1.7所控制的LED等顺序或者逆序形成流水灯。这是基于51的程序,其它CPU的也大同小异,希望对你有帮助!

相似回答