为什么主函数里边的两个for循环为什么换成 for(n=7; n>0; n--) 就不行?

# include <reg51.h>
# include <intrins.h>
#define LED P2  
void Delay(unsigned int);  
void main(void)
{
unsigned char n;

LED=0x01;

while(1)
{

for(n=0; n<7; n++)
{
LED = _crol_(LED,1);  
Delay(25);
}

for(n=0; n<7; n++)
{
LED = _cror_(LED,1);
Delay(25);
}
}
}
void Delay(unsigned int c)
{
unsigned int i, j;
while(c--)
{
for(i=38; i>0; i--)
for(j=130; j>0; j--);
}
}

隔江千里
浏览 178回答 3
3回答

九州编程

首先对比一下 左边与右边 那里有不同 同时 程序不同对应的输出结构有哪些不同。。P2口 连接8个LED 低电平驱动使其发光。P2=0xfe //上电 P2.0连接的 LED发光。 其余的熄灭。对比一下程序void main() //主函数{P2=0xfe; //P2初始化&nbsp;while(1) //死循环{num=P2; //这里 与左边不同 把P2的状态给 NUM 也就是0XFE num=0xfeP2=_crol_(num,1); //P2等于num 循环左移 P2=0xef 这时应该是连接的P2.7的LED发光&nbsp;delay(0);//延迟&nbsp;&nbsp;}}左边 代码 NUM 每次大循环 都赋值 num=0xfe 是固定的 所以不管你以后怎么移动 P2口的输出都是不变得 只移动了一次。

慕尼黑的夜晚无繁华

一个时钟周期=晶振的倒数51单片机的一个机器周期=6个状态周期=12个时钟周期一个单周期指令包括一个机器周期,即12个时钟周期,所以12m晶振的话一条单周期指令执行的时间为12*(1除12m)=1us延时更多的话往上乘就是了

慕森王

延时函数没有起到作用 ,你没有在延时函数中加入 while(i--);而且你的延时也太短了,才25,要看到效果至少也是50000
打开App,查看更多内容
随时随地看视频慕课网APP