请进!关于单片机C语言中彩灯控制的问题!

来源:百度知道 编辑:UC知道 时间:2024/06/09 06:16:18
有8个灯,要求左边的4个从左到右依次亮,同时右边4个从右到左依次亮,循环两次!注意这里的,如果左边的第二个亮那么左边的第一个是灭的,同样右边也是的!这里要同时进行!哪位高手请帮帮忙!我自己写的但是运行不起来,也不知道哪错了,最好把您的程序写给我看看,再帮我修改一下!谢谢了!
#include"reg51.h"
sbit p2;
void Delay(void)
{ unsigned int i,j,k;
for(i=10;i>0;i--)
for(j=30;j>0;j--)
for(k=250;k>0;k--);
}

void main(void)
{ unsigned char a[]={ 0xff,0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7,0xfe,0xfd,0xfb,0xf7}
unsigned int *p=a;
p2=*p;
for(h=12;h>0;h--)
{ p++;
Delay();
}
}
那要怎么样才能直接用P2口呢?能不能麻烦你们帮我写一下啊,谢谢了啊!你们最好运行一下看对不对!谢谢了!

#include<AT89X51.H>
void Delay(void)
{ unsigned int i,j,k;
for(i=10;i>0;i--)
for(j=30;j>0;j--)
for(k=250;k>0;k--);
}

void main(void)
{const unsigned char a[13]={ 0xff,0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7,0xfe,0xfd,0xfb,0xf7};
unsigned int b;
do{
for(b=0;b<13;b++)
{
P1=a[b];
Delay();
}
}while(1);
}
你再试试,这下应该行了!

void main(void)
{ unsigned char a[]={ 0xff,0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7,0xfe,0xfd,0xfb,0xf7}
unsigned char h;
for(h=0;h<13;h++)
P2=a[h];
Delay();
}
}

sbit p2就错了,你用P2口就直接用好了
主程序里h没有声明
把p2=*p的语句放在for循环里,否则的话p2口上永远是第一组数,共阴的管子永远都亮
另外,要是想重复运行的话,就再主程序里加while循环

p2=*p; 仅仅赋了一次值。
p++并不改变p2的值,需在p++之后再加上p2=*p;这样一句话。

看到你的补充,再接着答吧。p2不用声明,直接使用吧。