为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2023-04-20 10:06:12
# 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--);}}
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

首先对比一下 左边与右边 那里有不同 同时 程序不同对应的输出结构有哪些不同。。
P2口 连接8个LED 低电平驱动使其发光。
P2=0xfe //上电 P2.0连接的 LED发光。 其余的熄灭。
对比一下程序
void main() //主函数
{
P2=0xfe; //P2初始化 
while(1) //死循环
{
num=P2; //这里 与左边不同 把P2的状态给 NUM 也就是0XFE num=0xfe
P2=_crol_(num,1); //P2等于num 循环左移 P2=0xef 这时应该是连接的P2.7的LED发光 
delay(0);//延迟  
}
}

左边 代码 NUM 每次大循环 都赋值 num=0xfe 是固定的 所以不管你以后怎么移动 P2口的输出都是不变得 只移动了一次。

查看完整回答
反对 回复 2023-04-23
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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

查看完整回答
反对 回复 2023-04-23
?
慕森王

TA贡献1777条经验 获得超3个赞

延时函数没有起到作用 ,你没有在延时函数中加入 while(i--);
而且你的延时也太短了,才25,要看到效果至少也是50000

查看完整回答
反对 回复 2023-04-23
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信