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

求高手看一下可不可以实现,用proteus仿真怎么不对啊?如图的哇原理图,下面是代码!#include<reg52.h>#include<intrins.h>voidDe... 求高手看一下可不可以实现,用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--);
}

}
}
展开
 我来答
萨斯_
2014-09-26
知道答主
回答量:23
采纳率:100%
帮助的人:11.1万
展开全部

这是正确程序 ,望采纳。最好采用低电平触发  ,否则,单片机在上电的瞬间所有的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
百度网友faa4c941d
2014-09-26
知道答主
回答量:4
采纳率:0%
帮助的人:5337
展开全部
你的图设计的有问题啊,51的IO最好作为低电平输入时点亮LED,所以把每个LED正极上拉1K电阻到5V,LED负极接IO口!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
万恶小C
2014-09-26 · TA获得超过107个赞
知道小有建树答主
回答量:232
采纳率:0%
帮助的人:161万
展开全部
你把你现在的情况说一下,led灯应该是0才亮的,你这个代码有点问题,但是照你现在应该是有结果的
追问
为什么是0才亮,不是1吗?
情况:
仿真的时候P0口都不亮,放在实验板上只有P0口的在流水,P1长亮
追答
感觉是跑不到if里面,你把0x00改成0x80看下?
你用unchar来移位会出问题,因为你定义的是一个8位的数,你可以sbit P2直接用他来移,反正你的问题肯定是出在这里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻城之血恋
2014-09-26 · TA获得超过100个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:50.1万
展开全部
P0口的上拉电阻太大,一般1K-10K就够了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liliwei5
2014-09-26 · TA获得超过5231个赞
知道小有建树答主
回答量:338
采纳率:86%
帮助的人:191万
展开全部
  1. “幻城之血恋 ”说的对,你的 P0口上拉电阻阻值太大了,在实际电路中要根据 LED 电流,

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

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

      不会用吧。

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

      其它LED接法相同)。

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

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式