对于第一个问题.你可以参考一下下面的程序.其原理都是一样的了.你尽量使用左移或者右移命令来实现它,令代码更加简洁明了.要实现左移完后实现右移的话可以使用右移命令">>"同时增加一条判断命令,右移代码也和左移命令是一样的了.而led的初值则应定为0x80.最后建议你在编写代码时如果是重复使用的代码尽量做到使用子函数.因为你的代码写得太乱了,我也不知道为什么了会出现你所说的情况了.虽然程序小.但是在大程序时.就会令自己很难看得懂了.对于第二个问题.我建议你使用数组来实现它,定义一组数组.然后通过循环来实现它.
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i) //延时2ms子程序
{
uchar j,k;
for(i;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
uchar n,led=0x01;
while(1)
{
delay(250);//延时0.5s
P0=~(led<<n);//左移命令,同时LED灯是低电平亮
n++;
if (n>=8)
n=0;
}
}
|